99"""
1010
1111import logging
12+ import time
1213
1314import paho .mqtt .client as mqtt
1415
1516lastValues = {}
1617logger = logging .getLogger ()
17-
18+ reconnect_delay = 10 # count of seconds between connection retries
1819
1920def 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):
4546def 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