package main import ( "fmt" "log" "os" MQTT "github.com/eclipse/paho.mqtt.golang" mqtt "github.com/eclipse/paho.mqtt.golang" ) // contents of struct mostly don't matter for toolkit. type incomingMessage struct { Type string `json:"type"` Image string `json:"image"` } // listens on topic for messages func listener(mqMessages chan mqtt.Message) { opts := setupMQTT() client := MQTT.NewClient(opts) topic := "home/rgbboard" if token := client.Connect(); token.Wait() && token.Error() != nil { log.Println(fmt.Sprintf("failed to connect to mq: %s", token.Error().Error())) panic(token.Error()) } log.Println("connected") client.Subscribe(topic, 0, func(client mqtt.Client, msg mqtt.Message) { log.Println("Receiving ", string(msg.Payload()), " on topic: ", msg.Topic()) mqMessages <- msg }) } // connection lost management func onConnectionLostHandler(c MQTT.Client, reason error) { log.Fatalf(reason.Error()) } // setup connection to mqtt, topic to listen to, qos func setupMQTT() *mqtt.ClientOptions { opts := MQTT.NewClientOptions() opts.AddBroker(fmt.Sprintf("tcp://%s:%s", os.Getenv("MQTTBROKER"), os.Getenv("MQTTPORT"))) opts.SetUsername(os.Getenv("MQTTUSER")) opts.SetPassword(os.Getenv("MQTTPASSWORD")) opts.SetClientID("rgbboard") opts.SetAutoReconnect(true) opts.SetConnectionLostHandler(onConnectionLostHandler) return opts }