MQTT連接ONENET——登錄

ONENET:MQTT服務器和端口號:183.230.40.39 6002
在ONENET平臺創建一個多協議接入平臺的設備
在這裏插入圖片描述
接入需要三個參數:
設備ID:602906218
產品ID:352202
APIKEY:KFBKEY
其中APIKEY是自定義的
在這裏插入圖片描述
在這裏插入圖片描述
新創建的設備是可以自定義的,這裏以KFBKEY爲例

使用網絡調試助手進行調試:(連接MQTT的服務器和端口)
在這裏插入圖片描述
MQTT的數據報包括三部分:固定頭+可變頭+負載(也就是數據)
在這裏插入圖片描述

固定頭:
在這裏插入圖片描述
第一個字節的值是訪問類型:
該版本支持的所有類型:
名字 值 流向 描述
CONNECT    1 C->S 客戶端請求與服務端建立連接
CONNACK    2 S->C 服務端確認連接建立
PUBLISH       3 C<->S 發佈消息
PUBACK       4 C<->S 收到發佈消息確認
PUBREC       5 C<->S 發佈消息收到
PUBREL       6 C<->S 發佈消息釋放
PUBCOMP    7 C<->S 發佈消息完成
SUBSCRIBE  8 C->S 訂閱請求
SUBACK    9 S->C 訂閱確認
UNSUBSCRIBE    10 C->S 取消訂閱
UNSUBACK    11 S->C 取消訂閱確認
PING    12 C->S 客戶端發送PING(連接保活)命令
PINGRSP    13 S->C PING命令回覆
DISCONNECT    14 C->S 斷開連接
第2-5個字節是指這個數據報的長度(除固定頭):也即是可變頭+負載
先不設置,等後面設置完在設置
那麼現在連接服務器的固定頭即爲:0x10 ??(待定)
可變頭:
在這裏插入圖片描述
第1、2個字節值固定:0x00 0x04
3-6:爲“MQTT”也就是:0x4D 0x51 0x54 0x54
第7個字節值固定:0x04(表中應該是錯了,後面對第7個字節描述說:版本必須設置爲4,平臺只支持版本v 3.1.1,不支持更老的版本。使用第三方客戶端時需要注意選擇正確的版本。)
第8個字節:(我設置爲0xC2)
Will flag與Willretainflag/WillQosFlag
Will flag爲0時,WillQosFlag和WillRetainFlag必須爲0,Will Flag爲1時,WillQosFlag只能爲0、1、2。
注:1.當該設備下一次正常上線後,服務器會清除之前的will 消息(包括retain消息)。
2.如果設備上線時設置了Will Topic和msg,且將WillRetainFlag設置爲1,只有設備異常斷開後,服務器纔會將該Will msg分發給新的Will Topic的訂閱者,且Qos級別以訂閱的Request qos級別爲準。
3.如果設備上線時設置了Will Topic和msg,且將WillRetainFlag設置爲0,服務器不會存儲該消息,當設備異常斷開後會將該Will msg以設備設置的WillQosFlag的Qos級別進行分發。
CleanSessionFlag
若客戶端將clean session標誌位設置爲0,當其斷開後,平臺將會保存session,session需保持的內容包含:
 客戶端訂閱的topic列表。
 還未完成確認的Qos1、Qos2級別的publish消息

客戶端保存session的內容包含:
 已經發送到服務端的但還沒有收到確認的Qos1、Qos2消息列表。
 待發送的Qos0列表。
若客戶端將clean session標誌位設置爲1,當其斷開後,平臺會清除設備的訂閱列表及未完成確認的Qos1、Qos2的publish消息。
Reserve
保留位,置0。
第9-10個字節:(時間)0x00 0x78
這裏設置120秒也就是0x78

負載:
設置與鑑權相關的字段包含client id,username和password,支持鑑權方式。

方式1:設備ID、項目ID、auth_info
字段設置 消息示例
client_id設置爲平臺創建設備時的設備id
username設置爲“項目ID”
password設置爲“鑑權信息(auth_info)” client_id=”123”
username=”433223”
password=”註冊的鑑權信息”
各字段說明如下:
鑑權信息(auth_info):在平臺申請設備時填寫設備的auth_info屬性(數字+字母的字符串),該屬性需要產品內具備唯一性;

方式2:設備ID + APIKey(項目ID也需要填寫)
字段設置 消息示例
client_id設置爲平臺創建設備時的設備id
username設置爲“項目ID”
password設置爲“鑑權信息(auth_info)” client_id=”123”
username=”433223”
password=Api Key

項目ID:在平臺添加項目時平臺生成的ID
APIKey:在平臺上創建產品時生成的APIKey.

這裏採用方式2,我嫌方式1麻煩,但是方式1安全

設備ID:602906218
產品ID:352202
APIKEY:KFBKEY
利用網絡調試助手將字符串轉成十六進制:
在這裏插入圖片描述
然後點HEX
在這裏插入圖片描述
602906218=0x36 0x30 0x32 0x39 0x30 0x36 0x32 0x31 0x38
352202=0x33 0x35 0x32 0x32 0x30 0x32
KFBKEY=0x4B 0x46 0x42 0x4B 0x45 0x59

在這裏插入圖片描述
格式爲:
2字節字串長度 + utf8字串
602906218也即是:
0x00 0x09 0x36 0x30 0x32 0x39 0x30 0x36 0x32 0x31 0x38
< 長度 > < 數據 >
以此類推:
負載部分爲:
00 09 36 30 32 39 30 36 32 31 38 00 06 33 35 32 32 30 32 00 06 4B 46 42 4B 45 59
|------------------------------------------- | |-------------------------------| |-------------------------------|

/*綜上所述
固定頭:10 ??
可變頭:00 04 4D 51 54 54 04 C2 00 78
負載:00 09 36 30 32 39 30 36 32 31 38 00 06 33 35 32 32 30 32 00 06 4B 46 42 4B 45 59
*/
/*??=可變頭長度+負載長度=0x25*/
//於是,用於連接服務器所發送的數據報爲:
10 25 00 04 4D 51 54 54 04 C2 00 78 00 09 36 30 32 39 30 36 32 31 38 00 06 33 35 32 32 30 32 00 06 4B 46 42 4B 45 59

在這裏插入圖片描述

服務器返回:
20 02 01 00
20:服務器返回類型編號
在這裏插入圖片描述
02:長度
01:session信息在服務器已保持
在這裏插入圖片描述
00:成功
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章