From 7ac9ddca8a6470a743b5c33c116e24e867c7b27a Mon Sep 17 00:00:00 2001 From: sanderpleijers Date: Thu, 18 Jun 2020 11:31:07 +0200 Subject: [PATCH] Add files via upload --- mqtt.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ utcar.go | 20 ++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 mqtt.go diff --git a/mqtt.go b/mqtt.go new file mode 100644 index 0000000..2aca6b2 --- /dev/null +++ b/mqtt.go @@ -0,0 +1,55 @@ +package main + +import ( + "crypto/tls" + //"flag" + "fmt" + "log" + "strings" + + MQTT "github.com/eclipse/paho.mqtt.golang" +) + + +func ConnectMqtt(mqttaddress string, mqttuser string, mqttpwd string) MQTT.Client { + //MQTT.DEBUG = log.New(os.Stdout, "", 0) + //MQTT.ERROR = log.New(os.Stdout, "", 0) + //hostname, _ := os.Hostname() + //topic := flag.String("topic", "alarm/", "Topic to publish the messages on") + //qos := flag.Int("qos", 0, "The QoS to send the messages at") + //retained := flag.Bool("retained", false, "Are the messages sent with the retained flag") + //clientid := flag.String("clientid", "utcar", "A clientid for the connection") + //flag.Parse() + + connOpts := MQTT.NewClientOptions().AddBroker(mqttaddress).SetClientID("utcar").SetCleanSession(true) + connOpts.SetUsername(mqttuser) + connOpts.SetPassword(mqttpwd) + + tlsConfig := &tls.Config{InsecureSkipVerify: true, ClientAuth: tls.NoClientCert} + connOpts.SetTLSConfig(tlsConfig) + + client := MQTT.NewClient(connOpts) + if token := client.Connect(); token.Wait() && token.Error() != nil { + log.Println(token.Error()) + return nil + } + log.Printf("Connected to %s\n", mqttaddress) + return client +} + +func PublishMqtt(client MQTT.Client, sia SIA) error { + var body string + switch sia.command { + case "UA": + body = "ON" + case "UR": + body = "OFF" + default: + return fmt.Errorf("Unsupported SIA command for pusher (%s)\n", sia.command) + } + itemUrl := strings.Join([]string{"alarm/zone_", sia.zone, "/state"}, "") + client.Publish(itemUrl, 0, false, body) + + log.Printf("Publish %s to %s", body, itemUrl) + return nil +} \ No newline at end of file diff --git a/utcar.go b/utcar.go index 50f9690..dd52a03 100644 --- a/utcar.go +++ b/utcar.go @@ -54,11 +54,17 @@ func Execute() { rootCmd.PersistentFlags().String("addr", "", "Target addr (e.g. http://openhab.local:8080)") rootCmd.PersistentFlags().String("user", "", "Target username") rootCmd.PersistentFlags().String("pwd", "", "Target password") + rootCmd.PersistentFlags().String("mqttaddr", "", "Mqtt addr (e.g. http://mqtt:1883)") + rootCmd.PersistentFlags().String("mqttuser", "", "Mqtt username") + rootCmd.PersistentFlags().String("mqttpwd", "", "Mqtt password") rootCmd.PersistentFlags().Int("port", 12300, "Listen port number") rootCmd.PersistentFlags().Int("debug", 0, "Debug server port number (default: no debug server)") viper.BindPFlag("addr", rootCmd.PersistentFlags().Lookup("addr")) viper.BindPFlag("user", rootCmd.PersistentFlags().Lookup("user")) viper.BindPFlag("pwd", rootCmd.PersistentFlags().Lookup("pwd")) + viper.BindPFlag("mqttaddr", rootCmd.PersistentFlags().Lookup("mqttaddr")) + viper.BindPFlag("mqttuser", rootCmd.PersistentFlags().Lookup("mqttuser")) + viper.BindPFlag("mqttpwd", rootCmd.PersistentFlags().Lookup("mqttpwd")) viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port")) viper.BindPFlag("debug", rootCmd.PersistentFlags().Lookup("debug")) @@ -184,6 +190,20 @@ func run() { } }() } + if viper.GetString("mqttaddr") != "" { + log.Printf("Pushing to mqtt %s\n", viper.GetString("mqttaddr")) + pchan = make(chan SIA) + go func() { + client := ConnectMqtt(viper.GetString("mqttaddr"), viper.GetString("mqttuser"), viper.GetString("mqttpwd")) + for { + sia := <-pchan + err := PublishMqtt(client, sia) + if err != nil { + log.Printf("Push error: %v", err) + } + } + }() + } for { // eternally... // Wait for a connection