Skip to content

About

国家电网 Home Assistant 自定义集成 - APP接口

Resources

Stars

69 stars

Watchers

0 watching

Forks

Latest commit

 

History

83 Commits

Folders and files

Repository files navigation

国家电网 Home Assistant 集成

GitHub release

读取 95598(国家电网)账户的余额、日/月/年用电量与分时拆分。取数默认走网页那条纯 HTTP 通道,App 接口兜底:没有验证码,不需要大模型,也不需要浏览器。

取数与解析逻辑沿用 bilezhou/state_grid(MIT),未改语义。

它是怎么工作的

网页通道(web_api.py) ──每格先问它(默认)──▶ refresh_data 解析 ─▶ 实体
App 通道(app_api.py) ──按刷新间隔灌进推送缓存,网页没供上的格子兜底──┘
  • App 通道用 SM4/SM2/SM3 信封直连国网 App 网关,设备令牌 deviceTokenTX 在本地生成(turing/,MIT vendored)——不经过任何第三方打码或加密代理服务。
  • 会话令牌有效期 15 天,存在 HA 的 .storage 里,到期自动重新登录。
  • 协调器每 5 分钟一轮,但取数一天两次就够:两条通道都跟着「刷新间隔」走(默认 12 小时),国网一天内也只会多给出新的一天。
  • 网页通道是默认的主供数源(web_api.py):纯 HTTP——不开浏览器、不过验证码,登录标识先用手机号那把,被硬拒(RK001)时自动改用你配的备用邮箱再登一次,两把都被拒就当天不再试、第二天自己恢复;每发之间隔 0.3-0.5 秒。代价要说清:网页的 bearer 只有约 25 分钟命,所以每轮都要重登一次,一天约 2 次登录、7-9 发业务请求。
  • App 那条即使不是主力也仍然每轮打一次:这既保住那份 15 天的设备会话(长期不用会过期,重新登录可能撞上"新设备短信"这种集成做不了的验证),也让网页万一挂掉时本轮就有兜底数据。想彻底不发 App 请求的话,把「网页优先」关掉即可回到"App 供数、网页只补格子"的老顺序。

安装与升级

HACS

  1. HACS → 集成 → 探索并添加自定义仓库:https://github.com/tiejiang29/state_grid,类别 集成
  2. 下载 → 重启 Home Assistant

升级:HACS → 集成 → 国家电网 → 「重新下载」(有新版本时上面会显示当前版本与可用版本)→ 重启 Home Assistant。

手动

从 Releases 下载,把 custom_components/state_grid/ 整目录覆盖到 HA 配置对应位置,删除 custom_components/state_grid/__pycache__,重启 Home Assistant。升级就是同样三步(覆盖 → 清缓存 → 重启)。

用 HACS 装的请不要直接改 custom_components/state_grid/ 里的文件:「重新下载」是整份覆盖,本地改动会丢。

配置

设置 → 设备与服务 → 添加集成 → 国家电网,只问两件事:手机号与密码。

添加时集成会立刻做一次 App 登录验证;成功才建条目。密码只在生成 md5 摘要时用一次,明文不进配置项、不进 store、不进日志。

选项里可以改:

  • 刷新间隔(12-48 小时):两条通道多久真实取一次数的闸门(网页优先时每轮还要各发一次登录)。默认 12 小时,也就是一天两次
  • 网页通道(默认开):关掉后完全不发网页请求,只吃 App 与推送缓存
  • 网页优先取数(默认开):每格先问网页、App 灌进来的那份兜底;关掉则回到 App 优先、网页只补没货的格子
  • 备用登录标识(选填):一般填登记在国网的邮箱。网页登录被硬拒(RK001)时改用这一把,不需要你动手;留空表示一旦被拒就等第二天
  • 新密码:在国网改了密码后填这里,会走 App 通道验证一次才写入;失败保持原值不变

传感器

传感器 说明 单位
账户余额 预付费账户为负数表示预存 元
本月电费 / 历史欠费 同一发余额响应里的 estiAmt/historyOwe。estiAmt 是本月到此刻已产生的电费合计(实测恒等式 sumMoney = prepayBal − estiAmt);判断"缴没缴清"看历史欠费与账户余额(账单制欠费时余额为负) 元
年度累计用电 / 峰 / 谷 / 平 / 尖 年度总量与分时 kWh
年度累计电费 年度总电费 元
上个月用电 / 上个月电费 上月账单口径 kWh / 元
上个月抄表 见下方「已知限制」:这一格站点答回的就是 0 -
当月累计用电 / 峰 / 谷 / 平 / 尖 当月按日累计 kWh
日总用电 / 峰 / 谷 / 平 / 尖 最近一个出数日 kWh
最近 30 天每日用电、最近 12 个月每月用电 属性里的图表数据 -
最新日用电日期、最近刷新时间 数据新鲜度 -

已知限制(都是实测,不是"预计没问题")

  • 「上个月抄表」显示 0。 这一格只有网页那侧有接口(c04/f03)。2026-10-07 实测:网页通道能正常拿到答复,读数那组键(readList,走 pointList 时嵌一层)也在,但示数就是 0——所以这个 0 是站点给的,不是没取到。App 侧没有对应端点(月度接口只给档位 levelStdCode/firstRefPq/secondRefPq 和结算区间,不给示数)。关掉网页通道时这一格同样是 0,那时它是缺数。
  • 年度分时之和比年度累计电量少约 0.3%(实测 4.2 kWh / 1647.3 kWh)。日电量的发布口径与月结算电量本身不重合,不是窗口算错。
  • App 会话是单份的:同一账号在别处重新登录会顶掉 HA 里这份(服务端回 -201 登录状态已失效)。生产侧下一轮会自动重新登录,但调试时请记着这点。
  • "新设备安全验证"(服务端 resultCode=4006)无法在 HA 里完成:这条路线的设备身份是本地合成的(turing/ 画像 + 现造的 deviceTokenTX),服务端第一次见到就可能要短信验证。本集成不做短信、不做扫码,碰上时配置页会直接这么告诉你(不再和"密码错了"混成一句)。自己的账号从 10-03 起没被要求过,所以这是按账号/按风控的,不是必然。要避开的只有"换设备画像"这一件事:.storage/state_grid.app_device 存的是画像种子,删掉它等于换一台新设备。
  • RK001 是按登录标识计的日额度(错误码 11401),换 IP、换客户端都没用;被限流时当天不会再成功。

日志里能看到什么

集成只往 HA 日志写有用的东西:每轮哪几格是网页答的、哪几格回落到 App 的推送缓存(未命中会带上原因和当时缓存里还剩的键)、被拒或续期失败时下一次再来是什么时候。凭证、令牌、密码一律只打长度。

致谢

免责声明

本集成只访问您自己账号的用电数据,凭证仅保存在本地 Home Assistant 实例中。国网接口非公开、随时可能变更,届时数据可能中断;使用本项目风险自负。

About

国家电网 Home Assistant 自定义集成 - APP接口

Resources

Stars

69 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages