package discovery import ( "encoding/json" "fmt" "os" "os/user" "path/filepath" "github.com/amimof/huego" ) // UserInfo is the saved data struture of a Hue app connection type UserInfo struct { User string } func DiscoverAndConnectFromConfig(appName string) (*huego.Bridge, error) { data := make(map[string]UserInfo) u, err := user.Current() if err != nil { return nil, err } filename := filepath.Join(u.HomeDir, ".config/hue-barak") _, err = os.Stat(filename) if err == nil { f, err := os.Open(filename) if err != nil { return nil, err } err = json.NewDecoder(f).Decode(&data) if err != nil { return nil, err } f.Close() } ui, ok := data[appName] if !ok { ui = UserInfo{} } b, err := huego.Discover() if err != nil { return nil, err } if ui.User != "" { newb := b.Login(ui.User) return newb, nil } fmt.Println("Please press the Hue Bridge button, then press Enter") fmt.Scanln() user, err := b.CreateUser(appName) if err != nil { return nil, err } data[appName] = UserInfo{User: user} b = b.Login(user) f, err := os.Create(filename) defer f.Close() if err != nil { return nil, err } err = json.NewEncoder(f).Encode(data) return b, err } func main() { fmt.Println("vim-go") b, err := DiscoverAndConnectFromConfig("barak-hue-test") if err != nil { panic(err) } rules, err := b.GetRules() if err != nil { panic(err) } for i, r := range rules { fmt.Println(i, r.ID, r.Name) //for _, act := range r.Actions { //fmt.Printf("\t%#v\n", act) //} } testRule := huego.Rule{Actions: rules[0].Actions} t, _ := json.Marshal(testRule) fmt.Println(string(t)) l, err := b.GetGroups() if err != nil { panic(err) } for i, r := range l { fmt.Println(i, r.ID, r.Name, r.IsOn()) //for _, s := range r.Lights { //fmt.Printf("\t%s\n", s) //} } s, err := b.GetSensors() if err != nil { panic(err) } for i, r := range s { fmt.Println(i, r.ID, r.Name) //for _, s := range r.Lights { //fmt.Printf("\t%s\n", s) //} } }