[英]MQTT will not publish over Python
在MQTT和Python方面,我有一定的經驗,這使我困惑了近一個小時。
這是我正在使用的腳本:
#!/usr/bin/python
import json
import socket
import paho.mqtt.client as mqtt
client = mqtt.Client()
try:
client.connect('localhost', 4444)
except:
print "ERROR: Could not connect to MQTT."
mode_msg = {
'mode': '2'
}
client.publish("set", payload=json.dumps(mode_msg), qos=2, retain=False)
此代碼將無法運行。 我不知道為什么。 最令人費解的是,當我在底部添加“ client.loop_forever()”時,它將運行...
我也嘗試在底部添加“ client.disconnect()”,以使其正確斷開連接,但這都無濟於事。 我現在有什么想念的嗎?
看來您正在嘗試發布一條消息,而paho客戶端有一條特定的消息可以做到這一點。
#!/usr/bin/python
import paho.mqtt.publish as publish
mode_msg = {
'mode': '2'
}
publish.single("paho/test/single", payload=json.dumps(mode_msg), qos=2, hostname="localhost", port=4444)
原始代碼的問題在於,您需要運行網絡循環來處理發布(並且由於您正在使用qos = 2進行發布,因此需要回復發布的代理確認),因此您可以執行以下操作:
#!/usr/bin/python
import json
import paho.mqtt.client as mqtt
run = True
def on_publish(client, userdata, mid):
run = False;
client = mqtt.Client()
client.on_publish = on_publish
try:
client.connect('localhost', 4444)
except:
print "ERROR: Could not connect to MQTT."
mode_msg = {
'mode': '2'
}
client.publish("set", payload=json.dumps(mode_msg), qos=2, retain=False)
while run:
client.loop()
client.disconnect()
client.loop_forever()
將無法正常工作,因為它確實按照其名稱所建議的那樣工作,並且會永遠循環,因此永遠不會到達您的client.disconnect()
。 這使用on_publish
回調來中斷調用client.loop()
的循環,然后斷開連接。
paho.mqtt客戶端庫是圍繞事件循環構建的,必須運行該事件循環才能正確處理和維護MQTT協議。
因此,要使事情發生,您需要調用一些loop()
函數,如文檔中所述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.