大家好,超子又和大家見面了,超子我能力有限,技術不高,有什么錯誤的地方,歡迎板磚。[OneNet物聯(lián)網(wǎng)平臺,使用MQTT協(xié)議,向產(chǎn)品內(nèi)設備數(shù)據(jù)流,上傳數(shù)據(jù)]。今天我們測試一下中國移動OneNet物聯(lián)網(wǎng)平臺上傳數(shù)據(jù)的功能,也就是構建一下發(fā)布數(shù)據(jù)的PUBLISH報文。超子在前面介紹阿里云使用心得的文章中,詳細介紹了報文的構成,這里就不贅述了,我們直接操作。
當我們想上傳數(shù)據(jù)到服務器的時候,我們需要給數(shù)據(jù)找一個家。對于OneNet物聯(lián)網(wǎng)平臺而言,這個數(shù)據(jù)的家就是數(shù)據(jù)流, 如果沒有建立數(shù)據(jù)流,數(shù)據(jù)就沒法上傳。
我們首先進入開發(fā)者中心,然后進入我們的產(chǎn)品管理界面,點擊左側導航欄中的數(shù)據(jù)流模板。
然后在新打開的數(shù)據(jù)流模板頁面的右上角地方,找到添加數(shù)據(jù)流模板按鍵,點擊按鍵。
我們需要設置數(shù)據(jù)流的名稱,先給溫度數(shù)據(jù)建立一個家,名稱填寫temp,這個名字大家可以起自己喜歡的。單位和符號填不填無所謂。然后注意看頁面下方,有個添加按鍵,點一下就行。
然后我們再給濕度數(shù)據(jù)建立一個數(shù)據(jù)流,數(shù)據(jù)流名稱是humi,頁面下方,點擊添加即可 。
成功添加以上兩個數(shù)據(jù)流后,我們可以在數(shù)據(jù)流列表中看到剛剛建立的兩個數(shù)據(jù)流,也就是溫度temp和濕度humi。數(shù)據(jù)流的名稱是構建數(shù)據(jù)的關鍵信息,假設我們需要上傳的溫度數(shù)據(jù)是22.2,濕度數(shù)據(jù)是33.3,那么數(shù)據(jù)格式如下所示:
{"temp":22.2,"humi":33.3}
注意里面的temp和humi對應數(shù)據(jù)流的名稱,一定不能寫錯了,寫錯了數(shù)據(jù)就找不到家了。我們換成16進制,簡化書寫,去掉0x的結果如下:
7B 22 74 65 6D 70 22 3A 32 32 2E 32 2C 22 68 75 6D 69 22 3A 33 33 2E 33 7D
我們要構建的是等級0的PUBLISH報文,方向是C->S,也就是發(fā)布數(shù)據(jù)到服務器, 首先固定報頭是0x30 ??,??是剩余長度,負載已經(jīng)構建好了,等我們確定了可變報頭之后,再計算剩余長度。可變報頭是發(fā)布數(shù)據(jù)用的Topic,我們上傳數(shù)據(jù)時,需要使用的Topic是$dp,很簡單,就3個字節(jié),換成16進制,簡化書寫去掉0x的結果如下:
24 64 70
然后不要忘了再加上2個字節(jié)表示長度3,所以可變報頭最終結果如下,總共5個字節(jié):
00 03 24 64 70
我們再看一下剛剛構建好的數(shù)據(jù){"temp":22.2,"humi":33.3},長度總共是25個字節(jié),OneNet對于上傳的數(shù)據(jù)有自己的要求,就是數(shù)據(jù)前邊必須多加3個字節(jié),這個要求不是MQTT標準協(xié)議要求的,是OneNet自己的要求 。第一個字節(jié)固定是0x03,然后再加上兩個字節(jié),表示數(shù)據(jù)的長度,也就是表示25,16進制簡化書寫就是00 19,最終等級0的PUBLISH報文中的負載結果,16進制,簡化書寫如下,長度總計是28:
03 00 19 7B 22 74 65 6D 70 22 3A 32 32 2E 32 2C 22 68 75 6D 69 22 3A 33 33 2E 33 7D
可變報頭和負載都確定好了,那么剩余長度=可變+負載=5+28=33,一個字節(jié)就行,16進制是0x21,那么固定報頭就是0x30 0x21,然后我們把固定,可變和負載,3個部分連接起來,16進制,簡化書寫,去掉0x:
30 21 00 03 24 64 70 03 00 19 7B 22 74 65 6D 70 22 3A 32 32 2E 32 2C 22 68 75 6D 69 22 3A 33 33 2E 33 7D
到此整個往OneNet物聯(lián)網(wǎng)平臺服務器上傳數(shù)據(jù)的,等級0的PUBLISH報文就構建好了。我們需要用網(wǎng)絡調(diào)試助手軟件,實際測試一下,一定要注意先發(fā)CONNECT報文之后,再發(fā)我們的PUBLISH報文,CONNECT報文在《中國移動OneNet物聯(lián)網(wǎng)平臺使用心得(2)MQTT協(xié)議CONNECT連接平臺》這篇文章中構建好了,大家忘了的話,可以返回去看一下。
我們首先發(fā)送CONNECT報文,成功后,發(fā)送PUBLISH報文,因為是等級0,所以服務器不會有什么回復,我們需要到后臺看一下,數(shù)據(jù)有沒有上傳到后臺。
產(chǎn)品后臺中,我們點擊設備列表,可以看到設備在線了,然后點擊紅圈中的數(shù)據(jù)流,查看數(shù)據(jù)。
我們看到22.2和33.3已經(jīng)上傳到后臺中相應的數(shù)據(jù)流上了,說明我們等級0的PUBLISH報文正確。