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


出品 21ic論壇 小葉三千

網站:bbs.21ic.com

由於項目上用到了中移雲OneNet平台,現在對OneNet也算是比較瞭解,給大家分享一下連接OneNet的MQTT的方法(TCP層)。

OneNet上有兩種MQTT協議,一種是多協議裏面的MQTT(舊版),一種是MQTT物聯網套件(新版)。現在平台主推MQTT新版的,也就是MQTTS協議,協議層上面基本沒有變化,都是基於MQTT標準協議來的,但是一些參數有了很大的變化。

先説一下MQTT的連接的協議,一個MQTT數據包由:固定頭、可變頭、消息體三部分構成。固定報文頭就是固定的參數,具體代表什麼意思網上有很多,就不説了。可變報文頭是一些協議版本啊,標識等等,用不到的話一般也當作固定的就行。消息體就是一個參數的長度,後面再跟上參數的內容,例如:02(消息體長度) 31 31(2個長度的消息體”1””1”)等等,後續有具體的內容賦值。

   首先,先在OneNet上面創建MQTT物聯網套件產品,之後再產品裏面添加一個設備。

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

平台MQTTS規定的參數是有3個,分別為設備名稱、產品ID、token密鑰,設備名稱和產品ID就是你創建產品的ID,和設備的名稱。Token的話就需要計算一下了,使用附件裏的小程序。

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

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

國際ISO 8601規定的。可以上網找一些在線轉化的工具。填寫你想鑑權的有效時間,比如現在是2021-09-28 21:37:25,你Et寫個2021-09-28 22:37:25,那麼到22:37:25的時候就過期了,授權時間過了。

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

計算unix時間網址://tool.chinaz.com/Tools/unixtime.aspx

   

Key:設備的access_key,在設備的詳情頁中找到。

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

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

將計算完成的Token複製保存,等下需要用到。

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

首先要先了解一下MQTT的報文結構:(詳細的解釋直接百度吧,這裏只是我需要填寫的報文)

0x10  -固定

0x91  -整個報文的長度145

0x01  -貌似是上一個值的進位,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高位 (設備的名稱長度:2)

0x30  -Client ID:0

0x41  -Client ID:A (設備的名稱:0A,名稱根據自己的來,對應上面的長度也要改)

0x00  -User Name Length低位

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

.......  -User Name  (產品ID:378414,也是根據自己的寫)

0x00  -Password Length低位

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

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

到這裏就報文就解析結束了,將上面的內容整理成十六進制的值,填寫到網絡助手中

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

TCP建立連接後,輸入內容,點擊發送,就可以看到有返回ACK的值是20 02 00 00,説明發送的內容正確,MQTT平台返回接入成功,之後再看看我們OneNet平台的設備,顯示“在線”,接入成功!

之後我們還可以使用Wireshark軟件,進行原始報文的驗證,或者監控。打開軟件,選擇監控的網絡通道。

在這裏輸入mqtt,進行網絡報文過濾,這裏只讓其顯示MQTT的報文。

之後我們在網絡助手裏發送剛才的內容,重新發一次,就可以看到Wireshark出現了MQTT的報文,分別是發送的和接收到的ACK。

  

雙擊點擊報文還可以具體分析報文的結構和內容。   

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

大家根據TCP報文格式的MQTT報文,可以自己開發上位機去通信了。

換一批

延伸閲讀

[芯鮮事] 工信部:我國累計開通5G基站96.1萬個,持續領跑全球!

工信部:我國累計開通5G基站96.1萬個,持續領跑全球!

7月16日,據工信部消息,我國已建成全球規模最大5G獨立組網網絡,累計開通5G基站96.1萬個。截至今年6月底,覆蓋全國所有地級以上城市,5G終端連接數約3.65億户,千兆寬帶用户達1362萬户。 工信部表示,低時延、高可靠、廣覆...

關鍵字: 5G 網絡 新基建

[網絡層] 5G基站的高功耗問題引起了很多人的關注

5G基站的高功耗問題引起了很多人的關注

某企業老闆在內部講話中説了實話,他婉轉的説一個新技術都需要很漫長的過程,大約需要10年左右時間才能發展成熟,5G的發展也需要一個過程,這樣的意思應該就是説當前的5G技術尚未足夠成熟。 關於5G建設的爭議就沒停過,“無線輻射...

關鍵字: 中興 5G基站 網絡

[網絡層] 華為的5G讓西方國家坐立不安設法打壓

華為的5G讓西方國家坐立不安設法打壓

我們的互聯網也從最早的圖文時代,進化到了短視頻以及直播時代。但是在5G時代之前,無論是2G,還是3G、4G,我們都在追隨,每年要交給諸如高通等通信專利公司一大筆專利費。 像是現在很多的安卓bbgoex都是使用高通的芯片,比如小米一...

關鍵字: 華為 5G 網絡

[21ic電子網] 工程師項目經驗:網絡調試助手-TCP方式連接實踐

工程師項目經驗:網絡調試助手-TCP方式連接實踐

出品 21ic論壇 小葉三千網站:bbs.21ic.com由於項目上用到了中移雲OneNet平台,現在對OneNet也算是比較瞭解,給大家分享一下連接OneNet的MQTT的方法(TCP層)。OneNet上有兩種MQTT協議,一種是多協議裏...

關鍵字: OneNet 網絡

[ZLG致遠電子] 如何實現風電機組的遠程管理和高效運維?

如何實現風電機組的遠程管理和高效運維?

風電行業作為可再生能源領域中最具前景的發電方式之一,在全球範圍內分佈廣泛。但是,在風機發生故障時,卻總是措手不及。本文將提供可行的方案,能夠為解決故障帶來便利。 風電行業現狀概述 隨着“碳中和”和“碳達峯”的熱度瘋...

關鍵字: 風電行業 網絡

21ic電子網

1493 篇文章

關注

發佈文章

技術子站

關閉