MQTT Topic 結構
MQTT 是一種廣泛應用於物聯網的輕量級通訊協議,主要透過訂閱與發布的方式在不同設備間交換數據。在 MQTT 通訊中,"Topic" 扮演了核心角色,用於對消息進行分類和分發。以下將介紹如何設計和應用 MQTT 的 Topic 結構,以提升設備之間的數據傳遞效率與可靠性。
什麼是 MQTT Topic?
在 MQTT 中,Topic 是一個分層的字串路徑,用於標示消息的類型與分類。每當某個設備要接收或發布消息時,都需要指定相應的 Topic,讓消息可以準確地到達目的地或被特定設備接收。Topic 的層級以斜線 (/) 來分隔。
本設備中的 MQTT Topic 設計
在本 RS232 伺服器中,我們使用多個不同的 Topic 來實現數據的接收、命令的傳遞、狀態的更新等,這些 Topic 的設計確保了不同類型數據的可靠傳遞,並且使得管理與維護更加便利。以下是設備中常見的幾個 MQTT Topic:
-
命令接收 (Command Topic)
- Topic 路徑:
{profile.mqtt_topic}/{wifi_mac}/cmd
- 用途: 用於接收外部設備下達的控制命令。例如,遠端設備可以透過這個 Topic 向本裝置發送如 "ota" 或 "pull" 等指令。
- Topic 路徑:
-
數據接收 (RX Topic)
- COM 1 Topic 路徑:
{profile.mqtt_topic}/{wifi_mac}/rx1
- COM 2 Topic 路徑:
{profile.mqtt_topic}/{wifi_mac}/rx2
- 用途: 這個 Topic 用於接收來自其他設備的數據,主要用於串口數據的接收與處理。當外部設備需要發送訊息到本裝置時,會將消息發布到這個 Topic 上。
- COM 1 Topic 路徑:
-
數據發送 (TX Topic)
- COM 1 Topic 路徑:
{profile.mqtt_topic}/{wifi_mac}/tx1
- COM 2 Topic 路徑:
{profile.mqtt_topic}/{wifi_mac}/tx2
- 用途: 這個 Topic 用於將處理過的數據或狀態訊息發布出去,其他設備可以透過訂閱這個 Topic 來獲取設備狀態或者接收轉發的數據。例如,UART 接收到的數據會經過處理後發布到這個 Topic 上,供其他設備使用。
- COM 1 Topic 路徑:
-
設備心跳訊息 (Heartbeat Topic)
- Topic 路徑:
{profile.mqtt_topic}/heartbeat
- 用途: 用於定期發送設備的心跳訊息,以確認設備當前是否正常運作並在線上。這對於遠端監控和管理來說非常重要,可以用來即時掌握設備的運行狀態。
- Topic 路徑:
-
版本資訊發布 (Version Topic)
- Topic 路徑:
{profile.mqtt_topic}/{wifi_mac}/version
- 用途: 用於發布設備的軟體版本資訊,方便管理者了解當前設備的版本狀態,確保所有設備的軟體版本一致,以利於維護和更新。
- Topic 路徑:
MQTT Topic 的設計原則
- 層級分明:
使用層級分隔符號 (/) 來對不同的數據類型和設備進行分隔。這樣的設計使得每個設備或功能模組有清晰的數據路徑,例如 {wifi_mac}/cmd
用於特定設備的命令接收,能夠有效避免混亂。
- 可讀性高:
Topic 名稱應具備描述性,便於理解。例如,cmd
代表命令類型,heartbeat
代表心跳訊息,讓管理者能夠一眼理解該 Topic 的用途。
- 可擴充性:
Topic 的設計應具備擴充性,便於日後添加新功能或設備。透過使用通用的前綴與結構,未來可以更輕鬆地在現有基礎上進行擴充。
MQTT Topic 在設備中的應用場景
當設備連接到 MQTT 伺服器並成功建立連線後,會根據不同的用途訂閱特定的 Topic。例如,在 mqtt_event_handler
中,當 MQTT 成功連線 (MQTT_EVENT_CONNECTED
) 時,設備會訂閱 cmd
與 rx
兩個主要的 Topic,確保外部設備能夠下達控制命令並向設備傳送數據。
這種基於 Topic 的消息分發機制,可以讓管理者靈活地控制設備的行為,並且能夠即時獲取設備的運行狀態和數據傳輸,提升設備的管理效率和可操作性,更可以達到自動化管理的目的。