# 示例计划 > 目录:`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 文件读取: ```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) **流程**: 1. 创建 MIoTOauthClient 2. 生成授权 URL → 打印(用户浏览器打开) 3. 等待用户输入回调 code 4. 用 code 获取 access_token + refresh_token 5. 用 refresh_token 刷新 token 6. 打印最终 token **依赖**:config --- ### 2. cloud_devices — 云端设备管理 **覆盖模块**:`miot_cloud.go`(MIoTHttpClient) **流程**: 1. 创建 MIoTHttpClient(用 config 的 token) 2. GetUserInfo → 打印用户信息 3. GetHomeInfos → 打印家庭列表 4. GetDevices → 打印所有设备 5. 任选一个设备,GetProp(did, siid, piid) → 读取属性 6. SetProp(did, siid, piid, value) → 设置属性 7. DoAction(did, siid, aiid, inList) → 执行动作 **依赖**:config --- ### 3. mips_subscribe — MQTT 实时订阅 **覆盖模块**:`mips_client.go` **流程**: 1. 创建 MipsCloudClient(broker + cert) 2. Connect 3. 订阅设备属性变化(SubProp) 4. 订阅设备事件(SubEvent) 5. 订阅设备状态(SubDeviceState) 6. 打印收到的消息,运行 60 秒后退出 **依赖**:config(需 token 获取 cert)+ storage cert --- ### 4. lan_control — LAN 设备控制 **覆盖模块**:`miot_lan.go` **流程**: 1. 创建 MIoTNetwork(获取本地网卡) 2. 创建 MIoTLan(需设备 did + token) 3. Start → 等待设备发现 4. 列出已发现的 LAN 设备 5. SubProp 订阅属性 6. SendToDevice 发送控制指令 7. 等待 30 秒观察结果 **依赖**:config(需 did + token) --- ### 5. mdns_discovery — mDNS 网关发现 **覆盖模块**:`miot_mdns.go` **流程**: 1. 创建 MipsService 2. Init → 开始扫描 3. SubServiceChange 订阅变化 4. 打印发现的网关(did、ip、port、groupID) 5. GetServices 按 groupID 查询 6. 运行 30 秒 **依赖**:无(纯网络扫描) --- ### 6. network_monitor — 网络状态监控 **覆盖模块**:`miot_network.go` **流程**: 1. 创建 MIoTNetwork 2. Init → 获取当前网络状态 3. GetNetworkStatus → 打印在线状态 4. GetNetworkInfo → 打印所有网卡 5. SubNetworkStatus → 订阅状态变化 6. SubNetworkInfo → 订阅网卡变化 7. 运行 30 秒 **依赖**:无 --- ### 7. storage_manage — 存储/证书管理 **覆盖模块**:`miot_storage.go` **流程**: 1. 创建 MIoTStorage(指定 rootPath) 2. Save / Load / Remove 测试 3. LoadUserConfig / UpdateUserConfig 4. 创建 MIoTCert → VerifyCACert 5. LoadUserKey / LoadUserCert 6. 创建 DeviceManufacturer → GetName **依赖**:config(uid + cloudServer) --- ### 8. spec_parser — SPEC 解析 **覆盖模块**:`spec_parser.go` **流程**: 1. 创建 MIoTStorage + MIoTSpecParser 2. Parse("urn:miot-spec-v2:device:light:0000A001:yeelink-light1:1") → MIoTSpecInstance 3. 遍历 Services → Properties → 打印 name/iid/format/access/valueRange 4. 遍历 Services → Actions → 打印 in/out 参数 5. 演示 EvalExpr / ValueFormat / ValuePrecision 6. 演示 ValueList.Names / GetValueByDescription **依赖**:storage + specs/ 目录 --- ### 9. full_client — 完整客户端 **覆盖模块**:全部 **流程**: 1. 创建 MIoTClient(config 全部字段) 2. Init → 初始化 OAuth/HTTP/Cert/Storage 3. RefreshDevices → 从云端获取设备 4. 启动 MIPS 订阅(设备状态 + 属性变化) 5. 启动 LAN 发现 6. 启动 mDNS 发现 7. 启动网络监控 8. 等待 Ctrl+C 退出,Deinit 清理 **依赖**:全部 config 字段 --- ## 执行顺序(建议) ``` config → cloud_oauth ─┐ ├→ cloud_devices → mips_subscribe │ network_monitor ────────┤ (独立) spec_parser ─────────┤ mdns_discovery ──────┤ (独立) │ └→ storage_manage → lan_control → full_client ``` 可首先生成 `config` 包,后续示例全部依赖它。