2022年12月28日 星期三

Python快速實現MQTT主題訂閱和消息接收

 Python快速實現MQTT主題訂閱和消息接收

源自於 https://www.cooooder.com/archives/20210303

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))



mq_client = mqtt.Client(client_id='alex9ufo_pts')

mq_client.on_connect = on_connect

mq_client.on_message = on_message

# 連接到EMQX Broker MQTT代理

mq_client.connect("broker.hivemq.com", 1883, 60)


# 阻塞式自動處理收發資料、自動處理重新連接,所有的資料處理邏輯都在預先設定好的回呼函數中進行的

mq_client.loop_forever()



>>> %Run -c $EDITOR_CONTENT

Connected with result code 0

alex9ufo/house/main-light b'Hello, World!'

alex9ufo/house/main-light b'Hello, World!'






沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...