From 6542e9b00d6e701782dcb8f83693ffc7d91dad85 Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 2 Jun 2017 15:11:57 +1000 Subject: [PATCH 1/2] umqtt.robust: Resubscribe to topics after doing reconnect. --- umqtt.robust/umqtt/robust.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/umqtt.robust/umqtt/robust.py b/umqtt.robust/umqtt/robust.py index 7ee40e020..6965b2580 100644 --- a/umqtt.robust/umqtt/robust.py +++ b/umqtt.robust/umqtt/robust.py @@ -6,6 +6,10 @@ class MQTTClient(simple.MQTTClient): DELAY = 2 DEBUG = False + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.subscriptions = [] + def delay(self, i): utime.sleep(self.DELAY) @@ -20,7 +24,12 @@ def reconnect(self): i = 0 while 1: try: - return super().connect(False) + ret = super().connect(False) + for topic, qos in self.subscriptions: + if self.DEBUG: + print("mqtt resubscribe: %r" % topic) + super().subscribe(topic, qos) + return ret except OSError as e: self.log(True, e) i += 1 @@ -34,6 +43,16 @@ def publish(self, topic, msg, retain=False, qos=0): self.log(False, e) self.reconnect() + def subscribe(self, topic, qos=0): + while 1: + try: + ret = super().subscribe(topic, qos) + self.subscriptions.append((topic, qos)) + return ret + except OSError as e: + self.log(False, e) + self.reconnect() + def wait_msg(self): while 1: try: From 0ed26413ea91deb4adb69ef0de7d7f674d1434e2 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 7 Jun 2017 11:42:20 +1000 Subject: [PATCH 2/2] umqtt/robust: Only resubscribe if session state was not present. --- umqtt.robust/umqtt/robust.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/umqtt.robust/umqtt/robust.py b/umqtt.robust/umqtt/robust.py index 6965b2580..e98251fda 100644 --- a/umqtt.robust/umqtt/robust.py +++ b/umqtt.robust/umqtt/robust.py @@ -25,10 +25,11 @@ def reconnect(self): while 1: try: ret = super().connect(False) - for topic, qos in self.subscriptions: - if self.DEBUG: - print("mqtt resubscribe: %r" % topic) - super().subscribe(topic, qos) + if not ret: + for topic, qos in self.subscriptions: + if self.DEBUG: + print("mqtt resubscribe: %r" % topic) + super().subscribe(topic, qos) return ret except OSError as e: self.log(True, e)