hue/cmd/huectl/main.go
2023-09-07 11:28:30 -07:00

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
}