MQTT協議之中國移動ONENET

oneNET 免費服務器。 MQTT服務器ip地址和端口 183.230.40.39:6002 

MQTT協議的14個命令

名字 流向 描述
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 斷開連接

首先需要申請服務器,建立一個產品,產品下申請兩個設備(需要記住產品ID,設備ID、鑑權信息)

app_col
客戶端ID(設備ID):aaaaa5188
用戶名(產品ID):bbbbb5
密碼(鑑權信息):cccccc


connect(1)連接服務器

10  ?? 
固定報頭 +長度
byte1  客戶端連接服務器
byte2  byte2後面所有字節數

00 04 
長度+可變報頭
byte1  長度MSB  00  固定
byte2  長度LSB    04  固定
byte3  M   4d
byte4  Q    51 
byte5  T     54 
byte6  T     54
byte7   4    版本
byte8   c2
user name flag  1  用戶名
password  flag   1  密碼
will retain        0  ?? 沒懂
will qos   0  ??沒懂
will flag   0      ??沒懂
clean session    1  服務器清除不保留
reserved  0

byte9         00      keep alive MSB   (秒爲單位)2min
byte10        78     keep alive LSB    (秒爲單位)2min


負載報頭  長度+客戶端id+長度+產品id+長度+密碼
app_col
aaaaa5188 轉ASCII(9個) a a a a a 35 31 38 38

bbbbb5 轉ASCII(6個)bbbbb 35
ccccc轉ASCII(6個)cccccc

10 25 00 04 4d 51 54 54 04 c2 00 78 00 09 a a a a a 35 31 38 38 00 06 bbbbb 35 00 06 cccccc

connack(2)服務器返回

20 02 01 00
byte1 服務器返回
byte2 長度
byte3  不適用離線保存數據
byte4  
00 連接接收
01 連接拒絕,協議不對
02 連接拒絕 客戶端標識符不對
03 連接拒絕,服務器不可用
04 連接拒絕,密碼不對
05 連接拒絕,未授權
disconnect(14)
固定報頭+長度
e0 00 
byte1 客戶端自行斷開服務器
byte2 命令後面無數據

ping(12)
固定報頭+長度
c0 00
byte1客服端發送心跳到服務器
byte2 命令後面無數據

pingrsp(13)
d0 00
byte1服務器返回
byte2 命令後無數據

subscribe(8)訂閱報文 


82 ??  00 01 
固定報頭+長度+報文標識符
byte1  訂閱某個主題
byte2  長度
byte3 報文標識符MSB  第1號報文
byte4 報文標識符LSB    第1號報文

長度+可變報文 +報文等級

主題:kfb_topic 轉ASCII (9個)6B 66 62 5F 74 6F 70 69 63
等級 0,1,2

發送數據 :82 0E 00 01 00 09 6B 66 62 5F 74 6F 70 69 63 00   1號報文,等級0
返回90 03 00 01 00

發送數據:82 0E 00 15 00 09 6B 66 62 5F 74 6F 70 69 63 00  21號報文,等級0
返回90 03 00 15 00


suback(9) 訂閱成功 服務器返回
90 03 00 15 00
90 03 00 01 00
byte1 服務器返回
byte2 長度
byte3  報文標識符MSB 
byte4 報文標識符LSB
byte5 等級0


nusubscribe(10)取消訂閱 主題:kfb_topic 
A2 0d 00 01 00 09 6B 66 62 5F 74 6F 70 69 63    1號報文,不需要等級
返回:B0 02 00 01

unsuback(11) 服務器返回
byte1 服務器返回命令
byte2 長度
byte3  報文標識符MSB 
byte4  報文標識符LSB

kfb_col
設備ID:ddddd5205
用戶名(產品ID):eeeee5
鑑權信息:ffffff


connect(1)
10  ?? 
固定報頭 +長度
byte1  客戶端連接服務器
byte2  byte2後面所有字節數

00 04 
長度+可變報頭
byte1  長度MSB  00  固定
byte2  長度LSB    04  固定
byte3  M   4d
byte4  Q    51 
byte5  T     54 
byte6  T     54
byte7   4    版本
byte8   c2
user name flag  1  用戶名
password  flag   1  密碼
will retain        0  ?? 沒懂
will qos   0  ??沒懂
will flag   0      ??沒懂
clean session    1  服務器清除不保留
reserved  0

byte9         00      keep alive MSB   (秒爲單位)2min
byte10        78     keep alive LSB    (秒爲單位)2min


負載報頭  長度+客戶端id+長度+產品id+長度+密碼
kfb_col
ddddd5205 轉ASCII(9個) ddddd35 32 30 35

eeeee5 轉ASCII(6個)eeeee 35
ffffff轉ASCII(6個)ffffff

10 25 00 04 4d 51 54 54 04 c2 00 78 00 09 ddddd35 32 30 35 00 06 eeeee 35 00 06 ffffff

subscribe(8)訂閱報文 
82 ??  00 01 
固定報頭+長度+報文標識符
byte1  訂閱某個主題
byte2  長度
byte3 報文標識符MSB  第1號報文
byte4 報文標識符LSB    第1號報文

長度+可變報文 +報文等級

主題:app_topic 轉ASCII (9個)61 70 70 5F 74 6F 70 69 63
等級 0,1,2


app主題
82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 00   訂閱app主題 1號報文,等級0
82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 01   訂閱app主題 1號報文,等級1
kfb主題
82 0E 00 01 00 09 6B 66 62 5F 74 6F 70 69 63 00   訂閱kfb主題 1號報文,等級0
82 0E 00 01 00 09 6B 66 62 5F 74 6F 70 69 63 01   訂閱kfb主題 1號報文,等級1


publish(3)發佈消息 等級0

30 ??
bit7-bit4  發佈命令  
bit3 dup 表示可能是重複發送的 早期消息
bit2-bit1 QoS等級
bit0 retain  保留消息

報文標識符  等級0 沒有

可變報文 +有效載荷


kfb發佈
30 0f 00 09 6B 66 62 5F 74 6F 70 69 63 31 32 33 34   kfb_topic發佈等級0 ,無報文標識符,數據1234

app發佈
30 0f 00 09 61 70 70 5F 74 6F 70 69 63 35 36 37 38   app_topic發佈等級0 ,無報文標識符,數據5678


publish(3)發佈消息 等級1 需要 報文標識符
kfb發佈
32 11 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33 34   kfb_topic發佈等級1 ,報文標識符 1號,數據1234
app發佈
32 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38   app_topic發佈等級1 ,報文標識符1號,數據5678

publish(3)發佈消息 等級2 需要 報文標識符
kfb發佈
34 11 00 09 6B 66 62 5F 74 6F 70 69 63 00 01 31 32 33 34   kfb_topic發佈等級2 ,報文標識符 1號,數據1234
app發佈
34 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38   app_topic發佈等級2 ,報文標識符1號,數據5678

puback(4) 等級1 返回
byte1 表示命令  返回等級1
byte2 表示長度
byte3-byte4  表示回覆報文標識符
40 02 00 01  等級1 回覆 表示簽收 

pubrec(5)等級2 返回
50 02 00 01

pubrel(6)等級2 再次詢問
62 02 00 01

pubcomp(7)等級2 返回
70 02 00 01

 

打開串口助手或者網絡助手,設置爲TCPClient,主機ip 183.230.40.39:6002 點擊連接後

app_col客戶端向服務器發送   10 25 00 04 4d 51 54 54 04 c2 00 78 00 09 a a a a a 35 31 38 38 00 06 bbbbb 35 00 06 cccccc

服務器返回 20 02 01 00

kfb_col客戶端向服務器發送    10 25 00 04 4d 51 54 54 04 c2 00 78 00 09 ddddd35 32 30 35 00 06 eeeee 35 00 06 ffffff

服務器返回 20 02 01 00

斷開連接   e0 00 

發送心跳  c0 00    服務器返回 d0 00

app_col 客戶端向kfb_col客戶端發消息。可以理解爲kfb_col是app_col的粉絲,kfb_col關注了app_col。app_col一旦需要發送消息給kfb_col,相當於app_col發佈一條消息由服務器推送給kfb_col。

kfb_col需要訂閱app_col,相當於kfb_col需要關注app_col

kfb_col客戶端訂閱app_col的主題app_topic(等級0)

kfb_col客戶端發送 82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 00   訂閱app主題 1號報文,等級0

服務器返回 90 03 00 01 00

訂閱成功

app_col客服端推送消息 

 30 0f 00 09 61 70 70 5F 74 6F 70 69 63 35 36 37 38   app_topic發佈等級0 ,無報文標識符,數據5678

kfb客戶端收到消息

30 0f 00 09 61 70 70 5F 74 6F 70 69 63 35 36 37 38

kfb_col客戶端訂閱app_col的主題app_topic(等級1)一次確認

kfb_col客戶端發送 82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 01   訂閱app主題 1號報文,等級1

服務器返回 90 03 00 01 01

訂閱成功

app_col客服端推送消息 

 32 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38   app_topic發佈等級1 ,報文標識符1號,數據5678

kfb客戶端收到消息

 32 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38

app_col 客戶端收到服務器返回  40 02 00 01

kfb_col客戶端訂閱app_col的主題app_topic(等級2)兩次確認

kfb_col客戶端發送 82 0E 00 01 00 09 61 70 70 5F 74 6F 70 69 63 02   訂閱app主題 1號報文,等級2

服務器返回 90 03 00 01 02

訂閱成功

app_col客服端推送消息 

 34 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38   app_topic發佈等級2 ,報文標識符1號,數據5678

app_col 客戶端收到服務器返回  50 02 00 01    第一次確認

app_col客戶端發送  62 02 00 01

app_col 客戶端收到服務器返回  70 02 00 01 第二次確認

kfb客戶端收到消息

 34 11 00 09 61 70 70 5F 74 6F 70 69 63 00 01 35 36 37 38

 

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