From: jweigele Date: Fri, 2 Jun 2023 19:43:17 +0000 (-0700) Subject: Add fancontrol main, simple program to turn zigbee fans on or off X-Git-Url: http://git.hexthepla.net/?a=commitdiff_plain;h=7556945e417ffc5dae89682e4ae3f01b5eb6c078;p=rabbit_go Add fancontrol main, simple program to turn zigbee fans on or off --- diff --git a/fancontrol/main.go b/fancontrol/main.go new file mode 100644 index 0000000..32c73fb --- /dev/null +++ b/fancontrol/main.go @@ -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) + } + } + +}