feat: 初始化小米 IoT (MIoT) 智能家居 Go 库
- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写) - 支持云端 API 调用与局域网设备发现(mDNS) - 集成国际化(i18n)多语言支持 - 添加 MIoT 设备规约解析器(spec_parser) - 包含单元测试与使用示例
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# 第二批移植任务提示词 (P1 高级功能)
|
||||
|
||||
> 源文件在 `D:\miot\py-miot\`,子文档在 `D:\miot\go-miot\migration\`
|
||||
|
||||
## 任务 2.1 — miot_spec.py → spec_parser.go (补全)
|
||||
|
||||
```
|
||||
目标文件:D:\miot\go-miot\spec_parser.go(现有 stub,需补全)
|
||||
详细说明:D:\miot\go-miot\migration\09-miot-spec.md
|
||||
|
||||
spec_parser.go 已有所有结构体定义(MIoTSpecInstance、MIoTSpecService、MIoTSpecProperty 等),
|
||||
但 Parse() 是 stub。需实现:
|
||||
|
||||
1. _SpecStdLib → SpecStdLib 结构体
|
||||
- 字段:lang, devices/services/properties/events/actions/values map
|
||||
- DeviceTranslate/ServiceTranslate/PropertyTranslate/EventTranslate/ActionTranslate/ValueTranslate
|
||||
- Refresh() — 从 miot-spec.org 和 cdn.cnbj1.fds.api.mi-img.com 下载标准库 JSON
|
||||
- 缓存到 storage,有效期 SPEC_STD_LIB_EFFECTIVE_TIME
|
||||
|
||||
2. Parse 方法
|
||||
- 读取本地 JSON 规格文件(specDir/{urn}.json)
|
||||
- 用标准库翻译 description
|
||||
- 构建 MIoTSpecInstance → MIoTSpecService → MIoTSpecProperty/Event/Action 树
|
||||
- 跳过 proprietary=true 的项
|
||||
|
||||
3. 属性处理
|
||||
- format_ 映射:string→str, bool→bool, float→float, 其他默认int
|
||||
- access 列表解析 writable/readable/notifiable
|
||||
- ValueRange 加载(min/max/step)
|
||||
- ValueList 加载(去重描述、多语言)
|
||||
- Precision 从 step 计算
|
||||
|
||||
### 注意事项
|
||||
- 不依赖 miot_cloud(独立模块)
|
||||
- 标准库 JSON 下载失败不中断,只打日志
|
||||
- spec_parser.go 末尾有 errors import,可以用 miot_error 替换
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 任务 2.2 — miot_mips.py → mips_client.go (补全)
|
||||
|
||||
```
|
||||
目标文件:D:\miot\go-miot\mips_client.go(现有基础结构,需补全)
|
||||
详细说明:D:\miot\go-miot\migration\10-miot-mips.md
|
||||
|
||||
需实现:
|
||||
|
||||
1. MipsMessage 打包/解包
|
||||
- Pack(mid int, payload, msgFrom, retTopic string) []byte
|
||||
- Unpack(data []byte) *MipsMessage
|
||||
- 协议格式:每段 [4字节len][1字节type][len字节数据+1字节\x00]
|
||||
|
||||
2. MipsClient 结构体
|
||||
- MQTT 连接管理(host/port/username/password/cert)
|
||||
- 连接状态:_event_connect / _event_disconnect
|
||||
- 重连机制:指数退避(10s~600s)
|
||||
|
||||
3. 订阅管理
|
||||
- 订阅队列(MIPS_SUB_PATCH=300,MIPS_SUB_INTERVAL=1)
|
||||
- 设备状态订阅(MipsDeviceState)
|
||||
- 广播订阅(MipsBroadcast)
|
||||
|
||||
4. 请求管理
|
||||
- 请求 ID 生成(mid)
|
||||
- 超时处理(Timer)
|
||||
- 回复回调
|
||||
|
||||
5. MIoTDeviceState 枚举:DISABLE=0, OFFLINE=1, ONLINE=2
|
||||
|
||||
### 依赖
|
||||
- MQTT 库:github.com/eclipse/paho.mqtt.golang
|
||||
- miot_error.go, const.go
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 任务 2.3 — miot_network.py → miot_network.go
|
||||
|
||||
```
|
||||
源文件:D:\miot\py-miot\miot_network.py
|
||||
目标文件:D:\miot\go-miot\miot_network.go(新建)
|
||||
|
||||
实现 MIoTNetwork(网络状态监控器):
|
||||
|
||||
1. 数据结构
|
||||
- InterfaceStatus 枚举:ADD=0, UPDATE=1, REMOVE=2
|
||||
- NetworkInfo 结构体:name, ip, netmask, netSeg string
|
||||
|
||||
2. MIoTNetwork 结构体
|
||||
- ipAddrMap / httpAddrMap(已知地址 + 响应时间缓存)
|
||||
- networkStatus bool
|
||||
- networkInfo map[string]*NetworkInfo
|
||||
- 订阅列表(networkStatus 和 networkInfo 回调)
|
||||
|
||||
3. 核心方法
|
||||
- Init() — 启动监控
|
||||
- Deinit() — 停止监控
|
||||
- GetNetworkStatus() bool — ping + HTTP 组合检测
|
||||
- GetNetworkInfo() map[string]*NetworkInfo — 获取网卡信息(跳过 lo/docker/hassio)
|
||||
- Refresh() — 手动刷新
|
||||
- 定时刷新间隔:NETWORK_REFRESH_INTERVAL=30s
|
||||
|
||||
4. 检测逻辑
|
||||
- PingMulti(ipList) — 逐 IP ping,记录响应时间
|
||||
- HTTPMulti(urlList) — HTTP HEAD/GET 检测
|
||||
- 优先检测响应最快的地址,全失败则遍历所有
|
||||
|
||||
### 注意事项
|
||||
- Windows 用 ping -n 1 -w,Linux 用 ping -c 1 -w
|
||||
- 网络接口获取:Go 用 net.Interfaces() 替代 Python psutil
|
||||
- IPv4 only,过滤 127.0.0.1
|
||||
```
|
||||
Reference in New Issue
Block a user