当前位置: 首页 > news >正文

MQTT报文介绍

一、connect报文

connect报文有三个部分组成,固定报文、可变报文、有效载荷三个部分。

首先是固定报文:

、消息类型如下:

所以固定报头为10 XX(10 A3 01 )

其次是可变报头

可变报头协议名、协议级别、连接标志、保持连接四个部分组成。

协议名:

因此对于此的协议名为:  00 04 4D 51 54 54

协议级别:

故协议级别为 04

连接标志:

故连接标志为 C2

保持连接:

保持连接  00 64

有效载荷:

设备ID和产品ID如下:

下面为在onenet中进行创建

设备ID为:vibrate01    产品ID为:8HMWX6Vb1E  但是要转化为ASCII

经转化设备ID为:00 09 76 69 62 72 61 74 65 30 31   (前面两位为长度)

产品ID为:00 0A 38 48 4D 57 58 36 56 62 31 45 (前面两位为长度)

Token:

利用如下工具

其中

et要将时间转为时间戳    method选择 sha1  

生成的:version=2018-10-31&res=products%2F8HMWX6Vb1E%2Fdevices%2Fvibrate01&et=2017881776&method=sha1&sign=bCrs7VgsCFRz0OdbfGYDr945El0%3D

将其转为ASCII 为00 80 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 48 4D 57 58 36 56 62 31 45 25 32 46 64 65 76 69 63 65 73 25 32 46 76 69 62 72 61 74 65 30 31 26 65 74 3D 32 30 31 37 38 38 31 37 37 36 26 6D 65 74 68 6F 64 3D 73 68 61 31 26 73 69 67 6E 3D 62 43 72 73 37 56 67 73 43 46 52 7A 30 4F 64 62 66 47 59 44 72 39 34 35 45 6C 30 25 33 44(前两个为长度 128转化为16进制的)

现在确定剩余长度的值

10 XX 00 04 4D 51 54 54 04 C2 00 64 00 09 76 69 62 72 61 74 65 30 31 00 0A 38 48 4D 57 58 36 56 62 31 45 00 80 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 48 4D 57 58 36 56 62 31 45 25 32 46 64 65 76 69 63 65 73 25 32 46 76 69 62 72 61 74 65 30 31 26 65 74 3D 32 30 31 37 38 38 31 37 37 36 26 6D 65 74 68 6F 64 3D 73 68 61 31 26 73 69 67 6E 3D 62 43 72 73 37 56 67 73 43 46 52 7A 30 4F 64 62 66 47 59 44 72 39 34 35 45 6C 30 25 33 44    

在10 XX后面 有162个   剩余长度计算如下

用画笔工具给162进行解释

162-127=35  则0100011 (后7位)8位为1 表明后面有字节

后面那个字节 00000001 (128)第8位表明后面无字节

因此报文为:

10 A3 01 00 04 4D 51 54 54 04 C2 00 64 00 09 76 69 62 72 61 74 65 30 31 00 0A 38 48 4D 57 58 36 56 62 31 45 00 80 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 48 4D 57 58 36 56 62 31 45 25 32 46 64 65 76 69 63 65 73 25 32 46 76 69 62 72 61 74 65 30 31 26 65 74 3D 32 30 31 37 38 38 31 37 37 36 26 6D 65 74 68 6F 64 3D 73 68 61 31 26 73 69 67 6E 3D 62 43 72 73 37 56 67 73 43 46 52 7A 30 4F 64 62 66 47 59 44 72 39 34 35 45 6C 30 25 33 44  

连接成功:

二、CONNACK报文

固定报头

故报文为20 02 00 00  剩余长度两个字节

三、SUBSCRIBE报文

报文同样由三个部分组成:固定报头    可变报头    有效载荷

主题过滤器在onenet中进行选择

选择 $sys/8HMWX6Vb1E/vibrate01/thing/property/post/reply

转化为ASCII 

24 73 79 73 2F 38 48 4D 57 58 36 56 62 31 45 2F 76 69 62 72 61 74 65 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 2F 72 65 70 6C 79    

长度为10  则 00 33 24 73 79 73 2F 38 48 4D 57 58 36 56 62 31 45 2F 76 69 62 72 61 74 65 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 2F 72 65 70 6C 79   

则综合上述;

82 38 00 0A 00 33 24 73 79 73 2F 38 48 4D 57 58 36 56 62 31 45 2F 76 69 62 72 61 74 65 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 2F 72 65 70 6C 79 00

三、SUBACK报文

由固定报头、可变报头、有效载荷三个部分组成

固定报头

可变报头

故返回的应该为: 90 03 00 0A 00

四、UNSUBSCRIBE 报文

固定报头 可变报头  有效载荷

则固定报头 :A2 XX

可变报头为 00 0B

选择 $sys/8HMWX6Vb1E/vibrate01/thing/property/post/reply

转化为ASCII 

24 73 79 73 2F 38 48 4D 57 58 36 56 62 31 45 2F 76 69 62 72 61 74 65 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 2F 72 65 70 6C 79    

长度为10  则 00 33 24 73 79 73 2F 38 48 4D 57 58 36 56 62 31 45 2F 76 69 62 72 61 74 65 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 2F 72 65 70 6C 79   

则综合上述;

A2 37 00 0B 00 33 24 73 79 73 2F 38 48 4D 57 58 36 56 62 31 45 2F 76 69 62 72 61 74 65 30 31 2F 74 68 69 6E 67 2F 70 72 6F 70 65 72 74 79 2F 70 6F 73 74 2F 72 65 70 6C 79 

五、UNSUBACK 报文

固定报头 可变报头

http://www.xdnf.cn/news/577369.html

相关文章:

  • Linux内存分页管理详解
  • Jsoup解析商品信息具体怎么写?
  • 阿里发布扩散模型Wan VACE,全面支持生图、生视频、图像编辑,适配低显存~
  • FreeCAD傻瓜教程-外螺纹的绘制,利用两个实体进行布尔运算来实现
  • 《P1433 吃奶酪》
  • MCU开发学习记录19* - CAN学习与实践(HAL库) - 定时传输、触发传输和请求传输(轮询与中断实现) -STM32CubeMX
  • Python 代码缩进与结构化编程:从基础到风格规范
  • Robotaxi新消息密集释放,量产元年来临谁在领跑?
  • [Java恶补day2] 49. 字母异位词分组
  • 【SW】从3D模型导出dxf图纸
  • 【算法专题十五】BFS解决最短路问题
  • 04_Prometheus监控docker容器(4)
  • 智慧社区新防线:华奥系AI技术如何让夏季安防“零隐患”
  • 如何在JavaScript中将数值转换为字符串并赋值给数组——以RuoYi-Vue项目为例
  • Redis Cluster动态扩容:架构原理与核心机制解析
  • 航电系统之航点跟踪系统篇
  • C++(27): 标准库 <iterator>
  • 逆向音乐APP:Python爬虫获取音乐榜单 (1)
  • Podman(Pod Manager)简介
  • 嵌入式STM32学习——串口USART 2.1(串口发送字符串和字符)
  • 应用分享 | 软件定义架构如何满足GNSS模拟测试的开放性需求?
  • JDK9~17语法新特性全览:Java语言的持续进化
  • Python数据可视化高级实战之二——热力图绘制探究
  • C++ 输出流格式控制
  • 起重的技术
  • wd软件安装
  • origin绘图之【如何将横坐标/x设置为文字、字母形式】
  • 升级SpringBoot2到3导致的WebServices升级
  • 数字化,一个泛化的概念
  • 使用Mathematica生成随机曼陀罗花