Paho Python MQTT Client – Callback Examples
用戶端訂閱了 sensor/#主題,一個回檔處理 sensor/temperature,另一個回檔處理 sensor/humidity
- sub
- 待過濾的主題,只能定義一個回檔
- callback
- 回呼函數,與 on_message() 相同形式
- 範例
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
"""
回呼函數:當MQTT代理回應用戶端連接請求時觸發
:param client: 回檔返回的用戶端實例
:param userdata: Client()或user_data_set()中設置的私有使用者資料
:param flags: MQTT代理發送的回應標識
:param rc: 連接結果
0:連接成功
1:連接被拒絕 - 協議版本
2: 連接被拒絕 - 用戶端識別字無效
3:連接被拒絕 - 伺服器不可用
4:連接被拒絕 - 用戶名或密碼錯誤
5:連接被拒絕 - 未授權6-255:當前未使用
:return:
"""
print("Connected with result code "+str(rc))
# 在on_connect()中進行消息訂閱,是因為如果丟失連接進行重連,主題也會重新被訂閱
client.subscribe("alex9ufo/house/#")
def on_message(client, userdata, message):
"""
回呼函數:當接收到MQTT代理發佈的消息時觸發
:param client: 回檔返回的用戶端實例
:param userdata: Client()或user_data_set()中設置的私有使用者資料
:param message: MQTTMessage的一個實例,這是一個包含主題,有效負載,qos,retain的類
:return:
"""
print(message.topic+" "+str(message.payload))
# 處理溫度消息回檔
def temperature_callback(client, userdata, message):
print(message.topic+" "+str(message.payload))
# 處理濕度消息回檔
def humidity_callback(client, userdata, message):
print(message.topic+" "+str(message.payload))
client = mqtt.Client(client_id='alex9ufo_pts')
client.on_connect = on_connect
client.on_message = on_message
# 連接到EMQX Broker MQTT代理
client.connect("broker.hivemq.com", 1883, 60)
client.subscribe('alex9ufo/sensor/#')
client.message_callback_add('alex9ufo/sensor/temperature', temperature_callback)
client.message_callback_add('alex9ufo/sensor/humidity', humidity_callback)
# 阻塞式自動處理收發資料、自動處理重新連接,所有的資料處理邏輯都在預先設定好的回呼函數中進行的
client.loop_forever()
>>> %Run Subscribe_3.py
Connected with result code 0
alex9ufo/sensor/temperature b'25'
alex9ufo/sensor/humidity b'80'
沒有留言:
張貼留言