Files
xiaomihome/miot/ROUND3_PLAN.md
T
4566704 3a44cb9e6a feat: 初始化小米 IoT (MIoT) 智能家居 Go 库
- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写)
- 支持云端 API 调用与局域网设备发现(mDNS)
- 集成国际化(i18n)多语言支持
- 添加 MIoT 设备规约解析器(spec_parser)
- 包含单元测试与使用示例
2026-06-28 22:05:49 +08:00

4.2 KiB
Raw Permalink Blame History

第三轮审查方案 — 体读验证

方法:逐函数读体 → 对照 Python 行为 → 标记空实现/部分实现/完整 判定标准:有 TODO 标记 + 无业务逻辑 = ❌ 空实现;有逻辑但缺关键分支 = ⚠️ 部分

审查清单(18 项)

块 A — Init() 链路(6 项已验证,0 项新)

# 函数 Python 行 Go 状态 备注
A1 OAuth 初始化 283-288 ✅ NewMIoTOauthClient 已调用
A2 Cert 初始化 296-299 ✅ NewMIoTCert + VerifyCACert
A3 MipsCloud 初始化 301-310 ✅ NewMipsCloudClient + Connect
A4 Network 订阅 312-316 ✅ SubNetworkStatus + 初始触发
A5 mDNS + MipsLocal + LAN 319-371 ✅ SubServiceChange + NewMipsLocalClient + SubLanState
A6 i18n 275-279 ✅ NewMIoTI18n + Init

块 B — Deinit() 链路

# 操作 Python 行 Go 状态
B1 network.unsub 376 ✅
B2 cancel refresh_props_timer 379-382 ✅
B3 mips_cloud unsub → deinit 385-387 ✅
B4 mDNS unsub_service_change 395-396 ✅
B5 遍历 mips_local: unsub → disconnect 397-399 ✅
B6 cancel gw timers ✅(并入 local loop)
B7 LAN: unsub_lan_state → unsub_device_state → delete_devices → vote(false) 400- 需检查
B8 oauth.deinit 需检查
B9 http.deinit 需检查
B10 i18n.deinit ✅
B11 cancel notify timer 需检查
B12 save device cache to storage ✅

块 C — 回调事件处理(关键链路)

# 函数 Python 行为 Go 状态
C1 onMipsCloudStateChanged(disconnect) 批量标记所有 cloud device offline + 聚合 cache ❌ 只有 fmt.Printf + TODO
C2 onMipsLocalStateChanged(disconnect) 批量标记该网关所有 device offline + 聚合 ❌ 只有 fmt.Printf + TODO
C3 onMipsServiceStateChange 创建/销毁 MipsLocalClient + connect ❌ 只有 fmt.Printf + TODO
C4 onGWDeviceListChanged 从网关拉取设备列表 + 更新 gw cache ❌ 只有 fmt.Printf + TODO
C5 onLanDeviceStateChanged 更新 LAN cache + 聚合到 device cache ❌ 方法不存在

块 D — MQTT 消息处理

# 函数 Python 行为 Go 状态
D1 handleMIPSMessage MIPS payload 解包 → dispatch 到 subTree 订阅者 ❌ 只有 fmt.Printf + TODO
D2 handleMIPSStateMessage 解析 state 消息 → 更新 online 状态 → 回调 OnDeviceStateChanged ❌ 只有 fmt.Printf + TODO
D3 OnDeviceStateChanged 更新对应源 + 三源聚合 + 通知 ⚠️ 只更新 cloud cache,未调 checkDeviceState 聚合
D4 updateDeviceMsgSub 三源优先级 + push_available 检测 + 订阅切换 ⚠️ 简化版,缺 push_available 检测和 unsub/sub 切换

块 E — Token/证书刷新

# 函数 Python 行为 Go 状态
E1 RequestRefreshAuthInfo 定时器 → refresh_oauth_info_async: load_storage → 判断有效期 → refresh → 更新 http/mips_cloud → save_storage ❌ 回调只有 fmt.Printf + TODO
E2 RequestRefreshUserCert 定时器 → refresh_user_cert_async: verify_ca → 判断有效期 → gen_user_csr → get 云端证书 → save ❌ 回调只有 fmt.Printf + TODO

块 F — 设备列表更新

# 函数 Python 行为 Go 状态
F1 updateDevicesFromCloud BLE默认online/子设备合并/owner分离/diff检测/通知 ✅ 已实现
F2 loadCacheDevice storage.Load('miot_devices', key, 'dict') + 复制到 cloud/gw cache ⚠️ 需验证存储 key 格式和初始复制逻辑

汇总

块 总数 ✅ ⚠️ ❌
A Init 6 6 0 0
B Deinit 12 10 2 0
C 回调 5 0 0 5
D MQTT 4 0 2 2
E Token/Cert 2 0 0 2
F 设备 2 1 1 0
合计 31 17 5 9

9 项空实现 + 5 项部分实现需要修复。