From 4808cf57ba1fc72582d864dfdc6020a23429e500 Mon Sep 17 00:00:00 2001 From: Thomas Klaehn Date: Wed, 3 Apr 2024 07:46:43 +0200 Subject: [PATCH] Fix: re-subscribe after mqtt connection lost --- sauna.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sauna.go b/sauna.go index 0c542f4..01755bd 100644 --- a/sauna.go +++ b/sauna.go @@ -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) { - 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() err := json.Unmarshal(msg.Payload(), &sauna_temperature) 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) { logger.Println("Connected") + subscribe(client) } var connectLostHandler mqtt.ConnectionLostHandler = func(client mqtt.Client, err error) { @@ -77,7 +78,7 @@ func http_endpoint_sauna(w http.ResponseWriter, r *http.Request) { } } -func Start() { +func connect() mqtt.Client { // MQTT connection opts := mqtt.NewClientOptions() opts.AddBroker("tcp://nuc:1883") @@ -87,14 +88,22 @@ func Start() { opts.OnConnectionLost = connectLostHandler client := mqtt.NewClient(opts) 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 topic := "sauna/temperature" token := client.Subscribe(topic, 1, saunaHandler) token.Wait() logger.Printf("Subscribed to topic %s", topic) +} + +func Start() { + client := connect() + subscribe(client) http.HandleFunc("/api/sauna", http_endpoint_sauna) }