我正试图让我的MQTT Paho Python脚本保持连接(并在断开连接时重新连接)。遗憾的是,我不知道该怎么办。
也就是说,这台机器是通过WiFi连接的,所以在信号丢失或USB加密狗发出刺耳声音的情况下,我不想让代码泄露给我,所以我正在努力弥补所有的异常/错误。
以下是我尝试使用的一大块代码:
mqttc = mqtt.Client(machine_id, clean_session=False)
mqttc.username_pw_set(machine_id, mqtt_pwd)
mqttc.connect(mqtt_host, mqtt_port)
mqttc.subscribe(machine_id, qos=1)
def on_disconnect(client, userdata, rc):
if rc != 0:
print "Unexpected MQTT disconnection. Attempting to reconnect."
try:
mqttc.reconnect()
except socket.error:
??????
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.on_disconnect = on_disconnect
mqttc.loop_forever()
我没能走得更远,因为我不知道如何才能让它再次连接?除非它能够第一次重新连接,否则我似乎无法进行正确的重新连接循环。
任何建议都会很有帮助!
谢谢!
读取源(1),即loop_forver()
方法,在无限阻塞循环中调用loop()
方法。它是loop()
方法,确保pub/sub消息和mqtt保持活动流量由broker维护。如果连接断开,loop_forver()
还会自动重新连接。
还要注意,loop_forever()
会阻塞,直到客户端显式调用disconnect()
为止。因此,如果您只想在程序中运行MQTT客户端,那么它将非常有用。我更喜欢loop_start()
/loop_stop()
方法。
mqttc = mqtt.Client(machine_id, clean_session=False)
mqttc.username_pw_set(mqtt_user, mqtt_pwd)
mqttc.connect(mqtt_host, mqtt_port)
mqttc.subscribe(mqtt_topic, qos=1)
def on_disconnect(client, userdata, rc):
if rc != 0:
print("Unexpected MQTT disconnection. Will auto-reconnect")
mqttc.on_connect = on_connect
mqttc.on_message = on_message
mqttc.on_disconnect = on_disconnect
mqttc.loop_forever()
不确定为什么在username_pw_set()
和subscribe()
调用中使用machine_id
。改变了他们