Add fancontrol main, simple program to turn zigbee fans on or off
authorjweigele <jweigele@local>
Fri, 2 Jun 2023 19:43:17 +0000 (12:43 -0700)
committerjweigele <jweigele@local>
Fri, 2 Jun 2023 19:43:17 +0000 (12:43 -0700)
fancontrol/main.go [new file with mode: 0644]

diff --git a/fancontrol/main.go b/fancontrol/main.go
new file mode 100644 (file)
index 0000000..32c73fb
--- /dev/null
@@ -0,0 +1,60 @@
+package main
+
+import (
+       "flag"
+       "fmt"
+       "os"
+
+       "github.com/go-logr/logr"
+       "unpiege.net/rabbit_go.git/helper"
+)
+
+type arrayFlags []string
+
+func (i *arrayFlags) String() string {
+       return "fan flags"
+}
+func (i *arrayFlags) Set(value string) error {
+       *i = append(*i, value)
+       return nil
+}
+
+var configFilename string
+var logger logr.Logger
+var fanFlags arrayFlags
+var state bool
+
+func main() {
+       // logging and flag initialization
+       flag.StringVar(&configFilename, "config", "", "the config filename")
+       flag.Var(&fanFlags, "fan", "multiple fan names")
+       flag.BoolVar(&state, "state", true, "state, true or false for on/off")
+
+       logger = helper.NewLogger()
+       flag.Parse()
+
+       rabbit, err := helper.SetupRabbit(configFilename, "fanstuff", "fanstuff") // config file, default routing key, source
+       if err != nil {
+               logger.Error(err, "failed to connect to rabbitmq")
+               os.Exit(1)
+       }
+
+       sendObj := make(map[string]interface{})
+       if state {
+               logger.V(0).Info("Turning fans on", "fanFlags", fanFlags)
+               sendObj["state"] = "on"
+       } else {
+               logger.V(0).Info("Turning fans off", "fanFlags", fanFlags)
+               sendObj["state"] = "off"
+       }
+       for _, fan := range fanFlags {
+               data := helper.RabbitSend{Data: sendObj, RoutingKey: fmt.Sprintf("zigbee2mqtt.%s/set", fan)}
+               err = helper.SendData(data, rabbit, false)
+               // TODO: find a cleaner way to bubble this up
+               if err != nil {
+                       logger.Error(err, "error sending data in send loop, exiting")
+                       os.Exit(1)
+               }
+       }
+
+}