package main import ( "log" "time" mqtt "github.com/eclipse/paho.mqtt.golang" ) const ( BROKER = `tcp://127.0.0.1:1883` CLIENT_ID = `siaserver` TOPIC_PREFIX = `sia` QOS = byte(1) RETAINED = true MQTT_CONNECT_TIMEOUT = 1 * time.Second MQTT_DISCONNECT_TIMEOUT_US = 500 MQTT_RECONNECT_PERIOD = 2 * time.Second ) type MQTTMessage struct { Topic string Payload []byte } func MQTTRun(tx chan MQTTMessage) { opts := mqtt.NewClientOptions() opts.AddBroker(BROKER) opts.SetClientID(CLIENT_ID) opts.SetCleanSession(true) opts.SetOnConnectHandler(MQTTOnConnectHandler) client := mqtt.NewClient(opts) token := client.Connect() success := token.WaitTimeout(MQTT_CONNECT_TIMEOUT) if !success { log.Printf("Timed out after %v.", MQTT_CONNECT_TIMEOUT) return } defer client.Disconnect(MQTT_DISCONNECT_TIMEOUT_US) for message := range tx { client.Publish(message.Topic, QOS, RETAINED, message.Payload) } } func MQTTOnConnectHandler(c mqtt.Client) { log.Printf("Connected to MQTT broker (%s)", BROKER) }