Skip to content
This repository was archived by the owner on May 31, 2026. It is now read-only.

Commit d006d1a

Browse files
committed
Fix and improve handling not reachable MQTT broker and offline detection.
1 parent 6eba08a commit d006d1a

1 file changed

Lines changed: 20 additions & 16 deletions

File tree

devices/mqttDeyeMicro.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
"""
1010

1111
import logging
12+
import time
1213

1314
import paho.mqtt.client as mqtt
1415

1516
lastValues = {}
1617
logger = logging.getLogger()
17-
18+
reconnect_delay = 10 # count of seconds between connection retries
1819

1920
def on_connect(client, userdata, flags, rc):
2021
logger.info(f"Connected to MQTT: {userdata['host']}:{userdata['port']}/{userdata['topic']}")
@@ -26,11 +27,11 @@ def on_message(client, userdata, message):
2627
logger.debug(f"MQTT message received: {message.topic}:{message.payload.decode('utf-8')}")
2728

2829
topicmap = userdata['topicmap']
29-
if message.topic == f"userdata['topic']/status":
30+
if message.topic == f"userdata['topic']/logger_status":
3031
if message.payload.decode("utf-8") == "online":
31-
logger.debug(f"Status is online")
32+
logger.debug(f"Logger Status is online")
3233
else:
33-
logger.debug(f"Status is not online, setting power vlaues to 0")
34+
logger.debug(f"Logger Status is not online, setting power vlaues to 0")
3435
lastValues["power_active"] = 0
3536
lastValues["l1_power_active"] = 0
3637
lastValues["l1_current"] = 0
@@ -45,8 +46,7 @@ def on_message(client, userdata, message):
4546
def on_disconnect(client, userdata, rc):
4647
if rc != 0:
4748
logger.warning(f"MQTT disconnected unexpectedly: {rc}, trying to reconnect")
48-
reconnect_delay = 10
49-
while true:
49+
while True:
5050
time.sleep(reconnect_delay)
5151
try:
5252
client.reconnect()
@@ -89,16 +89,20 @@ def device(config):
8989
}
9090
}
9191

92-
try:
93-
client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION1, userdata=userdata)
94-
client.on_connect = on_connect
95-
client.on_message = on_message
96-
client.on_disconnect = on_disconnect
97-
98-
client.connect(host, port, keepalive)
99-
client.loop_start()
100-
except Exception as err:
101-
logger.error(f"MQTT connection failed: {host}:{port}/{topic} ({err=})")
92+
connected = False
93+
while not connected:
94+
try:
95+
client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION1, userdata=userdata)
96+
client.on_connect = on_connect
97+
client.on_message = on_message
98+
client.on_disconnect = on_disconnect
99+
100+
client.connect(host, port, keepalive)
101+
client.loop_start()
102+
connected = True
103+
except Exception as err:
104+
logger.error(f"MQTT connection failed: {host}:{port}/{topic} ({err=}). Retrying in {reconnect_delay}s.")
105+
time.sleep(reconnect_delay)
102106

103107
return {
104108
"client": client,

0 commit comments

Comments
 (0)