1949啦网--小小 痛苦,是因为能力和欲望不匹配造成的

MQTT协议之中国移动ONENET

oneNET 免费服务器。 MQTT服务器ip地址和端口 183.230.40.39:6002 

MQTT协议的14个命令

名字流向描述

CONNECT1C->S客户端请求与服务端建立连接

CONNACK2S->C服务端确认连接建立

PUBLISH3CóS发布消息

PUBACK4CóS收到发布消息确认

PUBREC5CóS发布消息收到

PUBREL6CóS发布消息释放

PUBCOMP7CóS发布消息完成

SUBSCRIBE8C->S订阅请求

SUBACK9S->C订阅确认

UNSUBSCRIBE10C->S取消订阅

UNSUBACK11S->C取消订阅确认

PING12C->S客户端发送PING(连接保活)命令

PINGRSP13S->CPING命令回复

DISCONNECT14C->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客户端收到消息

版权声明:本文为期权记的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://www.qiquanji.com

微信扫码关注

更新实时通知

作者:xiao 分类:软件笔记 浏览: