Skip to content

v0.2.2 — 热重载(配置变更不断 TCP)

Choose a tag to compare

@tiejiang29 tiejiang29 released this 09 Jul 11:02

🎯 彻底解决配置变更后设备离线

这是所有 writer is None / 设备离线问题的根本修复

根因

HA 的 add_update_listener 在每次 options 变更时调用 async_reload_entry,它做的是 unload + setup:

  1. async_unload_entryservice.async_stop()关闭 TCP writer
  2. async_setup_entry → 创建新 service + 新 TCP
  3. 新 TCP 的 _run() 还没连上
  4. _async_restore_syncs()async_add_syncs()
  5. writer 是 None → 订阅失败 → 设备离线

多次快速操作(比如改名+提交)会触发多次 reload,创建 5-8 个竞争的 TCP 连接。

修复

热重载——配置变更时不关 TCP,只更新 config 并重新订阅:

  • 如果 service 已存在:更新 self._config,调 _async_restore_syncs()
  • TCP 连接保持,writer 一直有效
  • topic 在现有连接上重新订阅

效果

  • ✅ 改名、改类型、添加/移除同步后设备不再离线
  • ✅ 不再有 writer is None 错误
  • ✅ 不再有多个竞争的 TCP 连接
  • ✅ TCP 连接在配置变更期间保持稳定

📥 升级方法

HACS 升级到 v0.2.2,重启 HA