Files
xiaomihome/xiaomi/config.go
T
4566704 a0ef854726 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)分别记录日志
2026-08-23 23:33:32 +08:00

28 lines
1.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package xiaomi
// AuthInfo OAuth token 信息。
type AuthInfo struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresIn int32 `json:"expires_in"` // 有效期(秒)
ExpiresTS int64 `json:"expires_ts"` // 过期时间戳(unix),0 则内部按 expires_in 计算
}
// Config 客户端初始化配置。
type Config struct {
AuthInfo AuthInfo // OAuth token 信息
UUID string // MIPS 设备标识,OAuth 前生成,永久不可变
UID string // 小米帐号 UID,OAuth 后从 API 获取
DataDir string // 存储根路径(token/设备/SPEC 缓存),多用户场景每个用户用不同目录,如 ./data/{uid}
RedirectURL string // OAuth 授权回调 URL
HomeIDs []int64 // 需要管理的家庭 ID 列表,nil/空=全部
// ReadbackModels 需要"set 成功后回读状态"的设备型号列表。
// 用于设备固件不广播云端指令的场景(如部分 BLE/Mesh 设备):
// 控制成功后 SDK 防抖延迟回读真实状态,并通过 OnPropsChanged 送达业务层。
// 留空 = 所有设备都不做回读(默认)。
ReadbackModels []string
}