Compare commits

...

2 Commits

Author SHA1 Message Date
tkl
7ba8fb5a36 Change mqtt broker 2024-07-09 15:06:01 +00:00
Thomas Klaehn
4808cf57ba Fix: re-subscribe after mqtt connection lost 2024-04-03 07:46:43 +02:00

View File

@ -33,7 +33,7 @@ var messagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Me
} }
var saunaHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) { var saunaHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message) {
log.Printf("Received message: %s from topic: %s\n", msg.Payload(), msg.Topic()) logger.Printf("Received message: %s from topic: %s\n", msg.Payload(), msg.Topic())
sauna_mutex.Lock() sauna_mutex.Lock()
err := json.Unmarshal(msg.Payload(), &sauna_temperature) err := json.Unmarshal(msg.Payload(), &sauna_temperature)
sauna_temperature.Time = time.Now() sauna_temperature.Time = time.Now()
@ -49,6 +49,7 @@ var saunaHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Message
var connectHandler mqtt.OnConnectHandler = func(client mqtt.Client) { var connectHandler mqtt.OnConnectHandler = func(client mqtt.Client) {
logger.Println("Connected") logger.Println("Connected")
subscribe(client)
} }
var connectLostHandler mqtt.ConnectionLostHandler = func(client mqtt.Client, err error) { var connectLostHandler mqtt.ConnectionLostHandler = func(client mqtt.Client, err error) {
@ -77,24 +78,32 @@ func http_endpoint_sauna(w http.ResponseWriter, r *http.Request) {
} }
} }
func Start() { func connect() mqtt.Client {
// MQTT connection // MQTT connection
opts := mqtt.NewClientOptions() opts := mqtt.NewClientOptions()
opts.AddBroker("tcp://nuc:1883") opts.AddBroker("tcp://p5:1883")
opts.SetClientID("apiservice/sauna/" + strconv.Itoa(rand.Int())) opts.SetClientID("apiservice/sauna/" + strconv.Itoa(rand.Int()))
opts.SetDefaultPublishHandler(messagePubHandler) opts.SetDefaultPublishHandler(messagePubHandler)
opts.OnConnect = connectHandler opts.OnConnect = connectHandler
opts.OnConnectionLost = connectLostHandler opts.OnConnectionLost = connectLostHandler
client := mqtt.NewClient(opts) client := mqtt.NewClient(opts)
if token := client.Connect(); token.Wait() && token.Error() != nil { if token := client.Connect(); token.Wait() && token.Error() != nil {
panic(token.Error()) logger.Panic(token.Error())
}
return client
} }
func subscribe(client mqtt.Client) {
// MQTT subscribtion // MQTT subscribtion
topic := "sauna/temperature" topic := "sauna/temperature"
token := client.Subscribe(topic, 1, saunaHandler) token := client.Subscribe(topic, 1, saunaHandler)
token.Wait() token.Wait()
logger.Printf("Subscribed to topic %s", topic) logger.Printf("Subscribed to topic %s", topic)
}
func Start() {
client := connect()
subscribe(client)
http.HandleFunc("/api/sauna", http_endpoint_sauna) http.HandleFunc("/api/sauna", http_endpoint_sauna)
} }