v0.2.2 — 热重载(配置变更不断 TCP)
🎯 彻底解决配置变更后设备离线
这是所有 writer is None / 设备离线问题的根本修复。
根因
HA 的 add_update_listener 在每次 options 变更时调用 async_reload_entry,它做的是 unload + setup:
async_unload_entry→service.async_stop()→ 关闭 TCP writerasync_setup_entry→ 创建新 service + 新 TCP- 新 TCP 的
_run()还没连上 _async_restore_syncs()跑async_add_syncs()- 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