簡體   English   中英

MQTT不會通過Python發布

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM