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

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

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

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

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

然后我們?cè)俳o濕度數(shù)據(jù)建立一個(gè)數(shù)據(jù)流,數(shù)據(jù)流名稱是humi,頁(yè)面下方,點(diǎn)擊添加即可 。

成功添加以上兩個(gè)數(shù)據(jù)流后,我們可以在數(shù)據(jù)流列表中看到剛剛建立的兩個(gè)數(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對(duì)應(yīng)數(shù)據(jù)流的名稱,一定不能寫錯(cuò)了,寫錯(cuò)了數(shù)據(jù)就找不到家了。我們換成16進(jìn)制,簡(jiǎn)化書(shū)寫,去掉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)建的是等級(jí)0的PUBLISH報(bào)文,方向是C->S,也就是發(fā)布數(shù)據(jù)到服務(wù)器, 首先固定報(bào)頭是0x30 ??,??是剩余長(zhǎng)度,負(fù)載已經(jīng)構(gòu)建好了,等我們確定了可變報(bào)頭之后,再計(jì)算剩余長(zhǎng)度??勺儓?bào)頭是發(fā)布數(shù)據(jù)用的Topic,我們上傳數(shù)據(jù)時(shí),需要使用的Topic是$dp,很簡(jiǎn)單,就3個(gè)字節(jié),換成16進(jìn)制,簡(jiǎn)化書(shū)寫去掉0x的結(jié)果如下:

24 64 70

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

00 03 24 64 70

我們?cè)倏匆幌聞倓倶?gòu)建好的數(shù)據(jù){"temp":22.2,"humi":33.3},長(zhǎng)度總共是25個(gè)字節(jié),OneNet對(duì)于上傳的數(shù)據(jù)有自己的要求,就是數(shù)據(jù)前邊必須多加3個(gè)字節(jié),這個(gè)要求不是MQTT標(biāo)準(zhǔn)協(xié)議要求的,是OneNet自己的要求 。第一個(gè)字節(jié)固定是0x03,然后再加上兩個(gè)字節(jié),表示數(shù)據(jù)的長(zhǎng)度,也就是表示25,16進(jìn)制簡(jiǎn)化書(shū)寫就是00 19,最終等級(jí)0的PUBLISH報(bào)文中的負(fù)載結(jié)果,16進(jìn)制,簡(jiǎn)化書(shū)寫如下,長(zhǎng)度總計(jì)是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

可變報(bào)頭和負(fù)載都確定好了,那么剩余長(zhǎng)度=可變+負(fù)載=5+28=33,一個(gè)字節(jié)就行,16進(jìn)制是0x21,那么固定報(bào)頭就是0x30 0x21,然后我們把固定,可變和負(fù)載,3個(gè)部分連接起來(lái),16進(jìn)制,簡(jiǎn)化書(shū)寫,去掉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

到此整個(gè)往OneNet物聯(lián)網(wǎng)平臺(tái)服務(wù)器上傳數(shù)據(jù)的,等級(jí)0的PUBLISH報(bào)文就構(gòu)建好了。我們需要用網(wǎng)絡(luò)調(diào)試助手軟件,實(shí)際測(cè)試一下,一定要注意先發(fā)CONNECT報(bào)文之后,再發(fā)我們的PUBLISH報(bào)文,CONNECT報(bào)文在《中國(guó)移動(dòng)OneNet物聯(lián)網(wǎng)平臺(tái)使用心得(2)MQTT協(xié)議CONNECT連接平臺(tái)》這篇文章中構(gòu)建好了,大家忘了的話,可以返回去看一下。

我們首先發(fā)送CONNECT報(bào)文,成功后,發(fā)送PUBLISH報(bào)文,因?yàn)槭堑燃?jí)0,所以服務(wù)器不會(huì)有什么回復(fù),我們需要到后臺(tái)看一下,數(shù)據(jù)有沒(méi)有上傳到后臺(tái)。

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

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