2022年12月28日 星期三

Paho Python MQTT Client – Callback Examples

Paho Python MQTT Client – Callback Examples


用戶端訂閱了 sensor/#主題,一個回檔處理 sensor/temperature,另一個回檔處理 sensor/humidity

  • sub
    • 待過濾的主題,只能定義一個回檔
  • callback
  • 範例

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'



沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...