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版权协议,转载请附上原文出处链接及本声明。
微信扫码关注
更新实时通知