experiments
This commit is contained in:
commit
c62aa93ae0
3 changed files with 410 additions and 0 deletions
114
discovery/main.go
Normal file
114
discovery/main.go
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
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)
|
||||
//}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue