Update discovery, go mod, and make a simple commandline control

This commit is contained in:
Barak Michener 2023-09-07 11:27:56 -07:00
parent c62aa93ae0
commit c50304bbcd
5 changed files with 162 additions and 12 deletions

98
cmd/huecmd/main.go Normal file
View file

@ -0,0 +1,98 @@
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
}

View file

@ -6,13 +6,16 @@ import (
"os"
"os/user"
"path/filepath"
"time"
"github.com/amimof/huego"
)
// UserInfo is the saved data struture of a Hue app connection
type UserInfo struct {
User string
User string `json:",omitempty"`
LastSync time.Time `json:",omitempty"`
LastIP *huego.Bridge `json:",omitempty"`
}
func DiscoverAndConnectFromConfig(appName string) (*huego.Bridge, error) {
@ -40,14 +43,27 @@ func DiscoverAndConnectFromConfig(appName string) (*huego.Bridge, error) {
if !ok {
ui = UserInfo{}
}
if ui.LastIP != nil && ui.LastSync.After(time.Now().Add(-(time.Hour * 24 * 30))) {
newb := ui.LastIP.Login(ui.User)
return newb, nil
}
b, err := huego.Discover()
if err != nil {
return nil, err
}
if ui.User != "" {
data[appName] = UserInfo{
User: ui.User,
LastSync: time.Now(),
LastIP: b,
}
err := saveData(data, filename)
newb := b.Login(ui.User)
return newb, nil
return newb, err
}
fmt.Println("Please press the Hue Bridge button, then press Enter")
fmt.Scanln()
user, err := b.CreateUser(appName)
@ -57,18 +73,20 @@ func DiscoverAndConnectFromConfig(appName string) (*huego.Bridge, error) {
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)
err = saveData(data, filename)
return b, err
}
func saveData(data map[string]UserInfo, filename string) error {
f, err := os.Create(filename)
defer f.Close()
if err != nil {
return err
}
return json.NewEncoder(f).Encode(data)
}
func main() {
fmt.Println("vim-go")
b, err := DiscoverAndConnectFromConfig("barak-hue-test")
if err != nil {
panic(err)

12
go.mod Normal file
View file

@ -0,0 +1,12 @@
module git.barakmich.com/barak/hue
go 1.17
require (
github.com/amimof/huego v1.2.0
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e
github.com/lucasb-eyer/go-colorful v1.2.0
github.com/maruel/temperature v1.0.0
)
require github.com/spf13/pflag v1.0.5 // indirect

22
go.sum Normal file
View file

@ -0,0 +1,22 @@
github.com/amimof/huego v1.2.0 h1:hdJontFo4YKKumKlc/+fXFHQeON0bWqmiHds7JhNfvs=
github.com/amimof/huego v1.2.0/go.mod h1:z1Sy7Rrdzmb+XsGHVEhODrRJRDq4RCFW7trCI5cKmeA=
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e h1:wSQCJiig/QkoUnpvelSPbLiZNWvh2yMqQTQvIQqSUkU=
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e/go.mod h1:5G2EjwzgZUPnnReoKvPWVneT8APYbyKkihDVAHUi0II=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/jarcoal/httpmock v1.0.4 h1:jp+dy/+nonJE4g4xbVtl9QdrUNbn6/3hDT5R4nDIZnA=
github.com/jarcoal/httpmock v1.0.4/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/maruel/temperature v1.0.0 h1:78FX+YkXHH7iBSNcZBqRW3TN6gLOHlhYvjqvdP/aQ5Q=
github.com/maruel/temperature v1.0.0/go.mod h1:vIWWv/2SYBsJV65/FQAidxWQly41yYLUTaTzGDJEQWc=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

View file

@ -131,7 +131,7 @@ func main() {
var all huego.Group
found := false
for _, x := range groups {
if x.Name == "All Colors" {
if x.Name == "Dining Room" {
found = true
all = x
break
@ -150,5 +150,5 @@ func main() {
panic(err)
}
}
runChristmas(lightaddr)
runSnowAmbiance(lightaddr)
}