基于阿里云的MQTT协议入门三:CONNECT报文

在学习本章内容之前,需要记录一下内容
ProductKey
DeviceName
DeviceSecret
内容如下
在这里插入图片描述

从MQTT控制报文的结构里我们可以看出,CONNECT的数据是从客户端到服务器的,描述为客户端请求连接服务器
格式为:固定报头+可变报头
可变报头又包含 协议名,协议级别,连接标志,清理会话,遗嘱标志,遗嘱QoS,遗嘱保留,用户名标志,密码标志和连接时间

固定报头为 0x10+data len
在这里插入图片描述
其中10表示为CONNECT
data len 为后面跟的数据的总长
后面跟的数据为可变报文

协议名:
协议名的报文如下

说明
协议名
byte 1长度MSB(0)
byte 2长度LSB(4)
byte 3‘M’
byte 4‘Q’
byte 5‘T’
byte 6‘T’

转化为16进制为 00 04 4D 51 54 54
协议级别为4
在这里插入图片描述
转化为16进制为 04
连接标志位如下
在这里插入图片描述
这里我们发送的数据包内附带的有用户名,密码以及清除会话
转换为16进制为C2
后面跟的数据为心跳时间(超出该时间后,如果客户端仍没有数据给服务器,那么服务器将会把客户端踢出,俗称保活时间)我们这里设置100秒
转换为16进制则为 00 64
因为上面我们选择了用户名及密码和清除会话,那么后面跟的消息就为用户的用户名及密码和会话标志
格式如下
在这里插入图片描述
客户端ID如下:
~|securemode=3,signmethod=hmacsha1|
(将~替换为设备的名称)
我们的设备名称为Test001,则就是
Test001|securemode=3,signmethod=hmacsha1|
转换为16进制则为
00 29 54 65 73 74 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C
其中 00 29 为该字符串的长度
用户名的规则如下:
~&#
(~为设备名称,#为productKey)
替换后的内容如下:
Test001&a1gmk6tYAWS
转换为16进制如下:
00 13 54 65 73 74 30 30 31 26 61 31 67 6D 6B 36 74 59 41 57 53
其中 00 13 为该字符串的长度
密码是用DeviceSecret做为秘钥对clientIddeviceNameproductKey#进行hmacsha1加密后的结果
其中*为设备名称,#为ProductKey,注意进行替换
替换后的结果为
clientIdTest001deviceNameTest001productKeya1gmk6tYAWS
进行在线加密
点击hmacsha1,在密钥栏里输入DeviceSecret,复制计算后的结果
如下
在这里插入图片描述
将8f954e8b8edf4c07f733192b888fa079890f28e4转化为16进制
00 28 38 66 39 35 34 65 38 62 38 65 64 66 34 63 30 37 66 37 33 33 31 39 32 62 38 38 38 66 61 30 37 39 38 39 30 66 32 38 65 34
其中 00 28 为字符串的长度
整理后如下
10 ?? 00 04 4D 51 54 54 04 C2 00 64
00 29 54 65 73 74 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C

00 13 54 65 73 74 30 30 31 26 61 31 67 6D 6B 36 74 59 41 57 53

00 28 38 66 39 35 34 65 38 62 38 65 64 66 34 63 30 37 66 37 33 33 31 39 32 62 38 38 38 66 61 30 37 39 38 39 30 66 32 38 65 34
在文中的最前面提到过固定报头 10 +data len,??表示了后面跟的数据的总长度,计算后为0x74
那么我们要发送的数据就是为
10 74 00 04 4D 51 54 54 04 C2 00 64 00 29 54 65 73 74 30 30 31 7C 73 65 63 75 72 65 6D 6F 64 65 3D 33 2C 73 69 67 6E 6D 65 74 68 6F 64 3D 68 6D 61 63 73 68 61 31 7C 00 13 54 65 73 74 30 30 31 26 61 31 67 6D 6B 36 74 59 41 57 53 00 28 38 66 39 35 34 65 38 62 38 65 64 66 34 63 30 37 66 37 33 33 31 39 32 62 38 38 38 66 61 30 37 39 38 39 30 66 32 38 65 34
将数据复制到网络调试助手,选择16进制发送
IP地址为~.iot-as-mqtt.cn-shanghai.aliyuncs.com
将~替换为ProductKey
端口号为1883
点击连接,发送数据,服务器返回数据如下
在这里插入图片描述
20 02 00 00
代表连接完成
倘若内容不对,则会返回失败的数据,
内容如下

返回码相应
00x00 连接已接受
10x01 连接已拒绝,不支持协议版本
20x02 连接已拒绝,不合格的客户端标识
30x03 连接已拒绝,服务端不可用
40x04 连接已拒绝,无效的用户名或密码
50x05 连接已拒绝,未授权
6-255保留

补充:
确认连接请求
固定报头为
在这里插入图片描述
因此,服务器的答复为20 02 00 00

如有疑问或错误和意见,请及时指出

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于阿里云MQTT协议的4G远程抄表设计与实现,可以从以下几个方面进行阐述。 首先,远程抄表系统的设计需要考虑硬件设备和软件平台两个方面。硬件方面,可以选择支持GSM/4G网络通信的模块,通过串口与MCU或单片机进行连接,实现抄表数据的采集和传输。软件方面,可以利用阿里云提供的MQTT协议进行抄表数据的实时传输和远程监控。 其次,针对远程抄表数据传输的安全性和稳定性,可以采取一些措施。比如,将数据采集后进行加密传输,确保数据传输的安全性;同时,设置数据传输的质量保证机制,如设置重传机制和数据完整性校验,确保数据传输的稳定性。 另外,为了实现远程监控和管理,可以设计一个云平台,用于接收和存储抄表数据,并提供实时的数据展示和监控功能。云平台可以基于阿里云的服务,搭建一个具有良好的扩展性和稳定性的系统,实现多用户同时进行远程抄表监控和管理。 最后,对于远程抄表系统的实现,还需要考虑系统的可靠性和可维护性。例如,对于硬件设备的选取,除了支持4G通信的模块外,还需要选用具有高稳定性和可靠性的设备。对于软件平台的开发,可以采用模块化的设计思路,方便后续的维护和升级。 总之,基于阿里云MQTT协议的4G远程抄表系统设计与实现需要综合考虑硬件和软件两个方面,确保数据的安全性、稳定性和实时性,并在云平台上实现数据的监控和管理,提升系统的可靠性和可维护性。 ### 回答2: 基于阿里云MQTT协议的4G远程抄表设计与实现可以分为以下几个步骤: 首先,设计和选择合适的硬件设备。远程抄表系统需要有一套完整的硬件设备,包括4G模块、传感器、电池或电源管理模块等。选择适合的硬件设备是确保系统正常运行的重要一步。 其次,搭建阿里云MQTT服务器。阿里云提供了MQTT协议的支持,我们可以在阿里云控制台上创建一个MQTT实例,并获取连接信息,包括服务地址、端口号、用户名、密码等。 然后,编写嵌入式软件。根据硬件设备的要求,选择合适的嵌入式开发平台,如Arduino、树莓派等,编写相应的软件代码。代码中需要包括MQTT连接和数据传输的相关功能,如订阅与发布主题,数据的序列化与反序列化等。 接下来,设计数据传输格式。为了能够正常传输数据到阿里云MQTT服务器,需要设计并定义一种合适的数据传输格式,如JSON或XML等。该数据传输格式应该能够满足数据的同步传输和解析需求。 最后,实现远程抄表功能。通过硬件设备采集传感器获取的数据,并利用编写的嵌入式软件,将数据按照定义的数据传输格式发送到阿里云MQTT服务器。在阿里云服务器上,通过订阅相应的主题,可以接收并解析传来的数据,实现远程抄表功能。 整个基于阿里云MQTT协议的4G远程抄表设计与实现的过程包括硬件选择、服务器搭建、软件编写、数据传输格式设计和功能实现等步骤。通过该系统,可以实现远程抄表的功能,提高了抄表的效率和准确性。同时,基于阿里云MQTT协议,还可以保障数据的安全传输和存储。 ### 回答3: 基于阿里云MQTT协议的4G远程抄表设计与实现是一种智能化、高效率的电表抄表解决方案。首先,我们需要搭建一个基于阿里云MQTT服务器来实现远程通信的功能。然后,在电表上添加一个4G通信模块,用于实现电表数据的传输。接下来,我们需要编写软件程序来实现抄表功能。 在设计过程中,我们可以使用MQTT协议进行数据传输,将电表读数作为Payload发布到MQTT服务器上的特定Topic。同时,我们可以使用阿里云的设备影子功能来存储和同步电表数据,实现数据的实时更新和远程监控。 在实现过程中,我们首先需要配置4G通信模块,使其能够连接到阿里云MQTT服务器。然后,我们需要编写程序来获取电表读数,并将其发布到MQTT服务器上。可以通过定时任务或者触发条件来触发抄表操作,从而实现定期或者实时抄表。 另外,在实现过程中,我们还可以结合其他技术,如物联网网关、数据存储和分析等,来实现更多的功能。比如,可以在MQTT服务器上设置订阅,定期从服务器上获取电表读数数据,用于后续的数据分析、计费和报表生成等工作。 总的来说,基于阿里云MQTT协议的4G远程抄表设计与实现可以提高抄表效率,减少人工成本,实现远程监控和管理,为电力行业提供便利和智能化的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值