1.前言
IoT物聯網平台基于MQTT協定的Pub/Sub通信,那麼topic和payload設計就很重要。
我們可以定義出不同topic來處理不同業務場景,類似web開發中的API設計。
2.自定義Topic類
2.1 預設自定義Topic
當我們建立産品後,系統會自動生成3個自定義topic,友善我們使用。
Topic | 權限 | 備注 |
---|---|---|
/${ProductKey}/${DeviceName}/user/update | 釋出 | 上報資料 |
/${ProductKey}/${DeviceName}/user/update/error | 上報錯誤事件 | |
/${ProductKey}/${DeviceName}/user/get | 訂閱 | 接收雲端資料 |
2.2 自定義Topic
預設topic是一個示範,我們可以根據業務需求,自己定義Topic和Payload,來解決現實中的問題。比如下面的示例:
/${ProductKey}/${DeviceName}/user/heart/post | 定期上報資料 | |
/${ProductKey}/${DeviceName}/user/bizdata/post | 業務觸發上報 | |
/${ProductKey}/${DeviceName}/user/biz/control | 接收雲端指令 | |
/${ProductKey}/${DeviceName}/user/config/modify | 接收裝置配置變更 |
對于裝置上報資料,我們可以把不同優先級的消息做分類,通過規則引擎流轉分流到不同隊列,給予不同處理資源,避免重要業務消息延遲過高。
對于雲端指令接收,我們也可以區分業務指令和配置指令,給予不同優先級。
3.系統Topic清單
3.1 裝置影子
用于實作裝置影子功能,需要使用如下topic
/shadow/update/${ProductKey}/${DeviceName} | 更新裝置影子 QoS=1 | |
/shadow/get/${ProductKey}/${DeviceName} | 擷取裝置影子 |
裝置影子可以實作裝置的運作參數的配置更新功能。
3.2 固件更新
/ota/device/inform//${ProductKey}/${DeviceName} | 上報目前固件版本 | |
/ota/device/upgrade/${ProductKey}/${DeviceName} | 接收OTA資訊 | |
/ota/device/progress/${ProductKey}/${DeviceName} | 上報OTA進度 | |
/ota/device/request/${ProductKey}/${DeviceName} | 主動請求OTA資訊 |
3.3 廣播
/broadcast/${YourProductKey}/+ | 接收廣播資訊 |
同一産品的裝置,可以接收到雲端的廣播指令,由于IoT平台限制廣播最大觸達1000個裝置。
這裡我們可以把裝置按規則做分組,不同組裝置自動訂閱不同group的topic,比如:
- /broadcast/${YourProductKey}/group/a
- /broadcast/${YourProductKey}/group/b
3.4 RRPC通信
使用下面topic,IoT平台實作了基于mqtt協定的雲端發起對裝置的同步RPC調用
/sys/${ProductKey}/${DeviceName}/rrpc/request/+ | 接收RRPC調用 | |
/sys/${ProductKey}/${DeviceName}/rrpc/response/${msgId} | 響應msgId對應RRPC請求 |
3.5 裝置标簽
使用裝置标簽topic可以動态給裝置添加運作時标簽
/sys/${ProductKey}/${DeviceName}/thing/deviceinfo/update | 更新裝置标簽 |
3.6 遠端配置
/sys/${ProductKey}/${DeviceName}/thing/config/get | 主動查詢配置資訊 | |
/sys/${ProductKey}/${DeviceName}/thing/config/push | 接收配置資訊 | |
/sys/${ProductKey}/${DeviceName}/thing/config/get_reply |
4.物模型通信
4.1 物模型JSON資料通信
/sys/${ProductKey}/${DeviceName}/thing/event/property/post | 上報屬性資料 | |
/sys/${ProductKey}/${DeviceName}/thing/event/property/post_reply | 接收傳回結果 | |
/sys/${ProductKey}/${DeviceName}/thing/event/{identifer}/post | 上報事件資料 | |
/sys/${ProductKey}/${DeviceName}/thing/event/{identifer}/post_reply | ||
/sys/${ProductKey}/${DeviceName}/thing/service/property/set | 接收屬性設定指令 | |
/sys/${ProductKey}/${DeviceName}/thing/service/property/set_reply | 傳回處理結果 | |
/sys/${ProductKey}/${DeviceName}/thing/service/{identifer} | 接收服務調用指令 | |
/sys/${ProductKey}/${DeviceName}/thing/service/{identifer}_reply | 傳回服務處理結果 |
4.2 物模型透傳資料通信
/sys/${ProductKey}/${DeviceName}/thing/model/up_raw | ||
/sys/${ProductKey}/${DeviceName}/thing/model/down_raw |
更多資訊參考:
https://www.yuque.com/cloud-dev/iot-tech/kg84mi