homeassistant接入国家电网电费余额(理论已经是支持全国)

14,931次阅读
21 条评论

共计 839 个字符,预计需要花费 3 分钟才能阅读完成。

提醒:本文最后更新于 2024-03-01 08:36,文中所关联的信息可能已发生改变,请知悉!

此方法已失效,请移步到 homeassistant 获取电费余额 2.0

前言

homeassistant 少个电费余额总感觉少点什么,之前的山东电网接口挂掉了,导致 ha 一个月没法查询电费余额,就此查找方法,发现很多小程序网页等都是各省定制化的,而且数据加密,无法获取电费,突发奇想找到 95598 网上营业厅,然后找到了下面的方法,就此分享

sgcc_electricity

容器地址:https://registry.hub.docker.com/r/dscao/sgcc_electricity

镜像加速拉取命令:docker pull dockerproxy.com/dscao/sgcc_electricity:latest

部署 docker

以群晖部署 docker 为例,其他 docker 举一反三哈

homeassistant 接入国家电网电费余额(理论已经是支持全国)

homeassistant 接入国家电网电费余额(理论已经是支持全国)

homeassistant 接入国家电网电费余额(理论已经是支持全国)

1. 高级设置里面的,变量需要按下面填入:

PHONE_NUMBER  # 填入国家电网手机号

PASSWORD               # 填入国家电网密码

HASS_URL                 #HA 局域网地址

HASS_TOKEN            #令牌,点 ha 头像 拉到最下面创建填入即可

2.docker 文件夹文件不需要关联,直接下一步

3. 启动容器

4.ha 里面会生成一个实体,实体注册表里面搜索 95598 就出来

实体属性

本应用在启动后和每隔 8 小时抓取一次数据,并在 HA 里更新以下一个实体及其六个属性:

sensor.electricity_95598:电费余额 / 上期账单金额

is_pay: 是否当期已结清

need_pay: 账单欠费金额(后付费用户)

last_electricity_usage:最近一天用电量

thismonth_electricity_usage: 本月用电量

yearly_electricity_usage:今年以来用电量

yearly_electricity_charge: 今年以来电费

last_date: 数据更新的最后日期

总结

就此就结束了~,可以通过调用实体的属性来查询各类的账单 / 金额等等,如果容器异常,看一下日志~

正文完
 9
zyx
版权声明:本站原创文章,由 zyx 于2023-06-16发表,共计839字。
转载说明:所有文章未经授权禁止转载、摘编、复制或建立镜像
评论(21 条评论)
Scong_F 评论达人 LV.1
2023-07-12 17:22:13 回复

手机app的网上国网的手机号和密码就行吗?山东怎么容器日志显示手机号密码错误,网上国网登录是没有问题的

 Windows  Edge  亚太地区亚太地区
    zyx 博主
    2023-07-14 07:54:11 回复

    @Scong_F 哪个省的

     Windows  Chrome  中国山东省济南市电信
dafeng 评论达人 LV.1
2023-08-28 15:20:38 回复

大佬,你这个我一直在用,但是这几天突然报错Webdriver quit abnormly, reason: Message: element not interactable,请问怎么解决啊

 Windows  Edge  美国佐治亚亚特兰大
    zyx 博主
    2023-08-28 21:13:45 回复

    @dafeng 目前看,我的也有问题,一直没注意,等明天看一下什么原因导致的,如有更新,会更新

     Macintosh  Safari  中国山东省济南市移动
    zyx 博主
    2023-08-28 21:20:51 回复

    @dafeng 部署一下这个docker试一下,https://github.com/renhaiidea/sgcc_electricity/commits/main

     Macintosh  Safari  中国香港阿里云
      dafeng 评论达人 LV.1
      2023-08-29 10:54:04 回复

      @zyx 今天按这个github上的部署了一下,还是不行,这是错误提示:derr: Traceback (most recent call last):
      stderr: File “/app/data_fetcher.py”, line 90, in fetch
      stderr: return self._fetch()
      stderr: File “/app/data_fetcher.py”, line 107, in _fetch

       Windows  Edge  美国佐治亚亚特兰大
        zyx 博主
        2023-08-30 11:25:29 回复

        @dafeng 我目前还没有部署测试,待后续吧

         Windows  Chrome  中国山东省济南市电信
          dafeng 评论达人 LV.1
          2023-08-30 17:00:22 回复

          @zyx 好的,辛苦大佬

           Windows  Edge  美国佐治亚亚特兰大
maccalove 评论达人 LV.1
2023-10-08 10:19:55 回复

请教,我已经配置成功了,也可以成功读数了。
但我想把每个实体(我有两个电表)的那6个属性都做成实体 ,谢谢

 Macintosh  Chrome  中国上海上海市电信
    zyx 博主
    2023-10-10 13:56:27 回复

    @maccalove 访问一下文章里面容器地址,里面有分户的配置

     Windows  Chrome  中国山东省济南市电信
Giovanni 评论达人 LV.1
2023-10-13 14:46:38 回复

容器看到了3个账号 但是HA里面搜实体没有发现是要到 yaml设置么

 Windows  Edge  中国北京北京市广电
    zyx 博主
    2023-10-13 15:39:06 回复

    @Giovanni 容器地址里面有多用户配置,按照配置载入ha就行了

     Windows  Chrome  中国山东省济南市电信
sa 评论达人 LV.1
2023-10-21 19:26:44 回复

感觉好像国家电网的验证码改成了拖动图片的方式验证了,现在都无法登录了

 Windows  Chrome  日本东京都东京亚马逊
    zyx 博主
    2023-10-23 21:15:50 回复

    @sa 最近没看 不行的话 让子弹飞一会~

     Macintosh  Safari  中国香港阿里云
111 评论达人 LV.1
2023-11-19 16:45:23 回复

老哥,还维护吗,改滑动验证了,期待中。。。

 Windows  Edge  中国台湾省中华电信
    zyx 博主
    2024-02-25 17:53:21 回复

    @111 是的,最近准备重新写一下教程,目前已经修复了,新的docker,需要配合nodered

     Macintosh  Safari  中国山东省济南市电信
fengshuang 评论达人 LV.1
2024-02-26 19:53:34 回复

怎么联系你啊

 iPhone  Chrome  乌克兰
    zyx 博主
    2024-03-01 15:46:25 回复

    @fengshuang 联系我有什么事情吗?

     Macintosh  Safari  中国山东省济南市电信
      fengshuang 评论达人 LV.1
      2024-03-03 15:11:09 回复

      @zyx 我想让你帮我定制个

       Windows  Chrome  美国科进
        zyx 博主
        2024-03-04 17:32:04 回复

        @fengshuang QQ:1833386663

         Macintosh  Safari  中国山东省济南市电信
会魔法的油条 评论达人 LV.1
2024-04-02 15:50:15 回复

测了下可以用,不过有时候会定位不到坐标位置,建议在fetch_data增加一个循环,定位不到位置就刷新一下验证码,然后重新定位,稳定性会提高不少
def fetch_data(self):
“””
…….
“””
self.loading_slide()
self.page.wait_for_selector(‘canvas’)
for i in range(5): #增加定位循环
slide_bg_img = self.page.evaluate(“() => document.querySelector(‘canvas’).toDataURL(‘image/png’)”)
slide_block_img = self.page.evaluate(
“() => document.querySelector(‘.slide-verify-block’).toDataURL(‘image/png’)”)

print(“2”)

# with open(‘slide_bg_img.png’, ‘wb’) as f:
# f.write(base64.b64decode(str(slide_bg_img).split(‘,’)[-1], altchars=None, validate=False))
# with open(‘slide_block_img.png’, ‘wb’) as f:
# f.write(base64.b64decode(str(slide_block_img).split(‘,’)[-1], altchars=None, validate=False))

slide_bg_img = sip.base64_to_img(slide_bg_img)
slide_block_img = sip.cutting_transparent_block(sip.base64_to_img(slide_block_img), offset=65)
Loc = sip.identify_gap(slide_bg_img, slide_block_img)
print(“3-“,Loc)
if Loc[0] == 0:
self.page.screenshot(path=’debug/debug_error_loc_{}.png’.format(i), full_page=True)
print(“3-获取坐标有误,重新获取”)
# 等待元素加载并可见
self.page.locator(“.slide-verify-refresh-icon”).wait_for(state=”visible”)
# 点击刷新验证码
self.page.locator(“.slide-verify-refresh-icon”).click()
time.sleep(1)
else:
print(“3-获取成功”)
break

 Windows  Chrome  亚太地区亚太地区