MQTT学习笔记(1)–网络调试助手连接阿里云物联网

初探 MQTT的网络调试助手通信测试

上手之前觉得很有难度,但是当你慢慢上手,你回过头来,你会发现哦,原来是这样的啊!

这里用的平台是阿里云的物理网平台所以有必要要介绍一下如何使用平台,如何申请,和白嫖平台。

物联网平台申请

阿里云 – 物联网 MQTT注册
产品 ProductKey
设备 DeviceName
设备三元组 DeviceSecret
进入阿里云物联网平台免费注册 物联网平台 (aliyun.com)
填写 产品名称、所属品类 “、” 节点类型 “、” 连接方式 “、” 数据格式 “、” 认证方式 “,点击下方保存
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

MQTT学习笔记(1)--网络调试助手连接阿里云物联网
找到设备三元组
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
三元组为
{“ProductKey”:“hhyyFwo5b9l”,
“DeviceName”:“D001”,“DeviceSecret”:
“be5c22218e57fc60a64a00c23c05849a” }

添加功能。添加了几个开关和温湿度的属性。
点击产品步骤如下

MQTT学习笔记(1)--网络调试助手连接阿里云物联网
添加页面
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
添加标准模块
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
发布上线
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
第一步是申请,然后第二步可以说是通过这个设备来了解mqtt报文协议的报文发送原理。

利用网络调试助手连接阿里云物联网
{
“ProductKey”: “hhyyFwo5b9l”,
“DeviceName”: “D001”,
“DeviceSecret”: “be5c22218e57fc60a64a00c23c05849a”
}

MQTT学习笔记(1)--网络调试助手连接阿里云物联网
客户端id D001|securemode=3,signmethod=hmacsha1| 38字节
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
用户名 D001&hhyyFwo5b9l 16字节
16 进制
44 30 30 31 26 68 68 79 79 46 77 6F 35 62 39 6C
密码 :clientIdD001deviceNameD001productKeyhhyyFwo5b9l
http://encode.chahuo.com/
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
78776835497cac51798a0e7af0fb9aa07bfd7e68 转16 进制 字长 40
37 38 37 37 36 38 33 35 34 39 37 63 61 63 35 31 37 39 38 61 30 65 37 61 66 30 66 62 39 61 61 30 37 62 66 64 37 65 36 38

MQTT 报文固定格式
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

固定报头
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
可变报头
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
报文连接一般是
报文类型 + 固定报头
01(CONNECT) ??(剩余字节长度)
00 04(协议名长度 MQTT) 4D("M")51("Q")54("T")54("T")
04(协议级别) C2(连接标志) 00 64(保持连接时长100秒,可自行定义)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(客户端ID的字节长度38 hex 26 + 客户端ID)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 68 68 79 79 46 77 6F 35 62 39 6C (用户名长度 16 hex 26 +用户名)00 28 37 38 37 37 36 38 33 35 34 39 37 63 61 63 35 31 37 39 38 61 30 65 37 61 66 30 66 62 39 61 61 30 37 62 66 64 37 65 36 38(密码长度 40 hex 28 +密码)
连接CONNECT
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 68 68 79 79 46 77 6F 35 62 39 6C 00 28 37 38 37 37 36 38 33 35 34 39 37 63 61 63 35 31 37 39 38 61 30 65 37 61 66 30 66 62 39 61 61 30 37 62 66 64 37 65 36 38 (可变报头 + 有效载荷 的总长度 = 110 hex 6E)

网络助手连接连接
阿里云服务器IP地址(华东2) : *.iot-as-mqtt.cn-shanghai.aliyuncs.com *表示自己账号的ProductKey注意替换 hhyyFwo5b9l.iot-as-mqtt.cn-shanghai.aliyuncs.com
阿里云服务器端口号(华东2) : 1883
协议是tcp client
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

返回 20 02 00 00
CONNACK 确认连接
即为CONNECT的响应,数据流动方向为 S -> C。
正确,返回:20 02 00 00,并且保持链接。00 连接成功。
错误,返回:20 02 00 04,并且断开连接。04 无效的用户名和密码。
其他的值含义,若10s内无上报消息,阿里云会主动断开连接。
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

DISCONNECT 断开连接
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

E0 00
显示断开
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
阿里物联网平台显示离线
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
PINGREQ 心跳请求
PINGREQ帧:C0 00 在Keep alive时间内,C端应该向S端发送 PINFREQ,告知客户端还存在。
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

PINGRESP 心跳响应
即为PINGREQ的响应,数据流动方向为 S -> C。
PINGRESP帧:D0 00
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

                                心跳响应

SUBSCRIBE 订阅主题
首先要知道与阿里云通信,需要订阅哪几个主题?
回到设备的产品界面,Topic类列表 – 物模型通信Topic,可查看与物模型通信用到的所有主题。
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

设备上报温湿度消息给云服务器:
/sys/hhyyFwo5b9l/${deviceName}/thing/event/property/post
/sys/hhyyFwo5b9l/D001/thing/event/property/post

云服务器下发控制命令给家居设备:
/sys/hhyyFwo5b9l/${deviceName}/thing/service/property/set
/sys/hhyyFwo5b9l/D001/thing/service/property/set
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

82 ??
报文标识 00 0A 一个标记 如果订阅很多的话建议自己规定标记
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

报文有效载荷
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

Byte 1 Byte 2 (长度MSB,LSB) byte 3…N(主题过滤 话题名) byte N+1(服务质量 0000 00 00质量等级)
固定报头 Byte1 82 | Byte 2 ??(剩余报文长度)
报文标识 Byte1 00 | Byte 2 0A > 00 0A
报文载荷(订阅的主题)
Byte 1 ?? Byte 2 ?? (订阅主题名长度)
>00 30
Byte 3-N :2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74
(/sys/hhyyFwo5b9l/D001/thing/service/property/set 48长度)
Byte N+1 : 00 (QoS等级1)
剩余长度报文: 53 ==> hex 35
00 0A 00 30 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00
订阅(/sys/hhyyFwo5b9l/D001/thing/service/property/set)报文:
82 35 00 0A 00 30 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 00
同理订阅/sys/hhyyFwo5b9l/D001/thing/event/property/post
82 34 00 0B 00 2F 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 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

SUBACK – 订阅确认
固定报头
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

可变报头 + 报文标识符号 和订阅时候设置一样的回文
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

网络助手 90 03 00 0A 01
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

阿里云平台的状态
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

取消订阅
和订阅话题相似 没有质量等级
订阅(/sys/hhyyFwo5b9l/D001/thing/service/property/set)报文:
A2 34 00 0A 00 30 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74
同理订阅/sys/hhyyFwo5b9l/D001/thing/event/property/post
A2 33 00 0B 00 2F 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 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
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

阿里云平台
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

UNSUBACK 报文没有有效载荷
固定报头+剩余长度 + 订阅标识符
PINGREQ – 心跳请求.
客户端发送 PINGREQ 报文给服务端的。用于:

  1. 在没有任何其它控制报文从客户端发给服务的时,告知服务端客户端还活着。
  2. 请求服务端发送 响应确认它还活着。
  3. 使用网络以确认网络连接没有断开。
    保持连接(Keep Alive)处理中用到这个报文
    固定报头 + 剩余长度 C0 00
    MQTT学习笔记(1)--网络调试助手连接阿里云物联网
    MQTT学习笔记(1)--网络调试助手连接阿里云物联网

心跳响应 D0 00
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

MQTT学习笔记(1)--网络调试助手连接阿里云物联网

断开连接 DISCONNECT
固定报头+ 剩余长度 E0 00
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
PUBLISH – 发布消息
PUBLISH 控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。
固定报头
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
30 98 01
00 30 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 2F 44 30 30 31 2F 74 68 69 6E 67 2F 73 65 72 76 69 63 65 2F 70 72 6F 70 65 72 74 79 2F 73 65 74 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 73 65 72 76 69 63 65 2E 70 72 6F 70 65 72 74 79 2E 73 65 74 22 2C 22 69 64 22 3A 22 31 30 38 37 30 30 32 31 37 35 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 50 6F 77 65 72 53 77 69 74 63 68 22 3A 31 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
/sys/hhyyFwo5b9l/D001/thing/service/property/set{“method”:“thing.service.property.set”,“id”:“1087002175”,“params”:{“PowerSwitch”:1},“version”:“1.0.0”}
30 是 固定报头 98 01 是剩余长度 152 152 -128=98
MQTT学习笔记(1)--网络调试助手连接阿里云物联网
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

模仿上面的数据格式
固定报头 :30 ?? ?? 剩余长度取决于后面的字节
Topic话题+荷载(数据)
00 2F + 数据
/sys/hhyyFwo5b9l/D001/thing/event/property/post 47
2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 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
{“method”:“thing.event.property.post”,“id”:“000000001”,“params”:{“CurrentHumidity”:32,“CurrentTemperature”:25.65},“version”:“1.0.0”} 132
7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 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 33 32 2C 22 43 75 72 72 65 6E 74 54 65 6D 70 65 72 61 74 75 72 65 22 3A 32 35 2E 36 35 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D

发布 181 181-128 = 53 0011 0101 ==> 1(标志位) 011 0101 ==> B5
30 B5 01 00 2F 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 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 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 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 33 32 2C 22 43 75 72 72 65 6E 74 54 65 6D 70 65 72 61 74 75 72 65 22 3A 32 35 2E 36 35 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

温度 湿度 上传成功
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

发布 等级0 16进制
{“method”:“thing.event.property.post”,“id”:“000000001”,“params”:{“PowerSwitch”:1},“version”:“1.0.0”}
100
7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 50 6F 77 65 72 53 77 69 74 63 68 22 3A 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
开关 关
30 95 01 00 2F 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 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 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 50 6F 77 65 72 53 77 69 74 63 68 22 3A 30 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D


30 95 01 00 2F 2F 73 79 73 2F 68 68 79 79 46 77 6F 35 62 39 6C 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 7B 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 79 2E 70 6F 73 74 22 2C 22 69 64 22 3A 22 30 30 30 30 30 30 30 30 31 22 2C 22 70 61 72 61 6D 73 22 3A 7B 22 50 6F 77 65 72 53 77 69 74 63 68 22 3A 31 7D 2C 22 76 65 72 73 69 6F 6E 22 3A 22 31 2E 30 2E 30 22 7D
MQTT学习笔记(1)--网络调试助手连接阿里云物联网

MQTT学习笔记(1)--网络调试助手连接阿里云物联网

先随便给自己整理一下,后面再改。不管这么多先。

本文章来源于互联网,如有侵权,请联系删除!原文地址:MQTT学习笔记(1)–网络调试助手连接阿里云物联网