移远官网

关于MQTT工作时掉线会假死的问题

开发板: 移远通信EC600S QuecPython开发板TYPE-C接口
淘宝链接:https://detail.tmall.com/item.htm?id=633487849294&spm=a1z09.2.0.0.66322e8d3tI98d&_u=ekc6rk2ee1&skuId=4695698246677

问题描述:
自建MQTT服务(稳定工作一年以上)
使用API:from umqtt import MQTTClient
连接MQTT服务后,通过线程方式启动2个任务:
_thread.start_new_thread(mqMain, ())
_thread.start_new_thread(keeConnect, ())

def mqMain():
global _mqClient
print(“mqtt thread start…”)
while True:
_mqClient.wait_msg() # 阻塞函数,监听消息

def mq_sub_cb(topic, msg):
mqtt_log.info(“Subscribe Recv: Topic={},Msg={}”.format(topic.decode(), msg.decode()))

进入正常工作后,如果网络稳定,则工作一天以上都没问题
但如果网络中断,或MQTT服务临时重启
则模块表现为假死状态,无法重连MQTT
QPYcomV1.1.1的交互窗口只能输入字符,不能回车,相当于不能执行交互指令

期间测试过用Try也无法捕获异常
用看门狗也无法使之重启模块

后面测试后回复您

如果可以的话,提供代码,方便后面测试时需要

经测试,发现在_mqClient.wait_msg() 后面加个utime.sleep_ms(100)可以解决假死问题

嗯嗯,好的,我们会尽快测试