基于MQTT协议的与OneNET AIoT 统一物联网平台的连接教程
一. OneNET平台手册--MQTT设备连接
1.1 MQTT地址
1、一般使用第一个即可

1.2 设备安全认证
1、产品、设备创建时,平台为每类产品、每个设备均分配了唯一的 key,设备登录时需要使用通过key计算出的访问token 来进行访问安全认证
2、clientid 使用方式二即可:只需设备名

二. 设备连接具体步骤
MQTT协议的控制报文格式请参考这篇文章:MQTT协议及其控制报文种类详解
2.1 生成连接控制报文并发送
2.1.1 生成连接控制报文
1、首先需要有 clientId、username、password 这三项,其中password要通过token计算工具来生成
2、连接控制报文的固定报头与可变报头为:
10 ?? 00 04 4D 51 54 54 04 C2 00 64 其中??为剩余长度,要根据有效载荷来计算,其他字节具体参考MQTT协议及其控制报文种类详解这篇文章对CONNECT报文的详细介绍
3、有效载荷:
客户端标识符:先是2字节的数据长度,后面才是客户端标识符
clientid:00 04 44 30 30 31
用户名:先是2字节的数据长度,后面才是用户名
username:00 0A 38 74 32 77 38 33 35 77 37 6B
密码:先是2字节的数据长度,后面才是密码
password :00 7A 76 65 72 73 69 6F 6E 3D 32 30 31 38 2D 31 30 2D 33 31 26 72 65 73 3D 70 72 6F 64 75 63 74 73 25 32 46 38 74 32 77 38 33 35 77 37 6B 25 32 46 64 65 76 69 63 65 73 25 32 46 44 30 30 31 26 65 74 3D 31 38 33 37 32 35 35 35 32 33 26 6D 65 74 68 6F 64 3D 6D 64 35 26 73 69 67 6E 3D 54 36 35 39 66 78 44 46 64 25 32 46 47 30 54 47 50 56 68 39 5A 55 4A 41 25 33 44 25 33 44
根据剩余长度的计算方法得,剩余长度为两字节:98 01
4、将所有上述拼接到一起使用网络调试助手进行发送:
可以看到收到了 20 02 00 00,这就是接收到的确认连接请求CONNACK

2.2 发送断开连接报文
断开连接报文:E0 00

2.3 发送PINGREQ心跳请求报文
心跳请求报文:C0 00
心跳响应报文:D0 00
可以看到收到了服务器发来的心跳响应报文

2.4 发送订阅主题控制报文
2.4.1 生成订阅主题控制报文-SUBSCRIBE
根据mqtt协议报文的要求,SUBSCRIBE报文需要包括以下部分:
固定报头:82 ??
报文标识符:示例:00 0A
主题长度与主题
在OneNET中查看可得,主题:
$sys/8t2w835w7k/{device-name}/thing/property/set
此主题代表:OneNET 平台(云端)主动发布消息,设备只负责订阅监听
权限:订阅
用途:设置直连设备属性
将{device-name}换成自己的设备名称即可
服务质量,等级为0/1:00或者01
本例使用:82 2C 00 0A 00 27 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00
2.4.2 发送SUBSCRIBE报文
可以看到服务器回复了SUBACK订阅确认报文
同时可以看到,不管SUBSCRIBE报文的服务质量是0还是1,回复的总是00
并且回复报文的报文标识符是00 0A,对应发过去的00 0A


2.5 发送取消订阅控制报文
2.5.1 生成UNSUBSCRIBE报文
固定报头
A2 ??(剩余长度)
可变报头
报文标识符:00 0A
有效载荷
长度与主题:00 30(两字节的长度) 后面是主题
这个报文无服务质量等级,故与SUBSCRIBE相比,剩余长度会少一个字节
2.5.2 发送UNSUBSCRIBE报文
可以看到服务器回复了UNSUBACK报文
并且回复报文的报文标识符是00 0A,对应发过去的00 0A

2.6 发送发布消息控制报文
想要发布消息,就得知道消息消息的数据格式,这个可以通过阿里云中的设备调试得知
2.6.1 设备调试获取发布消息格式
使用设备调试:
可以看到客户端接收到了消息,现在对此消息进行解析


2.6.2 解析
30 5C 00 27 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 7B 22 69 64 22 3A 22 35 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 74 72 75 65 7D 7D
由3号PUBLISH发布消息报文的格式:
固定报头
1、30(DUP,QoS,RETAIN都是0)
2、??(可变长度)
可变报头
1、 报文标识符:只有当 QoS 等级是 1 或 2 时,报文标识符(Packet Identifier) 字段才能出现在 PUBLISH 报文中
2、主题名长度+主题名
有效载荷
1、发送的数据:数据内容(这一块不用数据长度+数据内容),因为剩余长度-可变报头的长度就是有效载荷的长度
解析出如下格式:
固定报头:
30 5C
可变报头:
00 27 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 73 65 74
其中 00 27 是长度(39),后面是对应的主题,将其转换为ASCII码为:
$sys/8t2w835w7k/D001/thing/property/set
set代表平台发给设备
有效载荷:
7B 22 69 64 22 3A 22 35 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 74 72 75 65 7D 7D
剩下的全是数据,转换,可以看到是Json格式:
{"id":"5","version":"1.0","params":{"Switch":true}}
2.6.3 生成PUBLISH报文
固定报头:30 ??
可变报头:
注意这一块的主题不能使用set方式了,要使用post方式!!
$sys/8t2w835w7k/D001/thing/property/post
转换成长度+内容的ASCII码十六进制格式:
00 28 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74
有效载荷:注意这一块的Json内容要进行改变一点!!
同时也不用使用长度+内容的格式,原因:剩余长度-可变报头长度=数据长度
{"id":"1","version":"1.0","params":{"Switch":{"value":true}}}
7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 7B 22 76 61 6C 75 65 22 3A 74 72 75 65 7D 7D 7D
{"id":"1","version":"1.0","params":{"Switch":{"value":false}}}
7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 7B 22 76 61 6C 75 65 22 3A 66 61 6C 73 65 7D 7D 7D
组合成最终的报文格式:
true:
30 67 00 28 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 7B 22 76 61 6C 75 65 22 3A 74 72 75 65 7D 7D 7D
false:
30 68 00 28 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 7B 22 76 61 6C 75 65 22 3A 66 61 6C 73 65 7D 7D 7D
2.6.4 发送
可以看到通过发送PUBLISH报文可以控制开关的状态!!
由于Qos=0,也不会接收到回复!


2.6.5 其他
同样,也可以修改其他内容,只需要修改PUBLISH报文中有效载荷与剩余长度即可
{"id":"1","version":"1.0","params":{"temperature":{"value":50},"humi":{"value":66}}}
7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 74 65 6D 70 65 72 61 74 75 72 65 22 3A 7B 22 76 61 6C 75 65 22 3A 35 30 7D 2C 22 68 75 6D 69 22 3A 7B 22 76 61 6C 75 65 22 3A 36 36 7D 7D 7D
组合:
30 7E 00 28 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 74 65 6D 70 65 72 61 74 75 72 65 22 3A 7B 22 76 61 6C 75 65 22 3A 35 30 7D 2C 22 68 75 6D 69 22 3A 7B 22 76 61 6C 75 65 22 3A 36 36 7D 7D 7D

三. 总结
3.1 CONNECT报文
10 98 01 00 04 4D 51 54 54 04 C2 00 64 00 04 44 30 30 31 00 0A 38 74 32 77 38 33 35 77 37 6B 00 7A 76 65 72 73 69 6F 6E 3D 32 30 31 38 2D 31 30 2D 33 31 26 72 65 73 3D 70 72 6F 64 75 63 74 73 25 32 46 38 74 32 77 38 33 35 77 37 6B 25 32 46 64 65 76 69 63 65 73 25 32 46 44 30 30 31 26 65 74 3D 31 38 33 37 32 35 35 35 32 33 26 6D 65 74 68 6F 64 3D 6D 64 35 26 73 69 67 6E 3D 54 36 35 39 66 78 44 46 64 25 32 46 47 30 54 47 50 56 68 39 5A 55 4A 41 25 33 44 25 33 44
3.2 DISCONNECT报文
E0 00
3.3 PINGREQ报文
C0 00
3.4 PINGRESP报文
D0 00
3.5 SUBSCRIBE报文
主题:$sys/8t2w835w7k/D001/thing/property/set
报文:82 2C 00 0A 00 27 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00
3.6 UNSUBSCRIBE报文
A2 2B 00 0A 00 27 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 73 65 74
3.7 PUBLISH报文
主题:$sys/8t2w835w7k/D001/thing/property/post
有效载荷:
{"id":"1","version":"1.0","params":{"Switch":{"value":true}}}
7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 7B 22 76 61 6C 75 65 22 3A 74 72 75 65 7D 7D 7D
{"id":"1","version":"1.0","params":{"Switch":{"value":false}}}
7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 7B 22 76 61 6C 75 65 22 3A 66 61 6C 73 65 7D 7D 7D
报文:
true报文:
30 67 00 28 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 7B 22 76 61 6C 75 65 22 3A 74 72 75 65 7D 7D 7D
false报文:
30 68 00 28 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 53 77 69 74 63 68 22 3A 7B 22 76 61 6C 75 65 22 3A 66 61 6C 73 65 7D 7D 7D
有效载荷:
{"id":"1","version":"1.0","params":{"temperature":{"value":50},"humi":{"value":66}}}
7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 74 65 6D 70 65 72 61 74 75 72 65 22 3A 7B 22 76 61 6C 75 65 22 3A 35 30 7D 2C 22 68 75 6D 69 22 3A 7B 22 76 61 6C 75 65 22 3A 36 36 7D 7D 7D
报文:
30 7E 00 28 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 74 65 6D 70 65 72 61 74 75 72 65 22 3A 7B 22 76 61 6C 75 65 22 3A 35 30 7D 2C 22 68 75 6D 69 22 3A 7B 22 76 61 6C 75 65 22 3A 36 36 7D 7D 7D
有效载荷:
{"id":"1","version":"1.0","params":{"humi":{"value":66}}}
7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 68 75 6D 69 22 3A 7B 22 76 61 6C 75 65 22 3A 36 36 7D 7D 7D 0D 0A
报文:
30 65 00 28 24 73 79 73 2F 38 74 32 77 38 33 35 77 37 6B 2F 44 30 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 68 75 6D 69 22 3A 7B 22 76 61 6C 75 65 22 3A 36 36 7D 7D 7D 0D 0A
更多推荐

所有评论(0)