# 示例任务提示词 > 目标目录:`go-miot/examples/` > 公共配置:`examples/config/config.go` > **约束:禁用命令行参数 + 禁用环境变量,仅用 config.json,其余变量直接硬编码** --- ## E0 — config(先做) ``` 目标目录:D:\miot\go-miot\examples\config 目标文件:D:\miot\go-miot\examples\config\config.go 创建公共配置包,所有示例共享。 1. Config 结构体: CloudServer, ClientID, AccessToken, RefreshToken string UID, UUID, RedirectURL, Language string CertFile, KeyFile, CAFile string TokenPath string // 本地 config.json 路径 2. LoadConfig(path string) (*Config, error) - 若 path 非空,读取 JSON 文件 - 若 path 为空,返回 SampleConfig() 默认值 - **禁用环境变量,禁用命令行参数** 3. SaveConfig(path string, cfg *Config) error - 写回 JSON 文件(用于 OAuth 示例保存 token) 4. SampleConfig() *Config - 返回带默认值的配置(CloudServer="cn", ClientID=OAUTH2常量等) ``` --- ## E1 — cloud_oauth ``` 目标文件:D:\miot\go-miot\examples\cloud_oauth\main.go 详细说明:D:\miot\go-miot\EXAMPLES_PLAN.md package main,import miot + examples/config 流程: 1. cfg := config.LoadConfig("config.json") 2. oauth := miot.NewMIoTOauthClient(cfg.ClientID, cfg.RedirectURL, cfg.CloudServer, cfg.UUID) 3. url := oauth.GenAuthURL("", "", nil, false) 4. fmt.Println("打开此URL授权:", url) 5. fmt.Print("输入回调code: "); var code string; fmt.Scanln(&code) 6. token, err := oauth.GetAccessToken(code) 7. cfg.AccessToken = token["access_token"], cfg.RefreshToken = token["refresh_token"] 8. config.SaveConfig("config.json", cfg) 9. 演示 refresh: newToken, err := oauth.RefreshAccessToken(cfg.RefreshToken) ``` --- ## E2 — cloud_devices ``` 目标文件:D:\miot\go-miot\examples\cloud_devices\main.go 流程: 1. cfg := config.LoadConfig("config.json") 2. http, err := miot.NewMIoTHttpClient(cfg.CloudServer, cfg.ClientID, cfg.AccessToken) 3. user, _ := http.GetUserInfo() 4. homes, _ := http.GetHomeInfos() 5. devices, _ := http.GetDevices(nil) 6. 选第一个设备 did,调用 http.GetProp(did, siid, piid) 7. 调用 http.SetProp(did, siid, piid, value) 8. 调用 http.DoAction(did, siid, aiid, inList) 9. 所有结果 fmt.Printf 打印 ``` --- ## E3 — mips_subscribe ``` 目标文件:D:\miot\go-miot\examples\mips_subscribe\main.go 流程: 1. cfg := config.LoadConfig("config.json") 2. storage := miot.NewMIoTStorage("./data") 3. cert, _ := miot.NewMIoTCert(storage, cfg.UID, cfg.CloudServer) 4. mips := miot.NewMipsCloudClient("ssl://cn-ha.mqtt.io.mi.com:8883", cfg.ClientID, cfg.UID, cfg.AccessToken) 5. mips.Connect() 6. mips.SubProp(did, handler) / mips.SubEvent(did, handler) 7. time.Sleep(60 * time.Second) 8. mips.Disconnect() ``` --- ## E4 — lan_control ``` 目标文件:D:\miot\go-miot\examples\lan_control\main.go 流程: 1. cfg := config.LoadConfig("config.json") 2. network := miot.NewMIoTNetwork(nil, nil, 30*time.Second) 3. network.Init() 4. lan, err := miot.NewMIoTLan(nil, network, nil, true, 0) 5. lan.UpdateDevices([]miot.LanDeviceInfo{{Did: "device_did", Token: "device_hex_token"}}) 6. lan.SubProp(did, handler) 7. 等待设备上线,打印属性 8. time.Sleep(30 * time.Second) ``` --- ## E5 — mdns_discovery ``` 目标文件:D:\miot\go-miot\examples\mdns_discovery\main.go 流程: 1. svc := miot.NewMipsService() 2. svc.Init() 3. svc.SubServiceChange("demo", "*", handler) 4. services := svc.GetServices("") 5. 打印每个服务的 Name, Addresses, Port, DID, GroupID 6. time.Sleep(30 * time.Second) 7. svc.Deinit() ``` --- ## E6 — network_monitor ``` 目标文件:D:\miot\go-miot\examples\network_monitor\main.go 流程: 1. network := miot.NewMIoTNetwork(nil, nil, 30*time.Second) 2. network.Init() 3. 打印 network.GetNetworkStatus() 4. 打印 network.GetNetworkInfo() 每个网卡 5. network.SubNetworkStatus("demo", handler) 6. network.SubNetworkInfo("demo", handler) 7. time.Sleep(30 * time.Second) ``` --- ## E7 — storage_manage ``` 目标文件:D:\miot\go-miot\examples\storage_manage\main.go 流程: 1. cfg := config.LoadConfig("config.json") 2. storage := miot.NewMIoTStorage("./data") 3. storage.Save("test", "hello", "world") / Load("test", "hello", "str") 4. storage.UpdateUserConfig(cfg.UID, cfg.CloudServer, map, false) 5. cert, _ := miot.NewMIoTCert(storage, cfg.UID, cfg.CloudServer) 6. cert.VerifyCACert() 7. mfg := miot.NewDeviceManufacturer(storage) 8. mfg.Init() / mfg.GetName("xiaomi") ``` --- ## E8 — spec_parser ``` 目标文件:D:\miot\go-miot\examples\spec_parser\main.go 流程: 1. storage := miot.NewMIoTStorage("./data") 2. parser := miot.NewMIoTSpecParser("zh-Hans", storage, "specs") 3. instance, err := parser.Parse("urn:miot-spec-v2:device:light:0000A001:yeelink-light1:1", "") 4. 遍历 instance.Services: 对每个 MIoTSpecService: 打印 Type, Description 遍历 Properties: 打印 IID/Format/Access/Writable/ValueRange 演示 ValueList.Names() / GetValueByDescription() 遍历 Actions: 打印 IID/In/Out 演示 ValuePrecision / ValueFormat ``` --- ## E9 — full_client ``` 目标文件:D:\miot\go-miot\examples\full_client\main.go 流程: 1. cfg := config.LoadConfig("config.json") 2. client := miot.NewMIoTClient("demo", entryData, cfg.UID, cfg.CloudServer, miot.CtrlModeCloud) 3. client.SetStorage(storage) 4. client.SetHTTPClient(http) 5. client.SetMipsCloud(mips) 6. client.Init() 7. client.RefreshDevices() 8. client.SubDeviceState(did, handler) 9. client.SubProp(did, handler, siid, piid) 10. 启动 LAN/mDNS/Network 11. signal 捕获 Ctrl+C 12. client.Deinit() ```