智宇物聯 專注于提供高穩定、高速率的三網物聯網卡
萬盛中國移動OneNet物聯網平臺使用心得(3)MQTT協議后臺命令下發
- 作者:智宇物聯
- 發表時間:2022年10月13日
- 來源:智宇物聯

題目
大家好,超子又和大家見面了,超子我能力有限,技術不高,有什么錯誤的地方,歡迎板磚。今天我們測試一下中國移動云OneNet物聯網平臺下發命令功能,也就是分析一下服務器推送的PUBLISH報文命令。超子在前面介紹阿里云物聯網平臺的時候,詳細介紹了MQTT協議報文的構成,這里就不贅述了,我們直接操作。

首先我們進入開發者中心,然后進入我們的產品中,點擊左側導航欄,進入設備列表。然后再對應的設備內,找到更多操作,然后選擇下發命令,在下發命令之前,一定要先發送CONNECT報文,等設備在線后,才能發送,不然設備不在線,發了命令也收不到。

進入下發命令的頁面后,點擊靠近右上角的下發命令按鍵。

我們可以發送字符串格式或16進制格式的數據,這里我們就選擇發字符串吧,然后命令框中輸入abc123,然后頁面往下看,點擊發送按鍵,再提醒一下大家,點擊發送之前,一定要先發送CONNECT報文,讓設備在線。

我們用網絡調試助手軟件,測試一下,首先是發送CONNECT報文,我們看到服務器正確的回復了我們,說明設備在線了,然后在點擊OneNet服務器后臺發送命令的按鍵后,紅圈中就是接收到的PUBLISH報文命令。我們復制下來分析一下。
30 32 00 2A 24 63 72 65 71 2F 62 66 62 62 32 30 63 37 2D 34 35 62 65 2D 35 30 66 62 2D 62 65 34 65 2D 34 61 65 63 64 38 35 66 31 65 65 64 61 62 63 31 32 33
以上是服務器發給我們的數據,都是16進制的數據,簡化書寫,去掉了0x。開頭是30表示是等級0的PUBLISH報文,發送方向是S->C,也就是服務器推送給我們的命令。再看第2個字節是0x32,十進制就是50,表示可變報頭和負載一共50個字節,因為是等級0的PUBLISH報文,所以可變報文就是topic字符串再加上2個字節的長度表示。負載就是我們在后臺下發的命令數據,負載數據不需要2個字節的長度表示,所以命令是多少字節,負載數據就是多少字節。
接下來的兩個字節0x00 0x2A ,換成16進制是42,表示topic長度是42個字節,然后再加上0x00 0x2A這兩個字節本身,長度就是44,也就是可變報頭的長度。然后我們從0x00 0x2A 往后數42個字節,就是topic字符串名稱數據 ,截取出來如下所示:
24 63 72 65 71 2F 62 66 62 62 32 30 63 37 2D 34 35 62 65 2D 35 30 66 62 2D 62 65 34 65 2D 34 61 65 63 64 38 35 66 31 65 65 64
以上42個字節就是topic,都是16進制,我們換成字符串就是:$
creq/bfbb20c7-45be-50fb-be4e-4aecd85f1eed,這個就是服務器下發命令中使用的topic。
最后還剩下6個字節0x61 0x62 0x63 0x31 0x32 0x33,就是負載數據了,我們換成字符串,因為我們剛才下發的時候,用的是字符串形式,換成字符串后的結果是abc123,和我們剛才從后臺下發的命令一樣,說明整個下發命令的流程正確。