--- /dev/null
+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)
+ }
+ }
+
+}