Releases: tiejiang29/state_grid
Release list
v0.7.11
v0.7.11 更新
新功能:在 HA 内修改国网登录密码
集成「配置」页面新增「新密码」字段,解决用户在国网官方修改密码后无法在 HA 内同步更新的问题。
工作流程
- 留空:不修改密码,走原逻辑(不影响其它字段配置)
- 填写:提交时触发一次
password_login验证新密码- RK001 冷却期内禁止验证:避免把"登录限流"误判为"密码错误"
- 手机号遇 RK001 且配置了邮箱:自动邮箱降级验证
- 验证成功:
password_login内部自动save_data()持久化新密码(MD5),下次轮询自动用新密码 - 验证失败:显示对应错误码(
invalid_auth/rk001_rate_limit等),旧密码保持不变
安全设计
密码不进 ConfigEntry(entry.options / entry.data),仍按原项目设计存在 state_grid.config Store 文件里以 MD5 形式。提交后 new_password 字段不会回填表单(password 类型字段默认行为)。
附带修复
strings.json补齐config.error.rk001_rate_limit:原代码async_step_user里用到但未定义,UI 会显示原始字符串- 修复
async_step_user中调用不存在的dc._login_with_email_fallback()的隐藏 bug:邮箱降级那段代码原本是死代码,调用即抛AttributeError被外层 except 吞掉,邮箱降级从未真正生效。改为dc.password_login(email, password)
新增 i18n key(options.error)
invalid_auth— 新密码验证失败cannot_connect— 无法连接到国家电网服务器no_account— 未找到运行中的集成实例rk001_cooldown_cannot_verify— 冷却期内无法验证rk001_rate_limit— 密码登录日额度已用完
使用方法
- 覆盖安装
custom_components/state_grid/后重启 HA - 进入 设置 → 设备与服务 → 国家电网 → 配置
- 滚动到底部,会看到新字段「新密码(留空不修改;填写后会触发一次登录验证)」
- 填入国网新密码 → 提交
- 后台会调一次
password_login验证:- 成功 → 表单关闭,新密码已写入 Store,下次轮询自动用新密码
- 失败 → 表单回弹并显示错误(旧密码不变)
- RK001 冷却期 → 提示"明日0点后重试"
- 手机号 RK001 且配了邮箱 → 自动邮箱降级验证
注意事项
- 验证过程会真实调用 LLM 解验证码(消耗少量 token)和一次 95598 登录接口(消耗一次日额度)
- 若集成已处于 RK001 冷却期,需等到次日 0 点(北京时间)后再来修改密码
v0.7.10
v0.7.10 更新
优化
refresh_interval 字段从数字滑动条改为普通文本输入框,跟其它字段风格统一。
原因
之前用 vol.Coerce(int) + vol.Clamp(min=12, max=48),HA 会把它渲染成数字 slider/box(看起来像拉动条),跟旁边的 LLM 配置、邮箱等纯文本字段风格不一致,显得突兀。
改动
- schema 改用
selector({"text": {"type": "text"}}),UI 渲染成普通文本输入框 - 提交处理:
int(str(x).strip())转换 +max(12, min(48, hours))clamp 兜底 - 默认值改成字符串
"12",跟其它字段类型统一 - 顺手清掉未使用的
_inthelper
使用
直接填小时数(如 12、24、36),范围 12-48。填小于 12 会被提到 12,填大于 48 会被压到 48,填非数字会被静默忽略保留原值。
v0.7.9
v0.7.9 更新
修复
OptionsFlow 配置向导 500 错误的真正根因 —— v0.7.7 的 try/except 思路是错的。
原因
v0.7.7 的代码:
def __init__(self, config_entry):
try:
super().__init__(config_entry)
except TypeError:
self.config_entry = config_entry实际运行时两条路都走不通(traceback 已确认):
super().__init__(config_entry)→object.__init__()不接受参数 →TypeError- except 分支
self.config_entry = ...→config_entry是只读 property →AttributeError
修复方案
不碰 config_entry 这个名字,用私有属性 self._entry 保存:
def __init__(self, config_entry):
self._entry = config_entry
async def async_step_init(self, user_input=None):
current = {**(self._entry.data or {}), **(self._entry.options or {})}无论新旧版本 HA 都能正常工作。
v0.7.8
v0.7.8 更新
修复
async_migrate_entry 中硬编码的目标版本号 12 改为从 StateGridOnnxConfigFlow.VERSION 动态读取。
原因
v0.7.6 引入的 async_migrate_entry 把目标版本号硬编码成字面量 12:
if entry.version < 12:
hass.config_entries.async_update_entry(entry, version=12)未来 config_flow.VERSION 升到 13、14 时,这里仍然只升到 12,会再次触发同样的 500 错误。
修复方案
顶部新增 from .config_flow import StateGridOnnxConfigFlow,迁移逻辑改为:
target_version = StateGridOnnxConfigFlow.VERSION
if entry.version < target_version:
hass.config_entries.async_update_entry(entry, version=target_version)未来升版本时只需改 config_flow.VERSION 一处,迁移逻辑自动跟进。
v0.7.7
v0.7.7 更新
修复
修复 AttributeError: property config_entry of OptionsFlowHandler object has no setter
原因
新版 HA(你用的是 Python 3.14 + 最新 HA)的 OptionsFlow 基类把 config_entry 改为只读 property(无 setter),直接 self.config_entry = config_entry 会报错。
修复方案
def __init__(self, config_entry):
try:
super().__init__(config_entry) # 新版 HA
except TypeError:
self.config_entry = config_entry # 旧版 HA 兼容这样无论新旧版本 HA 都能正常工作。
v0.7.6
v0.7.6 更新
修复
配置向导 500 Internal Server Error 的根本原因
之前版本只修复了 vol.Optional 缺少 default 的表层问题,但实际根本原因是缺少 async_migrate_entry 方法。HA 在打开 options 配置页时,如果 entry.version < config_flow.VERSION (12),会调用此方法做迁移,不实现就会报 500。
改动
- 添加
async_migrate_entry处理 ConfigEntry 版本迁移 - OptionsFlow:
refresh_interval改用vol.Coerce + vol.Clamp,避免 number selector 兼容性问题 - OptionsFlow: 增加类型安全的默认值提取函数
- OptionsFlow: 提交处理逻辑更健壮,正确处理 None 值
v0.7.5
v0.7.5 更新
修复
- 修复配置向导 500 Internal Server Error(vol.Optional 缺少 default)
新增
- 配置页可修改:LLM API Key、Base URL、Model、备用邮箱、刷新间隔(12-48小时)
- 配置修改后实时生效,无需重启 HA
- 所有字段默认填入当前值,留空表示不修改
v0.7.4
v0.7.4 更新
修复
修复 timestamp 字段在登录失败/异常时被错误覆盖的问题
v0.7.3
v0.7.3 更新
改动
- HA 重启不再强制刷新数据,避免每次重启都消耗 RK001 日额度
- 仅在首次安装(无缓存数据)时强制刷新一次
- 重启后由 12 小时间隔判断自动决定是否刷新
修复
- 修复
timestamp字段未保存到存储的问题(导致重启后 12 小时间隔判断失效) - 启动时从存储加载
timestamp,兼容旧版无此字段的存储
重启行为对比
| 场景 | 旧行为 | 新行为 |
|---|---|---|
| 首次安装 | 强制刷新 | 强制刷新 |
| HA 重启 | 强制刷新(消耗额度) | 不刷新,使用缓存 |
| 重启后超过12小时 | - | 自动刷新 |
v0.7.2
v0.7.2 更新
改动
- 数据刷新间隔从8小时调整为12小时
- 国家电网官网每日更新一次数据,12小时间隔更合理
- 最低刷新间隔限制同步调整为12小时
- 首次安装仍强制刷新一次数据