Files
xiaomihome/xiaomi/migration/FIX_v2.md
T
4566704 a3d94c4b9f chore: 提交高层 xiaomi 封装库及示例
- 新增 xiaomi/examples/ 下 8 个示例程序(用户/家庭查询、设备列表、开关/灯光/空调控制、属性订阅、高级过滤分类、SPEC 解析)
- miot_client_sub.go: 重构 SubProp/SubEvent,使用 buildPropTopic/buildEventTopic 支持通配符订阅(siid/piid=0 → +),并修复锁顺序问题(将 RequestRefreshProp 移到 Lock 外)
- spec_parser.go: 新增 downloadSpecFile 方法,本地 SPEC 文件缺失时自动从 miot-spec.org 下载
- ARCH_PLAN.md: 架构设计从 Proposed 更新为 Accepted(v1.0→v1.1),补充设备分类/工厂/SPEC 映射等模块设计
- xiaomi/: 新增 miot 上层强类型封装模块,包含 Client 主入口、用户/家庭/设备 API、属性读写、动作调用、订阅通知,以及 devices/ 设备控制抽象(Switch/Light/AirConditioner/Fan/Cover/Humidifier/Vacuum/WaterHeater/Thermostat)和 specs/ SPEC 查询辅助
- 更多 xiaomi 示例(风扇/窗帘/传感器控制)
2026-06-29 08:51:21 +08:00

71 lines
1.7 KiB
Markdown
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.
# 修复方案 v2
> 2026-06-29
## xiaomi.Config 最终形态
```go
type Config struct {
ClientID string // 默认 miot.OAUTH2_CLIENT_ID("2882303761520251711")
AccessToken string
}
```
删掉的字段及原因:
| 字段 | 原因 |
|------|------|
| CountryCode | 全项目无任何地方读取 |
| ClientSecret | miot API 不需要,从未使用 |
| CloudServer | 国内恒为 "cn",NewClient 内部硬编码 |
---
## 修改清单
### 1. 删除 `xiaomi/examples/config/` 整个目录
示例程序复用 `miot/examples/config` 包。
### 2. 9 个示例文件统一替换
```
xiaomi/examples/01_user_home/main.go
xiaomi/examples/02_device_list/main.go
xiaomi/examples/03_switch_control/main.go
xiaomi/examples/04_light_control/main.go
xiaomi/examples/05_ac_control/main.go
xiaomi/examples/06_fan_cover/main.go
xiaomi/examples/07_prop_subscribe/main.go
xiaomi/examples/08_adv_filter_classify/main.go
xiaomi/examples/09_spec_parser/main.go
```
**替换模板**:
```go
import miotconfig "xiaomihome/miot/examples/config"
func main() {
cfg, err := miotconfig.LoadConfig("miot/examples/config.json")
if err != nil {
log.Fatal("请先运行 miot/examples/cloud_oauth 获取 token:", err)
}
client, err := xiaomi.NewClient(ctx, xiaomi.Config{
AccessToken: cfg.AuthInfo.AccessToken,
})
if err != nil {
log.Fatal(err)
}
defer client.Close()
// ...
}
```
删除的内容:`entryData`、`miot.NewMIoTClient`、`Init/Deinit`、`NewMIoTHttpClient`、import `"xiaomihome/miot"`。
### 3. `miot/miot_client.go` — 去掉 `country_code`
`NewMIoTClient` 中 entryData 如有 `"country_code"` 字段,删掉该行。