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

2023-06-16 10,925 21

此方法已失效,请移步到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 举一反三哈

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: 数据更新的最后日期

总结

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

相关文章

homeassistant获取电费余额2.0
docker node-red无法安装节点
群晖搭建Pushdeer消息推送

评论(21)

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

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

      1. @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

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

  4. 测了下可以用,不过有时候会定位不到坐标位置,建议在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

发布评论