import utime from . import simple class MQTTClient(simple.MQTTClient): DELAY = 2 DEBUG = False def delay(self, i): utime.sleep(self.DELAY) def log(self, in_reconnect, e): if self.DEBUG: if in_reconnect: print("mqtt reconnect: %r" % e) else: print("mqtt: %r" % e) def reconnect(self): i = 0 while 1: try: return super().connect(False) except OSError as e: self.log(True, e) i += 1 self.delay(i) def with_retry(self, meth, *args, **kwargs): while 1: try: return meth(*args, **kwargs) except OSError as e: print("%r" % e) time.sleep(0.5) self.reconnect() def publish_(self, *args, **kwargs): return self.with_retry(super().publish, *args, **kwargs) def publish(self, topic, msg, retain=False, qos=0): while 1: try: return super().publish(topic, msg, retain, qos) except OSError as e: self.log(False, e) self.reconnect() def wait_msg(self): while 1: try: return super().wait_msg() except OSError as e: self.log(False, e) self.reconnect()