diff --git a/umqtt.robust/umqtt/robust.py b/umqtt.robust/umqtt/robust.py index 7ee40e020..e98251fda 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,13 @@ def reconnect(self): i = 0 while 1: try: - return super().connect(False) + ret = super().connect(False) + 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) i += 1 @@ -34,6 +44,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: