本帖最后由 Spending5027 于 2023-2-24 11:21 编辑
----------- 2023.1.13 更新 app 的 token 有效期是 7 天,没法一直用。 虽说找到了别的方法,可一劳永逸,但是发现北京燃气的系统本身存在漏洞,该方法分享出来后存在安全隐患,故没法给大家分享。
懂Android逆向的朋友可以解包来看看登录时参数的加密算法及秘钥,然后再模拟登录来刷新token。
----------- 2022.11.2 受 北京电网 启发,就把 北京燃气 也给加到 HA 里了,除了显示用气量,还能直接显示气表电量,省得去看了。
对于北京燃气用智能物联网燃气表(简称 NB 表,见下图)的,可以通过“北京燃气” APP 的接口,采集你的家庭用气信息。 (NB表也分不同的厂商不同型号,可能信息抓取方式还不太一样,我就试了自家的表,别的不敢保证信息能获取全)
集成效果
特性- 支持北京燃气智能物联网燃气表(简称 NB 表,见下图)的用气信息采集,目前仅支持单户号
- 数据为定时更新,更新间隔为 10 分钟
- 支持阶梯用气
使用之前下载“北京燃气” APP,注册登录并绑定户号,然后点击“用气分析”,应该就可以看到该户号的用气信息。 使用任何网络抓包软件,如安卓手机的 Fiddler, 苹果手机的 Stream,进行抓包,可以只关注 zt.bjgas.com 域名下的请求。 抓包时在“北京燃气” APP 上进行操作,查看一下用气分析。看到 HTTP HEADER 中有内容为 “Authorization: Bearer XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX” 的内容,将 “Authorization: Bearer ” 后的内容复制下来,这个字符串就是 token,保存备用。
安装 使用 HACS 以自定义存储库方式安装,或者下载本贴附件,将其中的 custom_components/bj_gas 放到你 Home Assistant 的 custom_components/bj_gas 中。
配置在 configuration.yaml 中,增加配置如下:
bj_gas:
token: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX # 此为 APP 中抓取的 token
user_code: XXXXXXXXXXX # 此为燃气户号
重新启动 Home Assistant
传感器
包含的传感器
entity_id 形式 | 含义 | 属性 | 备注 | sensor.XXXXXXXXXXX_balance | 燃气费余额 | last_update - 网端数据更新时间 | | sensor.XXXXXXXXXXX_current_level | 当前用气阶梯 | | | sensor.XXXXXXXXXXX_current_level_remain | 当前阶梯剩余额度 | | | sensor.XXXXXXXXXXX_current_price | 当前气价 | | | sensor.XXXXXXXXXXX_year_consume | 本年度用气量 | | | sensor.XXXXXXXXXXX_month_reg_qty | 本月用气量 | | | sensor.XXXXXXXXXXX_battery_voltage | 气表电量 | | | sensor.XXXXXXXXXXX_mtr_status | 阀门状态 | | | sensor.XXXXXXXXXXX_monthly_* | 月度用气情况 | name - 月份
state - 用气量
consume_bill - 该月燃气费 | *取值为1-12
| sensor.XXXXXXXXXX_daily_* | 最近一周用气 | name - 日期
state - 用气量 | *取值为1-7 |
其中 XXXXXXXXXXX 为北京燃气用户户号
示例
type: vertical-stack
cards:
- type: entities
entities:
- entity: sensor.XXXXXXXXXXX_balance
- entity: sensor.XXXXXXXXXXX_month_reg_qty
- entity: sensor.XXXXXXXXXXX_current_level
- entity: sensor.XXXXXXXXXXX_current_level_remain
- entity: sensor.XXXXXXXXXXX_current_price
- entity: sensor.XXXXXXXXXXX_year_consume
- entity: sensor.XXXXXXXXXXX_battery_voltage
- entity: sensor.XXXXXXXXXXX_mtr_status
title: 燃气信息
- type: custom:flex-table-card
title: 月度用气情况
entities:
include: sensor.XXXXXXXXXXX_monthly_*
columns:
- name: 月份
data: name
- name: 用气量
data: state
- name: 费用
data: consume_bill
- type: custom:flex-table-card
title: 最近一周用气情况
entities:
include: sensor.XXXXXXXXXXX_daily_*
columns:
- name: 日期
data: name
- name: 用气量
data: state
你也可以根据需要采用自己的展示形式
源码:https://github.com/zhaoyibo/bj_gas
感谢:
@crazysiri @involute
|