# 第二批移植任务提示词 (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 ```