配置 Flask-MQTT 的 on_connect 和 on_message 回調函數
在這節課中,我們將學習如何在 Flask 應用中配置 Flask-MQTT
擴展的 on_connect
和 on_message
回調函數。這些回調函數將幫助您的應用在 MQTT 客戶端連接成功後訂閱主題,以及處理接收到的 MQTT 消息。
步驟 1:配置 on_connect
回調函數
on_connect
回調函數在 MQTT 客戶端成功連接到 MQTT Broker 時觸發。在這個函數中,我們可以指定客戶端應該訂閱哪些主題,以便在這些主題上接收到消息。
@mqtt.on_connect() def handle_connect(client, userdata, flags, rc): # 訂閱一個或多個主題 mqtt.subscribe('YuanDevice/HK/respone/#')
- 解釋:
@mqtt.on_connect()
是一個裝飾器,用於將handle_connect
函數與on_connect
事件綁定。handle_connect
函數中的mqtt.subscribe()
方法用於訂閱特定的 MQTT 主題。在這裡,我們訂閱了'YuanDevice/HK/respone/#'
主題,#
表示這是一個通配符,可以匹配該路徑下的所有子主題。
- 通配符說明:
#
是 MQTT 主題中的多層通配符,表示可以匹配當前層級及其後續所有層級的子主題。例如,訂閱'YuanDevice/HK/respone/#'
可以匹配'YuanDevice/HK/respone/temp'
、'YuanDevice/HK/respone/humidity'
等等。
步驟 2:配置 on_message
回調函數
on_message
回調函數在客戶端接收到來自訂閱主題的消息時觸發。在這個函數中,我們可以處理收到的消息,例如將其打印出來或進行進一步的處理。
@mqtt.on_message() def handle_mqtt_message(client, userdata, message): # 打印接收到的消息 print("Received message '" + message.payload.decode() + "' on topic '" + message.topic + "'")
- 解釋:
@mqtt.on_message()
是一個裝飾器,用於將handle_mqtt_message
函數與on_message
事件綁定。handle_mqtt_message
函數中的message
對象包含了 MQTT 消息的內容和相關信息。message.payload.decode()
會將消息的內容(負載)從二進制解碼為字符串,方便進行處理或顯示。message.topic
是該消息所屬的 MQTT 主題。
- 使用場景:
- 當您的應用需要監聽並處理來自多個設備或傳感器的數據時,這些回調函數將會非常有用。您可以根據不同的主題,將接收到的消息分類處理,並執行相應的業務邏輯。
步驟 3:測試與運行
完成配置後,您的 Flask 應用現在可以在成功連接到 MQTT Broker 後訂閱指定的主題,並在接收到來自這些主題的消息時進行處理。
- 運行 Flask 應用:
- 在命令行中,導航到 Flask 應用的目錄,並運行以下命令啟動應用:
python3 app.py
- 在命令行中,導航到 Flask 應用的目錄,並運行以下命令啟動應用:
- 監控 MQTT 消息:
- 您可以使用一個 MQTT 客戶端工具(如 MQTTX)向
'YuanDevice/HK/respone/#'
主題發送消息,並在 Flask 應用的控制台上查看接收到的消息內容。
- 您可以使用一個 MQTT 客戶端工具(如 MQTTX)向