mqtt调试助手_阿里云物联网平台使用心得(28)MQTT协议服务等级1的PUBLISH报文

edbf2a05ec107cac0ec467a936ca6a3b.png

题目

大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖。超子今天紧接上文,给大家介绍一下PUBLISH 服务等级1的报文。

通过上一篇文章《阿里云物联网平台使用心得(27)MQTT协议服务等级0的PUBLISH报文》,我们了解到PUBLISH 服务等级1和等级0的报文主要有两点区别:

(1)固定报头中Bit1、Bit2和 Bit3不同

(2)等级1的可变报头多两个字节的报文标识符

至于负载,等级1和等级0是没有区别的。我们先看等级1的固定报头。

3b787170cf5d62f5a0dc8e74d800f79c.png

PUBLISH报文固定报头

上图是PUBLISH报文固定报头的格式,上一篇文章(27)中已经介绍过各个Bit位的功能,这里就不再赘述了。阿里云不支持保留功能所以Bit0是0。我们使用等级1,所以Bit2是0,Bit1是1。我们第一次发送,不是重发,所以Bit3是0,最后固定报头byte1的结果就是0x32。

等级1和等级0的可变报头之间的区别,就是等级1的可变报头多2个字节的报文标识符,其他的和等级0的一样,报文标识符就用0x00 0x03吧。所以在等级0的可变报头后面加上2个字节的报文标识符就是等级1的可变报头,简化后的16进制结果如下,总共长度是51个字节。

00 2F 2F 73 79 73 2F 61 31 32 64 54 49 72 6F 54 4A 43 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 00 03

等级0和1的负载没有任何区别,我们把要上传的温湿度的值换一下,不然后台看不出明显的区别。

{"params":{"CurrentHumidity":55.5,"CurrentTemperature":22.2}}

湿度换成了55.5,温度换成22.2,然后把它转换成16进制,简化去掉0x,结果如下 ,总长61个字节

7B 22 70 61 72 61 6D 73 22 3A 7B 22 43 75 72 72 65 6E 74 48 75 6D 69 64 69 74 79 22 3A 35 35 2E 35 2C 22 43 75 72 72 65 6E 74 54 65 6D 70 65 72 61 74 75 72 65 22 3A 32 32 2E 32 7D 7D

接下来计算剩余长度,等于可变+负载,51+61=112,比等级0的多2字节报文标识符。112/128=0,无需进位,剩余长度1个字节搞定,0x70。最终等级1的PUBLISH报文固定+可变+负载,简化16进制,去掉0x,结果如下

32 70 00 2F 2F 73 79 73 2F 61 31 32 64 54 49 72 6F 54 4A 43 2F 44 30 30 31 2F 74 68 69 6E 67 2F 65 76 65 6E 74 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 00 03 7B 22 70 61 72 61 6D 73 22 3A 7B 22 43 75 72 72 65 6E 74 48 75 6D 69 64 69 74 79 22 3A 35 35 2E 35 2C 22 43 75 72 72 65 6E 74 54 65 6D 70 65 72 61 74 75 72 65 22 3A 32 32 2E 32 7D 7D

然后我们实测一下,打开网络调试助手,先建立TCP连接,然后先发送CONNECT报文,然后发送上面的等级1的PUBLISH报文。看下图结果。

e557c37eba329d293698edc29c270450.png

实际测试等级1的PUBLISH报文

发送等级1的PUBLISH报文后,阿里云回复了40 02 00 03四个字节的数据,我们已经知道,等级1需要服务器确认签收我们的数据,所以这4个字节就是服务器签收数据的回复,也就是超子下次要给大家讲的PUBACK报文。我们打开设备详情页面下的运行状态。

8176f6cf5302fad1a6dd769516dbe9c1.png

设备详情页面查看数据

湿度是55.5,温度是22.2,数据正确,说明我们上面的操作没有问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值