Skip to content

fix: 修复空调设备无法控制及数据不同步问题 - #275

Open
youyusi wants to merge 1 commit into
banto6:masterfrom
youyusi:fix/data-sync-crashes
Open

fix: 修复空调设备无法控制及数据不同步问题#275
youyusi wants to merge 1 commit into
banto6:masterfrom
youyusi:fix/data-sync-crashes

Conversation

@youyusi

@youyusi youyusi commented Jul 25, 2026

Copy link
Copy Markdown

核心修复:

  • entity.py: data_callback 添加 try/except 保护,_update_value() 异常不阻断 UI 更新
  • 所有实体文件 (climate/water_heater/cover/number/sensor/select/switch/binary_sensor): _attributes_data 直接索引 [] 改为 .get() 安全访问,避免 KeyError 导致 UI 冻结

WebSocket 稳定性:

  • _parse_message/_process_digital_model 全方法异常保护,异常消息安全跳过不崩溃
  • 消息循环外层 try/except,非连接性异常不影响网关运行
  • ws_connect 添加 heartbeat=30s,快速检测半开连接
  • control_callback 使用 .get() 防止二次 KeyError
  • connect() 追踪连续重连失败,Token 过期时主动 ERROR 告警

命令队列与设备刷新:

  • _drain_pending_commands 单个命令失败不再阻塞后续命令
  • FORCE_REFRESH 新增 KFR- 前缀匹配,空调设备自动纳入 60s 强制轮询

API 客户端:

  • retry_on_exception 重写为指数退避 (1s/2s/4s),避免快速重试雪崩

核心修复:
- entity.py: data_callback 添加 try/except 保护,_update_value() 异常不阻断 UI 更新
- 所有实体文件 (climate/water_heater/cover/number/sensor/select/switch/binary_sensor):
  _attributes_data 直接索引 [] 改为 .get() 安全访问,避免 KeyError 导致 UI 冻结

WebSocket 稳定性:
- _parse_message/_process_digital_model 全方法异常保护,异常消息安全跳过不崩溃
- 消息循环外层 try/except,非连接性异常不影响网关运行
- ws_connect 添加 heartbeat=30s,快速检测半开连接
- control_callback 使用 .get() 防止二次 KeyError
- connect() 追踪连续重连失败,Token 过期时主动 ERROR 告警

命令队列与设备刷新:
- _drain_pending_commands 单个命令失败不再阻塞后续命令
- FORCE_REFRESH 新增 KFR- 前缀匹配,空调设备自动纳入 60s 强制轮询

API 客户端:
- retry_on_exception 重写为指数退避 (1s/2s/4s),避免快速重试雪崩
@banto6

banto6 commented Jul 26, 2026

Copy link
Copy Markdown
Owner

感谢修复。当前 PR 包含多个独立问题的修改,请拆分成 case by case 的提交,并说明每个修改对应的问题背景、原因和目的,方便 review 和后续维护。

@github-actions github-actions Bot added the stale label Aug 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants