micropython-lib/umqtt.robust/umqtt/robust.py

56 wiersze
1.4 KiB
Python

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()