當(dāng)前位置:首頁 > 公眾號精選 > 21ic電子網(wǎng)
[導(dǎo)讀]給大家分享一下連接OneNet的MQTT的方法(TCP層)。


出品?21ic論壇 小葉三千

網(wǎng)站:bbs.21ic.com

由于項目上用到了中移云OneNet平臺,現(xiàn)在對OneNet也算是比較了解,給大家分享一下連接OneNet的MQTT的方法(TCP層)。

OneNet上有兩種MQTT協(xié)議,一種是多協(xié)議里面的MQTT(舊版),一種是MQTT物聯(lián)網(wǎng)套件(新版)?,F(xiàn)在平臺主推MQTT新版的,也就是MQTTS協(xié)議,協(xié)議層上面基本沒有變化,都是基于MQTT標(biāo)準(zhǔn)協(xié)議來的,但是一些參數(shù)有了很大的變化。

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

先說一下MQTT的連接的協(xié)議,一個MQTT數(shù)據(jù)包由:固定頭、可變頭、消息體三部分構(gòu)成。固定報文頭就是固定的參數(shù),具體代表什么意思網(wǎng)上有很多,就不說了。可變報文頭是一些協(xié)議版本啊,標(biāo)識等等,用不到的話一般也當(dāng)作固定的就行。消息體就是一個參數(shù)的長度,后面再跟上參數(shù)的內(nèi)容,例如:02(消息體長度) 31 31(2個長度的消息體”1””1”)等等,后續(xù)有具體的內(nèi)容賦值。

? ?首先,先在OneNet上面創(chuàng)建MQTT物聯(lián)網(wǎng)套件產(chǎn)品,之后再產(chǎn)品里面添加一個設(shè)備。

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

? ??下載一個網(wǎng)絡(luò)調(diào)試助手,我用的是NetAssist.exe,附件有,大家可以去下載。選擇TCP客戶端,填寫好OneNet平臺MQTTS的IP地址:183.230.40.96,端口號:1883 ?(此IP和端口號為不加密的,加密的為183.230.40.16 ?::8883)OK,接下來需要發(fā)連接的報文了。

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

平臺MQTTS規(guī)定的參數(shù)是有3個,分別為設(shè)備名稱、產(chǎn)品ID、token密鑰,設(shè)備名稱和產(chǎn)品ID就是你創(chuàng)建產(chǎn)品的ID,和設(shè)備的名稱。Token的話就需要計算一下了,使用附件里的小程序。

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

小程序計算token,也需要3個參數(shù)。Res:設(shè)備名稱。Et:unix時間。Key:設(shè)備的access_key。

設(shè)備名稱就是填寫你對應(yīng)的設(shè)備名稱即可。Et大概講一下,unix時間,就是從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。

國際ISO 8601規(guī)定的??梢陨暇W(wǎng)找一些在線轉(zhuǎn)化的工具。填寫你想鑒權(quán)的有效時間,比如現(xiàn)在是2021-09-28 21:37:25,你Et寫個2021-09-28 22:37:25,那么到22:37:25的時候就過期了,授權(quán)時間過了。

你想授權(quán)連接多長時間就寫到多長時間。不過要注意的一點是:32位的變量只能到2038年,64位的系統(tǒng)就不存在這個問題了,需要注意一下。

計算unix時間網(wǎng)址:https://tool.chinaz.com/Tools/unixtime.aspx

???工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

Key:設(shè)備的access_key,在設(shè)備的詳情頁中找到。

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

將這3個參數(shù),對應(yīng)填寫到小程序里面,method選擇sha1(別的也行吧,沒試過),version:填寫2018-10-31(這個是固定的,不用管它),這樣點擊Generate就可以生成出來計算好的token了。

? res:products/378414/devices/0A(378417是產(chǎn)品ID,0A是設(shè)備的名稱)? Et:1625445017(2021-07-05 08:30:17 Unix時間)? key:L2o5bW8ic2A7ITBEVTJlW3RITiteSl1ic3h9Um8mbSE=(設(shè)備的Key)

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

將計算完成的Token復(fù)制保存,等下需要用到。

這個算法很簡單,大家有興趣的可以按照官網(wǎng)的計算方法自己寫程序算一下。我這里使用C 已經(jīng)可以算出來了。Token計算完成后,就需要填寫MQTT報文了,我們這里使用TCP發(fā)送。打開網(wǎng)絡(luò)助手軟件。

首先要先了解一下MQTT的報文結(jié)構(gòu):(詳細(xì)的解釋直接百度吧,這里只是我需要填寫的報文)

0x10??-固定

0x91??-整個報文的長度145

0x01??-貌似是上一個值的進(jìn)位,0x91超過了7F,這里就是1,如果沒有就是0

0x00??-固定 “MQTT“的長度低位

0x04??-固定 “MQTT“的長度高位0x0004

0x4d??-’M’

0x51??-’Q’

0x54??-’T’

0x54??-’T’

0x04??-MQTT的版本04版本

0xC2??-QoS level 固定就行

0x00??-Keep Alive時間低位

0x3C??-Keep Alive時間高位0x003C??(60秒)

0x00??-Client ID Length低位

0x02 ?-Client ID Length高位 (設(shè)備的名稱長度:2)

0x30??-Client ID:0

0x41 ?-Client ID:A (設(shè)備的名稱:0A,名稱根據(jù)自己的來,對應(yīng)上面的長度也要改)

0x00??-User Name Length低位

0x06 ?-User Name Length高位 (產(chǎn)品ID的長度:6)

....... ?-User Name ?(產(chǎn)品ID:378414,也是根據(jù)自己的寫)

0x00??-Password Length低位

0x79 ?-Password Length高位 (Token的長度:121,也是根據(jù)自己的長度寫)

.......??-Password??(Token的具體十六進(jìn)制值填寫,根據(jù)自己的Token填寫)

到這里就報文就解析結(jié)束了,將上面的內(nèi)容整理成十六進(jìn)制的值,填寫到網(wǎng)絡(luò)助手中

之前遇到的一個問題,就是報文中的第3位的“0x01”,我填寫的是0x00,但是有的Token就可以正常連接,有的Token卻不可以正常連接。后來找到問題,Token有的很長,這一位就會變成0x01,應(yīng)該是長度有進(jìn)位吧,大家一定要注意。

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

TCP建立連接后,輸入內(nèi)容,點擊發(fā)送,就可以看到有返回ACK的值是20 02 00 00,說明發(fā)送的內(nèi)容正確,MQTT平臺返回接入成功,之后再看看我們OneNet平臺的設(shè)備,顯示“在線”,接入成功!

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

之后我們還可以使用Wireshark軟件,進(jìn)行原始報文的驗證,或者監(jiān)控。打開軟件,選擇監(jiān)控的網(wǎng)絡(luò)通道。

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

在這里輸入mqtt,進(jìn)行網(wǎng)絡(luò)報文過濾,這里只讓其顯示MQTT的報文。

工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

之后我們在網(wǎng)絡(luò)助手里發(fā)送剛才的內(nèi)容,重新發(fā)一次,就可以看到Wireshark出現(xiàn)了MQTT的報文,分別是發(fā)送的和接收到的ACK。

??工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

雙擊點擊報文還可以具體分析報文的結(jié)構(gòu)和內(nèi)容。? ?工程師項目經(jīng)驗:網(wǎng)絡(luò)調(diào)試助手-TCP方式連接實踐

附件附上計算Token的小工具(點擊閱讀原文,進(jìn)入原貼下載),大家也可以根據(jù)官方的文檔的自己計算。

大家根據(jù)TCP報文格式的MQTT報文,可以自己開發(fā)上位機(jī)去通信了。

21ic電子網(wǎng)

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉