当前位置: 首页 > 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.dtcms.com/a/204995.html

相关文章:

  • 怎么把cursor(Cursor/ollama)安装到指定路径
  • Python图像处理全攻略:从基础到前沿技术深度剖析
  • Java 中 LRU 缓存机制详解与实践​
  • Linux操作系统:信号
  • 【Spring Boot】配置实战指南:Properties与YML的深度对比与最佳实践
  • C语言---内存函数
  • 【亲测有效】Ubuntu22.04安装黑屏重启进入系统卡死
  • AI赋能R-Meta分析核心技术:从热点挖掘到高级模型
  • openlayer:07点击实现切换图层之addLayer
  • 【leetcode】70. 爬楼梯
  • Java 参数值传递机制
  • 采用线性优化改进评估配电网的灵活性范围
  • docker-compose使用详解
  • Unity中SRP Batcher使用整理
  • BeamDojo: Learning Agile Humanoid Locomotion on Sparse Footholds
  • 【深度估计 Depth Estimation】数据集介绍
  • 静态方法和实例方法的区别
  • NVIDIA GPU 性能调优与诊断完全指南
  • PortgreSQL常用操作
  • shell脚本总结3
  • 网络安全管理之钓鱼演练应急预案
  • Python 训练营打卡 Day 31
  • Dirsearch 深度使用教程:从基础扫描到携带 Cookie 探索网站
  • Java—— IO流 第二期
  • PCB设计实践(二十三)什么是阻抗匹配,需要做啥
  • springboot链接nacos测试
  • 项目执行中缺乏风险管理,如何预防潜在问题?
  • 惠斯通电桥测量 数据采集模块 支持恒压/恒流的24位ADC电桥测量
  • PCB设计教程【入门篇】——电路分析基础-元件数据手册
  • 设计模式介绍