98 lines
1.8 KiB
Go
98 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"strconv"
|
|
|
|
"git.barakmich.com/barak/hue/discovery"
|
|
"github.com/amimof/huego"
|
|
"github.com/spf13/pflag"
|
|
)
|
|
|
|
var (
|
|
group = pflag.String("group", "", "Select a light group")
|
|
light = pflag.String("light", "", "Select an individual light")
|
|
listAllScenes = pflag.Bool("list-all-scenes", false, "List all scenes")
|
|
listScenes = pflag.Bool("list-scenes", false, "List all scenes")
|
|
scene = pflag.String("scene", "", "Set a scene")
|
|
)
|
|
|
|
func main() {
|
|
pflag.Parse()
|
|
bridge, err := discovery.DiscoverAndConnectFromConfig("barak-hue-test")
|
|
if err != nil {
|
|
log.Fatalln("Couldn't connect to hue bridge:", err)
|
|
}
|
|
if *listAllScenes {
|
|
scenes, _ := bridge.GetScenes()
|
|
fmt.Println(scenes[0].Group)
|
|
return
|
|
}
|
|
if *group != "" {
|
|
err := groupMain(bridge)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
if *light != "" {
|
|
err := lightMain(bridge)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
} else {
|
|
return
|
|
}
|
|
}
|
|
log.Fatalln("Need to specify at least one of --group or --light")
|
|
}
|
|
|
|
func groupMain(bridge *huego.Bridge) error {
|
|
groups, err := bridge.GetGroups()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var g huego.Group
|
|
found := false
|
|
for _, x := range groups {
|
|
if x.Name == *group {
|
|
found = true
|
|
g = x
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
return fmt.Errorf("Couldn't find group named \"%s\"", *group)
|
|
}
|
|
switch {
|
|
case *listScenes:
|
|
scenes, err := bridge.GetScenes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, s := range scenes {
|
|
if s.Group == strconv.Itoa(g.ID) {
|
|
fmt.Println(s.Name)
|
|
}
|
|
}
|
|
case *scene != "":
|
|
scenes, err := bridge.GetScenes()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, s := range scenes {
|
|
if s.Group == strconv.Itoa(g.ID) {
|
|
if s.Name == *scene {
|
|
return g.Scene(s.ID)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func lightMain(bridge *huego.Bridge) error {
|
|
return nil
|
|
}
|