大家好,超子又和大家見面了,超子我能力有限,技術(shù)不高,有什么錯誤的地方,歡迎板磚。今天我們測試一下中國移動OneNet物聯(lián)網(wǎng)平臺上傳數(shù)據(jù)的功能,也就是構(gòu)建一下發(fā)布數(shù)據(jù)的PUBLISH報文。超子在前面介紹阿里云使用心得的文章中,詳細介紹了報文的構(gòu)成,這里就不贅述了,我們直接操作。

當我們想上傳數(shù)據(jù)到服務(wù)器的時候,我們需要給數(shù)據(jù)找一個家。對于OneNet物聯(lián)網(wǎng)平臺而言,這個數(shù)據(jù)的家就是數(shù)據(jù)流, 如果沒有建立數(shù)據(jù)流,數(shù)據(jù)就沒法上傳。

我們首先進入開發(fā)者中心,然后進入我們的產(chǎn)品管理界面,點擊左側(cè)導(dǎo)航欄中的數(shù)據(jù)流模板。

然后在新打開的數(shù)據(jù)流模板頁面的右上角地方,找到添加數(shù)據(jù)流模板按鍵,點擊按鍵。

我們需要設(shè)置數(shù)據(jù)流的名稱,先給溫度數(shù)據(jù)建立一個家,名稱填寫temp,這個名字大家可以起自己喜歡的。單位和符號填不填無所謂。然后注意看頁面下方,有個添加按鍵,點一下就行。

然后我們再給濕度數(shù)據(jù)建立一個數(shù)據(jù)流,數(shù)據(jù)流名稱是humi,頁面下方,點擊添加即可 。

成功添加以上兩個數(shù)據(jù)流后,我們可以在數(shù)據(jù)流列表中看到剛剛建立的兩個數(shù)據(jù)流,也就是溫度temp和濕度humi。數(shù)據(jù)流的名稱是構(gòu)建數(shù)據(jù)的關(guān)鍵信息,假設(shè)我們需要上傳的溫度數(shù)據(jù)是22.2,濕度數(shù)據(jù)是33.3,那么數(shù)據(jù)格式如下所示:

{"temp":22.2,"humi":33.3}

注意里面的temp和humi對應(yīng)數(shù)據(jù)流的名稱,一定不能寫錯了,寫錯了數(shù)據(jù)就找不到家了。我們換成16進制,簡化書寫,去掉0x的結(jié)果如下:

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

我們要構(gòu)建的是等級0的PUBLISH報文,方向是C->S,也就是發(fā)布數(shù)據(jù)到服務(wù)器, 首先固定報頭是0x30 ??,??是剩余長度,負載已經(jīng)構(gòu)建好了,等我們確定了可變報頭之后,再計算剩余長度。可變報頭是發(fā)布數(shù)據(jù)用的Topic,我們上傳數(shù)據(jù)時,需要使用的Topic是$dp,很簡單,就3個字節(jié),換成16進制,簡化書寫去掉0x的結(jié)果如下:

24 64 70

然后不要忘了再加上2個字節(jié)表示長度3,所以可變報頭最終結(jié)果如下,總共5個字節(jié):

00 03 24 64 70

我們再看一下剛剛構(gòu)建好的數(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報文中的負載結(jié)果,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)平臺服務(wù)器上傳數(shù)據(jù)的,等級0的PUBLISH報文就構(gòu)建好了。我們需要用網(wǎng)絡(luò)調(diào)試助手軟件,實際測試一下,一定要注意先發(fā)CONNECT報文之后,再發(fā)我們的PUBLISH報文,CONNECT報文在《中國移動OneNet物聯(lián)網(wǎng)平臺使用心得(2)MQTT協(xié)議CONNECT連接平臺》這篇文章中構(gòu)建好了,大家忘了的話,可以返回去看一下。

我們首先發(fā)送CONNECT報文,成功后,發(fā)送PUBLISH報文,因為是等級0,所以服務(wù)器不會有什么回復(fù),我們需要到后臺看一下,數(shù)據(jù)有沒有上傳到后臺。

產(chǎn)品后臺中,我們點擊設(shè)備列表,可以看到設(shè)備在線了,然后點擊紅圈中的數(shù)據(jù)流,查看數(shù)據(jù)。

我們看到22.2和33.3已經(jīng)上傳到后臺中相應(yīng)的數(shù)據(jù)流上了,說明我們等級0的PUBLISH報文正確。