Update discovery, go mod, and make a simple commandline control
This commit is contained in:
parent
c62aa93ae0
commit
c50304bbcd
5 changed files with 162 additions and 12 deletions
98
cmd/huecmd/main.go
Normal file
98
cmd/huecmd/main.go
Normal 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
|
||||
}
|
||||
|
|
@ -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
12
go.mod
Normal 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
22
go.sum
Normal 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=
|
||||
4
main.go
4
main.go
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue