MQTT协议-发布消息(服务器向客户端发送)

MQTT协议-发布消息(服务器向客户端发送)

发布消息报文组成:https://blog.csdn.net/weixin_46251230/article/details/129414158

在了解了发布信息的PUBLISH报文后,就可以分析出阿里云服务器向本地客户端发送的报文数据了

实验前需要在阿里云创建产品和设备,并创建简单的温度和湿度物模型:https://blog.csdn.net/weixin_46251230/article/details/128996719

1、用CONNECT报文连接阿里云

MQTT协议-发布消息(服务器向客户端发送)_第1张图片

查看设备是否显示在线

在这里插入图片描述

2、订阅物模型主题

选择带有订阅权限的Topic类

MQTT协议-发布消息(服务器向客户端发送)_第2张图片

将${deviceName}用自己的设备名称代替后,转为十六进制,计算出字节长度,在字节最后需要加上服务质量等级Qos,这里设置为00,不能忘记

MQTT协议-发布消息(服务器向客户端发送)_第3张图片

加上固定报头和可变报头,组合成订阅主题报文

MQTT协议-发布消息(服务器向客户端发送)_第4张图片

发送报文,收到阿里云应答,表示订阅成功

MQTT协议-发布消息(服务器向客户端发送)_第5张图片

3、阿里云物模型发送数据

阿里云平台里选择在线调试,然后设置温度和湿度值,最后点击设置,服务器便下发数据到客户端

MQTT协议-发布消息(服务器向客户端发送)_第6张图片

在网络调试助手可以看到阿里云发送的报文,将报文复制到文本文档进行分析

MQTT协议-发布消息(服务器向客户端发送)_第7张图片

4、分析报文

报文的首字节是30,符合发布消息报文的固定报头字节,后面一个字节是AB,最高位为1,因此还有一个字节01来表示剩余长度,低位在前,高位在后,可以计算出长度为171,所以可以得到固定报头为30 AB 01

在这里插入图片描述

可变报头的首两个字节表示报头的长度,所以00 34是表示长度的,0x34转为十进制为52,因此就从34后开始数52个字节作为可变报头

将这52个字节转为ASCII可得到阿里云物模型订阅权限的Topic类:/sys/i6deo513xT1/Device01/thing/service/property/set

与上面发送的订阅主题报文的一致,说明分析正确

MQTT协议-发布消息(服务器向客户端发送)_第8张图片

剩下的字节就全部是有效载荷,该部分首两个字节不是代表长度的,是真实数据,将其全部转为ASCII码便可得到JSON格式的数据,可看到温度值为20,湿度值为66,与一开始在阿里云平台上设置的一样,说明服务器向客户端发送的数据正确。

MQTT协议-发布消息(服务器向客户端发送)_第9张图片

你可能感兴趣的:(MQTT,阿里云,MQTT协议)