报文格式
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| byte1 | MQTT控制报文类型 | 用于指定控制报文类型的控制位 | ||||||
| byte2 | 剩余长度 |
报文类型
| 名字 | 描述 | 值 | 方向 |
|---|---|---|---|
| Reserved | 保留 | 0 | 禁止 |
| CONNECT | 客户端请求连接服务端 c-s | 1 | 客户端到服务端 |
| CONNACK | 连接报文确认s-c | 2 | 服务端到客户端 |
| PUBLISH | 发布消息c=s | 3 | 两个方向都允许 |
| PUBACK | QoS 1 消息发布收到确认c=s | 4 | 两个方向都允许 |
| PUBREC | 发布收到(保证交付第一步) | 5 | 两个方向都允许 |
| PUBREL | 发布释放(保证交付第二步 ) | 6 | 两个方向都允许 |
| PUBCOMP | QoS 2 消息发布完成(保证交互第三步) | 7 | 两个方向都允许 |
| SUBSCRIBE | 客户端订阅请求 | 8 | 客户端到服务端 |
| SUBACK | 订阅请求报文确认 | 9 | 服务端到客户端 |
| UNSUBSCRIBE | 客户端取消订阅请求 | 10 | 客户端到服务端 |
| UNSUBACK | 取消订阅报文确认 | 11 | 服务端到客户端 |
| PINGREQ | 心跳请求 | 12 | 客户端到服务端 |
| PINGRESP | 心跳响应 | 13 | 服务端到客户端 |
| DISCONNECT | 客户端断开连接 | 14 | 客户端到服务端 |
| Reserved | 保留 | 15 | 禁止 |
服务等级 一般阿里云及华为云等只支持0和1,0用的较多
| Qos值 | BIT2 | BIT1 | 描述 |
|---|---|---|---|
| 0 | 0 | 0 | 最多分发一次 |
| 1 | 0 | 1 | 至少分发一次,询问1次 |
| 3 | 1 | 0 | 只分发一次,询问2次 |
| - | 1 | 1 | 保留位 |
所用资料
https://www.aliyundrive.com/s/vZaq8dMLzNG
阿里云创建产品

产品分类可依照实际情况选择,选择后可以根据类型自动加载功能属性。
本次测试选:智能生活/电工照明/插座
节点类型选择:设备。网关下可接入多个设备。
不需要接入网关;


连接方式都可以。
数据格式选择常用JSON格式。
不使用加密,没钱。
设置完成后:
添加自定义功能
添加产品后去添加设备(设备相当于一个类,产品就是一个实例)
用户名密码
(*设备名称DeviceName,#用户名ProductKey,密码通过哈希值换算:http://encode.chahuo.com/)
设备信息:{ “ProductKey”: “gd3fQTnUHD9”, “DeviceName”: “D001”, “DeviceSecret”: “38173969a9155f6c339c9e6c3677a12f” }
| 客户端ID: | *|securemode=3,signmethod=hmacsha1| | D001|securemode=3,signmethod=hmacsha1| |
|---|---|---|
| 用户名 : | *&# | D001&gd3fQTnUHD9 |
| 密码: | 用DeviceSecret做为秘钥对 clientIddeviceNameproductKey# 进行hmacsha1加密后的结果 |
clientIdD001deviceNameD001productKeygd3fQTnUHD9 使用秘钥(38173969a9155f6c339c9e6c3677a12f)哈希1加密后: 23bc214776c189960914b360b2e8acd69eb92202 |
服务器ip和端口号:
ip:华东2:
.iot-as-mqtt.cn-shanghai.aliyuncs.com 表示自己账号的ProductKey注意替换
端口:1883
替换后地址为:gd3fQTnUHD9.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883
测试
固定报头:10 ?? (??表示总的长度16进制表示)
可变十个字节CONNECT:00 04 4D 51 54 54 04 C2 00 64
将客户端ID(转换为16进制后为:44 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
发送长为:38,转16进制后为:00 26
将用户名转换后为:44 30 30 31 26 67 64 33 66 51 54 6E 55 48 44 39
长度为:16,转换后为 00 10
密码转换后:32 33 62 63 32 31 34 37 37 36 63 31 38 39 39 36 30 39 31 34 62 33 36 30 62 32 65 38 61 63 64 36 39 65 62 39 32 32 30 32
长度为:40,转换后为 00 28
整合后:总发送为110个 ,所以??替换为6E
10 6E 00 04 4D 51 54 54 04 C2 00 64 00 26 44 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 10 44 30 30 31 26 67 64 33 66 51 54 6E 55 48 44 39 00 28 32 33 62 63 32 31 34 37 37 36 63 31 38 39 39 36 30 39 31 34 62 33 36 30 62 32 65 38 61 63 64 36 39 65 62 39 32 32 30 32
返回结果为:20 02 00 00 CONNACK报文连接成功。
00 连接接收
01 不支持的协议
02 不合格的客户端标识
03 服务端不可用
04 用户密码错误
05 未授权
其它报文
14—-DISCONNECT —— E0 00
12—-PING ——C0 00 回复 D0 00
8—-SUBSCRIBE ——等级0/1———— 16进制 订阅主题 ——00 0A

