aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Burwell <ben@benburwell.com>2018-05-25 00:31:01 -0400
committerBen Burwell <ben@benburwell.com>2018-05-25 00:31:01 -0400
commit93649031c575e54b59407873f29d6fa12aa93d53 (patch)
tree0cb0ab3317fe607a183cf2122787d201401b81c9
parent23114b25bf60ff9cf135fe794235c0cf1f7c6b18 (diff)
Add support for forever operation
-rw-r--r--config.go1
-rw-r--r--main.go35
2 files changed, 30 insertions, 6 deletions
diff --git a/config.go b/config.go
index 1402c17..3fae3ba 100644
--- a/config.go
+++ b/config.go
@@ -20,6 +20,7 @@ type BridgeConfig struct {
type PhluxConfig struct {
Latitude float64 `yaml:"latitude"`
Longitude float64 `yaml:"longitude"`
+ Interval int64 `yaml:"interval"`
Bridges []BridgeConfig `yaml:"bridges"`
}
diff --git a/main.go b/main.go
index 00850db..e279d0f 100644
--- a/main.go
+++ b/main.go
@@ -2,6 +2,7 @@ package main
import (
"errors"
+ "flag"
"fmt"
"log"
"time"
@@ -14,8 +15,26 @@ const USERNAME = "phlux"
func main() {
var config PhluxConfig
config.Read()
+
+ flag.Float64Var(&config.Latitude, "latitude", config.Latitude, "Latitude (used to calculate sunrise and sunset)")
+ flag.Float64Var(&config.Longitude, "longitude", config.Longitude, "Longitude (used to calculate sunrise and sunset)")
+ flag.Int64Var(&config.Interval, "interval", config.Interval, "Interval (in seconds) at which to run the update if --forever is set")
+ forever := flag.Bool("forever", false, "Run the update every [interval], use Ctrl-C to cancel")
+ flag.Parse()
+
log.Println("Config:", config)
+ updateColorTemps(&config)
+ if *forever {
+ ticker := time.NewTicker(time.Duration(config.Interval) * time.Second)
+ for {
+ <-ticker.C
+ updateColorTemps(&config)
+ }
+ }
+}
+
+func updateColorTemps(config *PhluxConfig) {
bridges, err := hue.FindBridges()
if err != nil {
log.Fatalf("Error finding bridges: %s\n", err.Error())
@@ -24,7 +43,7 @@ func main() {
desiredColorTemp := getDesiredColorTemperature(time.Now(), config.Latitude, config.Longitude)
for _, bridge := range bridges {
log.Printf("Bridge: %s\n", bridge.IPAddress)
- updateBridge(&bridge, desiredColorTemp, &config)
+ updateBridge(&bridge, desiredColorTemp, config)
}
}
@@ -71,22 +90,26 @@ func authenticate(bridge *hue.Bridge, config *PhluxConfig) error {
}
err = bridge.Login(token)
if err != nil {
- log.Fatalf("Could not log in to bridge: %s\n", err.Error())
+ return errors.New(fmt.Sprintf("Could not log in to bridge: %s", err.Error()))
}
- log.Println("Logged in to bridge")
return nil
}
-func updateBridge(bridge *hue.Bridge, ct ColorTemperature, config *PhluxConfig) {
- authenticate(bridge, config)
+func updateBridge(bridge *hue.Bridge, ct ColorTemperature, config *PhluxConfig) error {
+ err := authenticate(bridge, config)
+ if err != nil {
+ return err
+ }
+ log.Println("Logged in to bridge")
lights, err := bridge.GetAllLights()
if err != nil {
- log.Fatalf("Error getting lights: %s\n", err.Error())
+ return errors.New(fmt.Sprintf("Error getting lights: %s", err.Error()))
}
log.Printf("Found %d lights\n", len(lights))
for _, light := range lights {
updateLight(light, ct)
}
+ return nil
}
func updateLight(light hue.Light, ct ColorTemperature) {