- 实现 MIoT 客户端核心功能(MQTT 连接、设备管理、属性读写) - 支持云端 API 调用与局域网设备发现(mDNS) - 集成国际化(i18n)多语言支持 - 添加 MIoT 设备规约解析器(spec_parser) - 包含单元测试与使用示例
5.6 KiB
5.6 KiB
示例计划
目录:
go-miot/examples/公共配置:go-miot/examples/config/config.go约束:禁用命令行参数 + 禁用环境变量,仅用 config.json,其余变量直接硬编码
目录结构
go-miot/examples/
├── config/
│ └── config.go # 公共配置加载(token、cloudServer、clientID 等)
├── cloud_oauth/
│ └── main.go # OAuth 授权流程
├── cloud_devices/
│ └── main.go # 云端设备列表 + 属性读写 + 动作调用
├── mips_subscribe/
│ └── main.go # MQTT 订阅(事件/属性/设备状态)
├── lan_control/
│ └── main.go # LAN 设备发现 + 控制
├── mdns_discovery/
│ └── main.go # mDNS 网关发现
├── network_monitor/
│ └── main.go # 网络状态监控
├── storage_manage/
│ └── main.go # 证书 + 存储管理
├── spec_parser/
│ └── main.go # SPEC 解析 + 属性/服务查询
└── full_client/
└── main.go # 完整客户端(上述全部集成)
公共配置 config/config.go
提供 LoadConfig(path string) 从 JSON 文件读取:
{
"cloud_server": "cn",
"client_id": "2882303761520251711",
"access_token": "your_token",
"refresh_token": "your_refresh_token",
"uid": "your_uid",
"uuid": "your_uuid",
"redirect_url": "http://localhost:8123",
"language": "en"
}
无命令行参数,无环境变量。其余变量在示例 main.go 中直接硬编码定义。
示例列表
1. cloud_oauth — OAuth 授权流程
覆盖模块:miot_cloud.go(MIoTOauthClient)
流程:
- 创建 MIoTOauthClient
- 生成授权 URL → 打印(用户浏览器打开)
- 等待用户输入回调 code
- 用 code 获取 access_token + refresh_token
- 用 refresh_token 刷新 token
- 打印最终 token
依赖:config
2. cloud_devices — 云端设备管理
覆盖模块:miot_cloud.go(MIoTHttpClient)
流程:
- 创建 MIoTHttpClient(用 config 的 token)
- GetUserInfo → 打印用户信息
- GetHomeInfos → 打印家庭列表
- GetDevices → 打印所有设备
- 任选一个设备,GetProp(did, siid, piid) → 读取属性
- SetProp(did, siid, piid, value) → 设置属性
- DoAction(did, siid, aiid, inList) → 执行动作
依赖:config
3. mips_subscribe — MQTT 实时订阅
覆盖模块:mips_client.go
流程:
- 创建 MipsCloudClient(broker + cert)
- Connect
- 订阅设备属性变化(SubProp)
- 订阅设备事件(SubEvent)
- 订阅设备状态(SubDeviceState)
- 打印收到的消息,运行 60 秒后退出
依赖:config(需 token 获取 cert)+ storage cert
4. lan_control — LAN 设备控制
覆盖模块:miot_lan.go
流程:
- 创建 MIoTNetwork(获取本地网卡)
- 创建 MIoTLan(需设备 did + token)
- Start → 等待设备发现
- 列出已发现的 LAN 设备
- SubProp 订阅属性
- SendToDevice 发送控制指令
- 等待 30 秒观察结果
依赖:config(需 did + token)
5. mdns_discovery — mDNS 网关发现
覆盖模块:miot_mdns.go
流程:
- 创建 MipsService
- Init → 开始扫描
- SubServiceChange 订阅变化
- 打印发现的网关(did、ip、port、groupID)
- GetServices 按 groupID 查询
- 运行 30 秒
依赖:无(纯网络扫描)
6. network_monitor — 网络状态监控
覆盖模块:miot_network.go
流程:
- 创建 MIoTNetwork
- Init → 获取当前网络状态
- GetNetworkStatus → 打印在线状态
- GetNetworkInfo → 打印所有网卡
- SubNetworkStatus → 订阅状态变化
- SubNetworkInfo → 订阅网卡变化
- 运行 30 秒
依赖:无
7. storage_manage — 存储/证书管理
覆盖模块:miot_storage.go
流程:
- 创建 MIoTStorage(指定 rootPath)
- Save / Load / Remove 测试
- LoadUserConfig / UpdateUserConfig
- 创建 MIoTCert → VerifyCACert
- LoadUserKey / LoadUserCert
- 创建 DeviceManufacturer → GetName
依赖:config(uid + cloudServer)
8. spec_parser — SPEC 解析
覆盖模块:spec_parser.go
流程:
- 创建 MIoTStorage + MIoTSpecParser
- Parse("urn:miot-spec-v2:device:light:0000A001:yeelink-light1:1") → MIoTSpecInstance
- 遍历 Services → Properties → 打印 name/iid/format/access/valueRange
- 遍历 Services → Actions → 打印 in/out 参数
- 演示 EvalExpr / ValueFormat / ValuePrecision
- 演示 ValueList.Names / GetValueByDescription
依赖:storage + specs/ 目录
9. full_client — 完整客户端
覆盖模块:全部
流程:
- 创建 MIoTClient(config 全部字段)
- Init → 初始化 OAuth/HTTP/Cert/Storage
- RefreshDevices → 从云端获取设备
- 启动 MIPS 订阅(设备状态 + 属性变化)
- 启动 LAN 发现
- 启动 mDNS 发现
- 启动网络监控
- 等待 Ctrl+C 退出,Deinit 清理
依赖:全部 config 字段
执行顺序(建议)
config → cloud_oauth ─┐
├→ cloud_devices → mips_subscribe
│
network_monitor ────────┤ (独立)
spec_parser ─────────┤
mdns_discovery ──────┤ (独立)
│
└→ storage_manage → lan_control → full_client
可首先生成 config 包,后续示例全部依赖它。