我試圖通過使用this library中的message_callback_add()函數來按主題捕獲消息。下面是我用來處理我的mqtt訂閱和發佈需求的整個模塊。我已經能夠測試發佈的工作,但我似乎無法捕獲任何傳入的消息。沒有任何警告/錯誤,print("position")
聲明僅適用於1和2。使用Paho的message_callback_add()函數,但沒有結果
import sys
import os
import time
import Things
import paho.mqtt.client as paho
global mqttclient;
global broker;
global port;
broker = "10.64.16.199";
port = 1883;
mypid = os.getpid()
client_uniq = "pubclient_"+str(mypid)
mqttclient = paho.Client(client_uniq, False) #nocleanstart
mqttclient.connect(broker, port, 60)
mqttclient.subscribe("Commands/#")
def Pump_callback(client, userdata, message):
#print("Received message '" + str(message.payload) + "' on topic '"
# + message.topic + "' with QoS " + str(message.qos))
print("position 3")
Things.set_waterPumpSpeed(int(message.payload))
def Valve_callback(client, userdata, message):
#print("Received message '" + str(message.payload) + "' on topic '"
# + message.topic + "' with QoS " + str(message.qos))
print("position 4")
Things.set_valvePosition(int(message.payload))
mqttclient.message_callback_add("Commands/PumpSpeed", Pump_callback)
mqttclient.message_callback_add("Commands/ValvePosition", Valve_callback)
print("position 1")
mqttclient.loop_start()
print("position 2")
def pub(topic, value):
mqttclient.publish(topic, value, 0, True)
我以爲'loop_start()'會產生一個線程在後臺運行,所以它會是非阻塞的。 – schumacherj
是的......所以它立即返回,那麼你的'def pub(topic,value):'什麼也不做,那是程序的結束。所以它退出。 – ralight