From f866f7ec9799ca6710bef4a3c3930c19a9a3aa46 Mon Sep 17 00:00:00 2001 From: jvandenbroek <jvandenbroek@gmail.com> Date: Sun, 7 Feb 2016 14:51:32 +0100 Subject: [PATCH] Changed reconnect logic --- service.mqtt/service.py | 52 ++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/service.mqtt/service.py b/service.mqtt/service.py index 8c1c76a..578fd7e 100644 --- a/service.mqtt/service.py +++ b/service.mqtt/service.py @@ -243,47 +243,51 @@ def startmqtt(): mqc.on_disconnect=disconnecthandler if __addon__.getSetting("mqttanonymousconnection")=='false': mqc.username_pw_set(__addon__.getSetting("mqttusername"), __addon__.getSetting("mqttpassword")) - xbmc.log("MQTT: Anonymous disabled, connecting as user: %s" % __addon__.getSetting("mqttusername")) + mqttlogging("MQTT: Anonymous disabled, connecting as user: %s" % __addon__.getSetting("mqttusername")) if __addon__.getSetting("mqtttlsconnection")=='true' and __addon__.getSetting("mqtttlsconnectioncrt")!='' and __addon__.getSetting("mqtttlsclient")=='false': mqc.tls_set(__addon__.getSetting("mqtttlsconnectioncrt")) - xbmc.log("MQTT: TLS enabled, connecting using CA certificate: %s" % __addon__.getSetting("mqtttlsconnectioncrt")) + mqttlogging("MQTT: TLS enabled, connecting using CA certificate: %s" % __addon__.getSetting("mqtttlsconnectioncrt")) elif __addon__.getSetting("mqtttlsconnection")=='true' and __addon__.getSetting("mqtttlsclient")=='true' and __addon__.getSetting("mqtttlsclientcrt")!='' and __addon__.getSetting("mqtttlsclientkey")!='': mqc.tls_set(__addon__.getSetting("mqtttlsconnectioncrt"), __addon__.getSetting("mqtttlsclientcrt"), __addon__.getSetting("mqtttlsclientkey")) - xbmc.log("MQTT: TLS with client certificates enabled, connecting using certificates CA: %s, client %s and key: %s" % (__addon__.getSetting("mqttusername"), __addon__.getSetting("mqtttlsclientcrt"), __addon__.getSetting("mqtttlsclientkey"))) + mqttlogging("MQTT: TLS with client certificates enabled, connecting using certificates CA: %s, client %s and key: %s" % (__addon__.getSetting("mqttusername"), __addon__.getSetting("mqtttlsclientcrt"), __addon__.getSetting("mqtttlsclientkey"))) topic=__addon__.getSetting("mqtttopic") if not topic.endswith("/"): topic+="/" mqc.will_set(topic+"connected",0,qos=2,retain=True) - mqttlogging("MQTT: Connecting to MQTT broker at %s:%s" % (__addon__.getSetting("mqtthost"),__addon__.getSetting("mqttport"))) - mqc.connect(__addon__.getSetting("mqtthost"),__addon__.getSetting("mqttport"),60) + sleep=2 + for attempt in range(10): + try: + mqttlogging("MQTT: Connecting to MQTT broker at %s:%s" % (__addon__.getSetting("mqtthost"),__addon__.getSetting("mqttport"))) + mqc.connect(__addon__.getSetting("mqtthost"),__addon__.getSetting("mqttport"),60) + except socket.error: + mqttlogging("MQTT: Socket error raised, retry in %d seconds" % sleep) + monitor.waitForAbort(sleep) + sleep=sleep*2 + else: + break + else: + mqttlogging("MQTT: No connection possible, giving up") + return(False) mqc.publish(topic+"connected",2,qos=1,retain=True) mqc.loop_start() + return(True) # # Addon initialization and shutdown # if (__name__ == "__main__"): global monitor,player - xbmc.log('MQTT: MQTT Adapter Version %s started' % __version__) + mqttlogging('MQTT: MQTT Adapter Version %s started' % __version__) load_settings() monitor=MQTTMonitor() - player=MQTTPlayer() - retries=0 - - for attempt in range(retries,20): - try: - startmqtt() - except socket.error: - mqttlogging("MQTT: Socket error raised, retrying..") - retries+=1 - time.sleep(5) + if startmqtt(): + player=MQTTPlayer() + if mqttprogress: + mqttlogging("MQTT: Progress Publishing enabled, interval is set to %d seconds" % mqttinterval) + while not monitor.waitForAbort(mqttinterval): + publishprogress() else: - break - else: - mqttlogging("MQTT: No connection possible, giving up.") + mqttlogging("MQTT: Progress Publishing disabled, waiting for abort") + monitor.waitForAbort() mqc.loop_stop(True) - - while not monitor.waitForAbort(mqttinterval): - if mqttprogress: - publishprogress() - mqc.loop_stop(True) + mqttlogging("MQTT: Shutting down") -- GitLab