feat: 完善 AC"set 后回读"机制 — 目标聚合 + 防抖重试验证

**回读目标聚合(recordReadback)**
- 所有 set 方法(TurnOn/TurnOff/SetMode/SetTargetTemp/SetFanSpeed/
  SetSwing/SetTargetHumidity/SetAuxHeat/SetEco)成功后记录目标值 rbTarget
- 同属性目标覆盖、不同属性追加,连续 set 自动聚合

**防抖 + 重试验证(readbackLoop)**
- 静默窗口 readbackIdle=3s:等待最后一次 set 无新操作才开始验证
- 未命中目标时按 readbackRetryInterval=3s 重试,上限 readbackMaxRetries=5
- 整体超时 readbackTimeout=30s,防云端卡住导致回读永久挂起
- 命中后逐字段回调 OnPropsChanged 注册的 handler(与 MQTT 推送同语义)
- rbValueEqual 数值比较用 epsilon=0.01,bool/string 直接相等

**白名单配置透传**
- xiaomi.Config 新增 ReadbackModels 白名单(留空 = 全部不回读,默认)
- Client 新增 NeedReadback(model) 判定 + Logger() 访问器
- bridge.Pool.NewPool(readbackModels...) 透传;newBridge 传入 Client 配置

**其他**
- bridge 设备创建失败(Warn)与不支持跳过(Debug)分别记录日志
This commit is contained in:
2026-08-23 23:33:32 +08:00
parent 86c21ce91c
commit a0ef854726
4 changed files with 352 additions and 21 deletions
+6
View File
@@ -18,4 +18,10 @@ type Config struct {
RedirectURL string // OAuth 授权回调 URL
HomeIDs []int64 // 需要管理的家庭 ID 列表,nil/空=全部
// ReadbackModels 需要"set 成功后回读状态"的设备型号列表。
// 用于设备固件不广播云端指令的场景(如部分 BLE/Mesh 设备):
// 控制成功后 SDK 防抖延迟回读真实状态,并通过 OnPropsChanged 送达业务层。
// 留空 = 所有设备都不做回读(默认)。
ReadbackModels []string
}