如何用MQTTX调试设备,排查问题

[复制链接]
查看1191 | 回复14 | 2024-3-6 19:46:40 | 显示全部楼层 |阅读模式
本帖最后由 chensg 于 2024-3-6 19:46 编辑

如何用MQTTX调试设备,排查问题
    爱星物联IoT云平台是一款面向智能小家电、环境电器等C端用户领域的通用物联网平台,设备和平台交互主要使用了MQTT协议。从下图可以看到,智能设备-平台-APP主要使用了MQTT协议进行数据的交互。
    原理图.PNG
    MQTT是一种基于发布/订阅模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT的主要设计目标是为低带宽、高延迟或不可靠的网络中的远程传感器和控制设备之间的通信提供实时可靠的消息服务。
随着物联网(IoT)的快速发展,大量的设备需要通过网络进行通信和数据交换。这些设备可能分布在各个角落,网络环境复杂多变,因此需要一个能够适应这种环境的通信协议。MQTT协议就是为满足这种需求而设计的。它特别适合用于物联网中的传感器和控制设备,这些设备通常具有有限的计算能力、存储空间和带宽。
    MQTT协议的其它特性、及应用场景,感兴趣的读者可以参考相关专业资料。
    MQTT协议的可用调试工具较多,有带GUI的也有命令行的。这里推荐一款MQTTX,界面比较好,使用也比较简单。
    MQTTX的使用说明请参考官网:
    在爱星物联云平台中,怎么使用MQTTX工具进行设备调试,排查设备问题?
    MQTT协议的消息有消息主题、消息体的概念。平台制定了设备端和云端通讯的协议,约定了交互流程和消息规范,我们在用MQTTX工具进行调试时,我们必须要熟悉这些内容。可以参考《爱星云平台嵌入式与IoT云平台协议规范》。
    其中比较重要、经常需要关注的是消息topic和各业务消息结构。
    消息topic如下表,其中ProductKey是产品key,DeviceId是设备ID。
  
序号
  
发布方
订阅方
Topic
Qos
基本说明
1
云端
设备
{ProductKey}/{DeviceId}/control
2
控制指令
2
设备
云端
{ProductKey}/{DeviceId}/control/ack
1
控制指令响应
3
云端
设备
{ProductKey}/{DeviceId}/query
0
获取设备状态信息
4
设备
云端
{ProductKey}/{DeviceId}/query/ack
0
获取设备状态信息响应
5
云端
设备
{ProductKey}/{DeviceId}/info
0
获取设备配置信息
6
设备
云端
{ProductKey}/{DeviceId}/info/report
0
获取设备配置信息响应
7
设备
云端
{ProductKey}/{DeviceId}/report
0
设备主动上报信息,云端不响应
8
设备
云端
{ProductKey}/{DeviceId}/log
0
设备主动上报日志,云端不响应
9
云端
设备
{ProductKey}/{DeviceId}/upgrade
1
OTA升级信息
10
设备
云端
{ProductKey}/{DeviceId}/upgrade/ack
0
OTA升级信息响应
11
设备
云端
{ProductKey}/{DeviceId}/upgrade/report
0
OTA升级进度主动上报
12
设备
云端
{ProductKey}/{DeviceId}/online
0
在线状态,遗嘱消息、上线消息
13
云端
设备
{ProductKey}/{DeviceId}/config
1
下发设备配置
14
设备
云端
{ProductKey}/{DeviceId}/config/ack
1
下发设备配置响应
15
设备
云端
{ProductKey}/{DeviceId}/utc
0
设备请求更新时间
16
云端
设备
{ProductKey}/{DeviceId}/utc/ack
0
云端下发最新时间
    各业务消息接口,可以参考协议文档。通常在设备开发中,我们需要反复查阅协议文档内容,要对协议条目的场景、消息规范等需要有比较清晰的理解,严格按照协议规范进行开发。
    了解了协议之后,我们介绍一下具体使用MQTTX进行设备调试的例子。我们使用MQTTX 1.9.6版本来介绍,其它版本的界面布局可能略有不同,但关键参数是一样的。
    以某产品为例,产品key是DomeDev,我们需要调试改产品的设备A,设备ID是VIRTDVA2FDDUKH。
    我们先来建立连接参数,界面如下图所示:
    因为云端对MQTT连接做了安全认证和鉴权。因此,需要注意几点:
        Client ID:必须填写tool_{aaaaaa},其中{aaaaaa}是随机字符串,如tool_debug等。
        用户名:必须填写产品key,需要调试哪个产品就用哪个产品的key,注意是产品key,不是设备key,如DomeDev。
        密码:密码=MD5(产品key+随机字符串), 例子就是DomeDevdebug字符串的MD5值,32位小写。
        MQTT版本:选择3.1或3.1.1,目前平台未配置5.0,所以不要选择5.0版本。
    其它参数按照云服务器实际配置来填写,比如域名,端口及加密参数等。
    MQTTX配置.PNG
     连接建立完成后,我们需要订阅我们感兴趣的设备的消息。比如我们是要调试设备VIRTDVA2FDDUKH,则可以使用带通配符的topic: DomeDev/VIRTDVA2FDDUKH/# ,订阅改设备的所有消息。
      订阅消息.PNG
    注意,因为这次MQTT连接是DomeDev作为用户名进行连接的,所以只能订阅DomeDev产品下的设备的消息,其它产品的消息都会被视为非法消息;如果订阅其它产品的消息,则会被平台踢掉连接。
    当订阅成功后,平台会立即推送该设备的retain消息;同时,该设备后续进行的所有实时数据和指令收发,都可以订阅到并在界面展示出来。
如果此时设备还没有连上平台,那么不会有实时数据推送。如果确认设备已正常连接,却看不到数据更新,设备也收不到控制指令,就要考虑设备端是否连错服务器或者数据收发逻辑了。
       消息内容展示.PNG
    剩下的就是,对照协议内容分析指令、数据、以及设备的真实状态了。
    另外,MQTTX也支持指令下发,开发者可以根据协议规范,手动构建指令下发。
    如下图所示:
         发送指令.PNG
    其它,设备配不上网的问题、设备连不上的问题、设备状态异常的问题、设备控制不正常的问题,等等所有这些设备相关的问题,均可以通过MQTTX工具来排查问题、定位原因。

     问题总是存在的,排查问题总是繁杂的。任何问题都会有蛛丝马迹,我们需要综合多方面的技术积累、经验积累,配上如MQTTX这样的工具,外加一点点灵感、一点点联想,相信任何问题都能被你抓到、被你解决。
     近期爱星物联社区版即将发布了,感兴趣的同志们,请多多关注。


回复

使用道具 举报

WT_0213 | 2024-3-7 08:50:43 | 显示全部楼层
回复

使用道具 举报

1084504793 | 2024-3-7 08:58:51 | 显示全部楼层
回复

使用道具 举报

wurong | 2024-3-7 09:14:29 | 显示全部楼层
回复

使用道具 举报

1055173307 | 2024-3-7 10:09:06 | 显示全部楼层
回复

使用道具 举报

楚华 | 2024-3-7 10:22:13 | 显示全部楼层
赞一下
回复

使用道具 举报

lazy | 2024-3-7 10:41:30 | 显示全部楼层
回复

使用道具 举报

知行合一 | 2024-3-7 11:19:33 | 显示全部楼层
回复

使用道具 举报

7788 | 2024-3-7 12:24:31 | 显示全部楼层
回复

使用道具 举报

sansui | 2024-3-7 13:15:47 | 显示全部楼层
赞一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则