/
get-light-state.go
80 lines (75 loc) · 1.75 KB
/
get-light-state.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package main
import (
"flag"
"fmt"
"github.com/heatxsink/go-hue/groups"
"github.com/heatxsink/go-hue/lights"
"github.com/heatxsink/go-hue/portal"
"os"
"time"
)
var (
apiKey string = ""
blinkState lights.State
)
func usage() {
fmt.Fprintf(os.Stderr, "usage: get-light-state -key=[string]\n")
flag.PrintDefaults()
os.Exit(2)
}
func init() {
blinkState = lights.State{On: true, Alert: "lselect"}
flag.StringVar(&apiKey, "key", os.Getenv("HUE_USERNAME"), "hue light api key")
flag.Parse()
flag.Usage = usage
}
func main() {
if apiKey != "" {
pp, err := portal.GetPortal()
if err != nil {
fmt.Println("portal.GetPortal() ERROR: ", err)
os.Exit(1)
}
ll := lights.New(pp[0].InternalIPAddress, apiKey)
allLights, err := ll.GetAllLights()
if err != nil {
fmt.Println("lights.GetAllLights() ERROR: ", err)
os.Exit(1)
}
fmt.Println()
fmt.Println("Lights")
fmt.Println("------")
for _, l := range allLights {
fmt.Printf("ID: %d Name: %s\n", l.ID, l.Name)
}
gg := groups.New(pp[0].InternalIPAddress, apiKey)
allGroups, err := gg.GetAllGroups()
if err != nil {
fmt.Println("groups.GetAllGroups() ERROR: ", err)
os.Exit(1)
}
fmt.Println()
fmt.Println("Groups")
fmt.Println("------")
for _, g := range allGroups {
fmt.Printf("ID: %d Name: %s\n", g.ID, g.Name)
for _, lll := range g.Lights {
fmt.Println("\t", lll)
}
previousState := g.Action
_, err := gg.SetGroupState(g.ID, blinkState)
if err != nil {
fmt.Println("groups.SetGroupState() ERROR: ", err)
os.Exit(1)
}
time.Sleep(time.Second * time.Duration(10))
_, err = gg.SetGroupState(g.ID, previousState)
if err != nil {
fmt.Println("groups.SetGroupState() ERROR: ", err)
os.Exit(1)
}
}
} else {
usage()
}
}