// Package main demonstrates fan device control. // 运行前提:已配置环境变量 XIAOMI_CLIENT_ID / XIAOMI_CLIENT_SECRET / XIAOMI_ACCESS_TOKEN。 package main import ( "context" "log" "time" "xiaomihome/xiaomi" "xiaomihome/xiaomi/devices" miotconfig "xiaomihome/miot/examples/config" ) func main() { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() cfg, err := miotconfig.LoadConfig("../../../miot/examples/config.json") if err != nil { log.Fatal("请先运行 miot/examples/cloud_oauth 获取 token:", err) } client, err := xiaomi.NewClient(ctx, xiaomi.Config{ ClientSecret: "", AccessToken: cfg.AuthInfo.AccessToken, UID: cfg.UID, UUID: cfg.UUID, }) if err != nil { log.Fatal(err) } defer client.Close() log.Println("=== 风扇控制 ===") const targetDID = "820891929" info, err := client.GetDevice(ctx, targetDID) if err != nil { log.Fatalf("获取设备 %s 失败: %v", targetDID, err) } log.Printf("设备: %s (DID: %s, 型号: %s)", info.Name, info.DID, info.Model) fan, err := devices.NewFan(client, info) if err != nil { log.Fatalf("创建 Fan 控制失败: %v", err) } log.Println(" 开启风扇...") fan.TurnOn(ctx) log.Println(" 设置 2 档风...") if err := fan.SetFanLevel(ctx, 2); err != nil { log.Printf(" 调速失败(可能不支持): %v", err) } else { level, _ := fan.GetFanLevel(ctx) log.Printf(" 当前档位: %d", level) } log.Println(" 开启摇头...") if err := fan.SetOscillation(ctx, true); err != nil { log.Printf(" 摇头失败(可能不支持): %v", err) } else { osc, _ := fan.IsOscillating(ctx) log.Printf(" 摇头状态: %v", osc) } log.Println(" 开启自然风...") if err := fan.SetNaturalWind(ctx, true); err != nil { log.Printf(" 自然风失败(可能不支持): %v", err) } else { nw, _ := fan.IsNaturalWind(ctx) log.Printf(" 自然风状态: %v", nw) } on, _ := fan.IsOn(ctx) level, _ := fan.GetFanLevel(ctx) osc, _ := fan.IsOscillating(ctx) nw, _ := fan.IsNaturalWind(ctx) log.Printf(" 风扇状态汇总: on=%v level=%d oscillation=%v naturalWind=%v", on, level, osc, nw) log.Println("风扇演示完毕") }