// Package main demonstrates AirConditioner.OnPropsChanged subscription. // 运行后等待状态变化,Ctrl+C 退出。 package main import ( "context" "log" "os" "os/signal" "xiaomihome/xiaomi" "xiaomihome/xiaomi/devices" miotconfig "xiaomihome/miot/examples/config" ) func main() { cfg, err := miotconfig.LoadConfig("../../../miot/examples/config.json") if err != nil { log.Fatal("请先运行 miot/examples/cloud_oauth 获取 token:", err) } client, err := xiaomi.NewClient(context.Background(), xiaomi.Config{ AuthInfo: xiaomi.AuthInfo{ AccessToken: cfg.AuthInfo.AccessToken, RefreshToken: cfg.AuthInfo.RefreshToken, ExpiresIn: int32(cfg.AuthInfo.ExpiresIn), ExpiresTS: cfg.AuthInfo.ExpiresTS, }, DataDir: "./data", UUID: cfg.UUID, UID: cfg.UID, }) if err != nil { log.Fatal(err) } defer client.Close() const targetDID = "2053225728" info, err := client.GetDevice(context.Background(), targetDID) if err != nil { log.Fatalf("获取设备 %s 失败: %v", targetDID, err) } log.Printf("设备: %s (DID: %s, 型号: %s)", info.Name, info.DID, info.Model) ac, err := devices.NewAirConditioner(client, info) if err != nil { log.Fatal("创建 AirConditioner 失败:", err) } // 先查一次当前状态 on, _ := ac.IsOn(context.Background()) log.Printf("初始状态: on=%v", on) // 订阅状态变化 subID, err := ac.OnPropsChanged(func(props devices.ACProps, changed string) { log.Printf("[%s] on=%v mode=%s target=%.1f current=%.1f fan=%s swing=%s", changed, props.On, props.Mode, props.TargetTemperature, props.Temperature, props.FanLevel, props.Swing) }) if err != nil { log.Printf("订阅失败: %v", err) } else { log.Printf("已订阅: subID=%s", subID) } log.Println("\n等待状态变化,Ctrl+C 退出...") ch := make(chan os.Signal, 1) signal.Notify(ch, os.Interrupt) <-ch log.Println("退出") }