IoT離線裝置雲端指令消息觸達方案
前言
由于網絡不穩定,電池容量限制,很多物聯網裝置無法做到24小時線上,裝置頻繁上下線,裝置定時沉睡離線,帶來一個新的問題:在裝置離線時,雲端的控制指令如何發送給裝置,在裝置上線後,能按照新的指令執行業務邏輯?
架構方案
基于以上訴求,我們有兩種通用解決方案:
- 雲端下發MQTT協定QoS=1的消息
- 使用IoT物聯網平台的裝置影子功能
方案一:發送QoS=1消息
為了接收離線消息,需要裝置端和雲端配合。
裝置端配置
裝置端建立mqtt連接配接的時候需要配置 CONNECT 參數 CleanSession标志被設定為0,即保留之前建立的session狀态,包括:
- 用戶端的訂閱資訊
- 未完成确認的QoS=1的消息。
- 未發送給用戶端的QoS=1的消息。
雲端的操作
雲端發送控制指令API文檔
https://help.aliyun.com/document_detail/69793.html
方案二:裝置影子功能
我們以更新雲列印機運作配置參數為例,介紹通過裝置影子功能來實作配置參數更新過程。
- 裝置端需要訂閱 /shadow/get/${YourProductKey}/${YourDeviceName} 以實時擷取雲端控制指令消息。
- 裝置端CONNECT成功後,主動查詢裝置影子指令,Pub消息到 /shadow/update/${YourProductKey}/${YourDeviceName} 中,payload結構體如下:
{ "method": "get" }
雲端使用裝置影子接口UpdateDeviceShadow發送控制指令:
https://help.aliyun.com/document_detail/69954.html完整案例參考
https://www.yuque.com/cloud-dev/iot-tech/yl5pcy