You need to enable JavaScript to run this app.
导航
使用官方 MQTT 驱动
最近更新时间:2024.08.21 11:09:35首次发布时间:2023.11.02 11:58:28

本文介绍了边缘智能官方 MQTT 驱动的使用方法。

背景信息

MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,用于在物联网和传感器网络中进行消息传递。MQTT 协议的设计目标是在带宽有限、网络不稳定的环境下实现可靠的通信。它使用简单的发布-订阅模型,其中有一个消息代理(Broker)负责接收和转发消息;设备可以作为发布者(Publisher)将消息发布到代理,也可以作为订阅者(Subscriber)订阅感兴趣的消息主题。
边缘智能提供了官方 MQTT 驱动。通过在节点(一体机)上部署官方 MQTT 驱动并接入设备,您可以使节点成为一个 MQTT 消息订阅者。MQTT 驱动能够从 MQTT 服务器(即消息代理 Broker)订阅来自特定发布者的消息。这些发布者是接入到节点的 MQTT 设备。
图片

驱动说明

您可以在边缘智能控制台设备管理 > 驱动模板 页面,查看边缘智能的官方 MQTT驱动
图片

准备工作

准备节点

使用 MQTT 驱动前,您需要准备一台边缘智能节点,并完成以下工作:

准备 MQTT 服务器和客户端

使用 MQTT 驱动前,您需要准备可访问的 MQTT 服务器。为了测试消息接收和转发,您还需要准备一个 MQTT 客户端来与 MQTT 服务器建立连接。为便于演示操作,本教程将在节点上部署 MQTT 服务,使节点成为一个 MQTT 服务器;本教程还使用了 MQTT 客户端工具来模拟消息的发送。

注意

如果您有可用的 MQTT 服务器,请跳过这部分内容。

部署 MQTT 服务器

在本章节,您将使用边缘智能的官方 Helm 模板(emqx),在节点上部署 MQTT 消息服务,使节点成为 MQTT 消息服务器。

  1. 登录边缘智能控制台

  2. 在左侧导航栏顶部的 我的项目 区域,选择您的项目。

  3. 在左侧导航栏,选择 应用管理 > Helm 应用

  4. 单击 官方模板 页签。

  5. 定位到 emqx 模板,单击 操作 列的 部署

  6. 部署应用 页面,修改以下参数的设置,然后单击 确认

    • 名称:设置为 emqx,表示 MQTT 服务器的名称。
    • 节点:选择要使用的节点。
    • 镜像仓库版本:选择最新的版本。
    • 参数配置(可选):使用默认 参数配置 部署的 MQTT 服务不开放外部访问。如需允许外部访问,您可以对 service 部分的参数配置做以下修改:
      • service.type 的值设置为 NodePort
      • service.nodePorts.mqttservice.nodePorts.dashboard 各自指定一个端口。

        说明

        端口不能重复。

        端口取值范围:30000~32767。

        说明

        NodePort 端口在边缘智能集群层面共享。若指定的端口已被(您自己或其他用户的应用)占用,将会导致 MQTT 服务因端口冲突而无法访问。更多信息,请参见 kubernetes 官方文档
        如果 MQTT 服务无法访问,您可以编辑应用的 Yaml 文件,指定其他未被占用的端口号。保存 Yaml 文件后,应用将会自动重新部署。这时,您可以再次尝试访问。

    图片
    图片

等待应用部署成功后,您可以访问 MQTT 服务器的仪表盘来验证服务器是否正常。验证方法如下:

  1. 打开本地计算机的浏览器,访问 http://<节点IP>:<service.nodePorts.dashboard>

    注意

    本地计算机必须与节点处于相同的私有网络。

  2. 使用初始登录凭证(用户名/密码:admin/public)登录 MQTT 服务器的仪表盘。
    图片

如果登录成功,表示 MQTT 服务器已经正常工作。
图片

安装 MQTT 客户端

MQTTX 是一款 MQTT 客户端工具,它支持 MQTT 5.0、3.1.1 和 3.1 协议。在本章节,您将在自己的终端设备上安装 MQTTX,并与 MQTT 服务器建立连接。

  1. 根据 MQTTX 的官方说明,在您的设备上安装 MQTTX,使您的设备成为 MQTT 客户端。
  2. 验证客户端与服务器是否连通。
    1. 在您的设备上打开 MQTTX。
    2. 新建一个连接。
    3. 新建 面板,填写连接信息,然后单击右上角的 连接
      • 服务器地址:填写节点的 IP 地址。
      • 端口:填写您设置的 <service.nodePorts.mqtt>。
        图片

连接成功后,您可以前往 MQTT 服务器的仪表盘,在 监控 > 客户端 列表查看已连接的客户端。
图片

步骤1:准备设备模板

  1. 登录边缘智能控制台

  2. 在左侧导航栏顶部的 我的项目 区域,选择您的项目。

  3. 在左侧导航栏,选择 设备管理 > 设备模板

  4. 创建一个设备模板。

    1. 单击 创建设备模板
    2. 创建设备模板 对话框,为模板设置一个 名称 并添加 描述,然后单击 确定

      在本教程中,我们使用 MQTT 作为设备模板的名称。

  5. 单击新建的设备模板的名称。

您将进入模板详情。接下来,您需要在设备模板详情中完成定义物模型

定义物模型

  1. 在设备模板详情页,单击 物模型定义 页签。

  2. 单击 编辑

  3. 默认模块 下,根据需要 添加自定义功能
    您可以添加 属性 类型的自定义功能。每个自定义功能表示 MQTT 服务器从客户端接收的某种数据。

    在本教程中,我们添加了下表罗列的自定义功能用于测试。

    功能类型

    功能名称

    标识符

    数据类型

    数据定义

    属性

    bool

    bool

    bool

    0-off、1-on

    属性

    enum

    enum

    enum

    枚举对:1-一、2-二

    属性

    text

    text

    text

    数据长度:1024

    属性

    int

    int

    int

  4. 添加完自定义功能,在 编辑物模型 页面右下角,单击 保存

  5. 发布新版本 对话框,设置 版本号描述,然后单击 确定

    在本教程中,我们使用 1.0.0.0 作为物模型的版本号。

发布版本后,您将会得到如下图所示的物模型。
图片

步骤2:接入设备

  1. 在左侧导航栏,单击 节点管理
  2. 节点管理 页面,找到要部署 MQTT 驱动的节点,单击节点名称。
  3. 单击 设备接入 页签。

接下来,您需要在 设备接入 页签依次完成以下操作:部署驱动实例添加驱动通道添加设备

部署驱动实例

  1. 如果您是首次在当前节点上部署驱动实例,单击 立即部署。如果您不是首次在当前节点上部署驱动实例,在 驱动实例 列表上方,单击 新建驱动实例
  2. 新建驱动实例 对话框,选择 MQTT驱动 的最新版本,然后单击 确定

您提交部署请求后,系统将在节点上部署驱动实例。部署过程涉及到数据传输。根据现场网络环境不同,部署所需时间不同。请确保您的节点在线,并耐心等待部署完成。当驱动部署成功后,驱动实例状态 将变为 运行中

添加驱动通道

驱动通道表示多个设备与驱动通信时所使用的相同配置。在 MQTT 驱动使用场景下,MQTT 驱动可以从一个 MQTT 服务器(消息代理)订阅来自多个设备(发布者)的消息。一个驱动通道就表示一种订阅途径,它定义了从一个 MQTT 服务器订阅消息的通用配置。
图片

  1. 在驱动实例列表,将光标放置在 MQTT驱动 上,然后单击添加图标。
  2. 添加通道 对话框,完成以下设置,然后单击 确定

配置项

说明

通道名称

为通道设置一个名称。允许使用任意字符,并且长度不超过 32 个字符。

协议

选择 mqtt

服务器地址

填写 MQTT 服务器的连接地址。

  • 如果您参照 准备工作 在当前节点上部署了 MQTT 服务,那么您可以此处输入 MQTT 服务器的名称。在本教程中,节点上部署的 MQTT 服务器的名称是 emqx
  • 如果您使用其他的 MQTT 服务器,那么您需要在此处输入 MQTT 服务器的 IP 地址。

端口号

填写 MQTT 服务的端口号。默认端口号是 1883

Client ID

按照 MQTT 规范,为 MQTT 驱动设置一个客户端 ID。示例:mqtt-driver

用户名 & 密码

填写分配给 MQTT 驱动的用户名和密码。

只有当 MQTT 服务器开启了客户端认证时,您需要设置此参数。

成功添加驱动通道后,您可以单击驱动以展示或隐藏驱动通道。

添加设备实例

  1. 驱动实例 列表选中 MQTT 驱动
  2. 基本信息 标签页,您可以选择以下方式添加设备:
    • 添加设备:一次添加一个设备实例。
    • 批量添加:一次添加一个或多个设备实例。最多可以同时添加 100 个设备实例,并批量设置一些设备参数。

添加设备

  1. 基本信息 标签页,单击 添加设备

  2. 添加设备 面板,完成以下配置,然后单击 确定

    配置项

    说明

    名称

    为设备设置一个名称。

    在本教程中,我们使用 devicea 作为设备名称。

    标识符

    为设备设置一个标识符。

    本教程中使用 mqtt-dv1 作为设备的标识符。

    设备模板

    选择您在步骤1:准备设备模板中为 MQTT 客户端创建的设备模板。

    子协议名称

    选择 mqtt

    Topic前缀

    可选。设置订阅消息的 Topic 前缀。如果不设置该参数,那么驱动默认订阅以 ${标识符}/# 开头的 Topic;如果设置该参数,那么驱动将订阅以 ${Topic前缀}/${标识符}/# 开头的 Topic。

    在本教程中,我们添加 test 作为 Topic 前缀,用来测试消息发布与订阅。

    标签

    为设备添加标签。如果需要创建新的标签,输入 keyvalue 后,单击 创建标签

    描述

    为设备添加描述信息。

完成以上操作后,MQTT 驱动将自动与 MQTT 服务器建立连接。您可以前往 MQTT 服务器的仪表盘,在 监控 > 客户端 页面查看新建的客户端。新建的客户端的 ID 就是您在驱动通道中设置的 Client ID

批量添加

  1. 基本信息 标签页,单击 批量添加

  2. 添加设备 页面,您可以在 驱动信息 区域查看驱动相关信息,并参考下表说明完成 设备配置,然后单击 确定

    配置项

    说明

    子协议类型

    选择 mqtt

    设备模板

    选择您在步骤1:准备设备模板中为 MQTT 客户端创建的设备模板。

    设备名称

    为设备设置一个名称。

    在本教程中,我们使用 devicea 作为设备名称。

    标识符

    为设备设置一个标识符。

    本教程中使用 mqtt-dv1 作为设备的标识符。

    Topic前缀

    可选。设置订阅消息的 Topic 前缀。如果不设置该参数,那么驱动默认订阅以 ${标识符}/# 开头的 Topic;如果设置该参数,那么驱动将订阅以 ${Topic前缀}/${标识符}/# 开头的 Topic。

    在本教程中,我们添加 test 作为 Topic 前缀,用来测试消息发布与订阅。

    标签

    为设备添加标签。如果需要创建新的标签,输入 keyvalue 后,单击 创建标签

    描述

    为设备添加描述。

  3. (可选)如果需要同时添加多个设备实例,在 添加设备 后的输入框中输入要添加的设备个数,然后单击 添加设备。系统会自动生成多个设备配置条目。

  4. (可选)如果需要批量设置一些设备参数,先勾选右上角的 批量编辑所有配置项,然后修改某个参数值,系统会同步修改所有设备的对应参数值。

    说明

    勾选 批量编辑所有配置项 后,如果参数配置框置灰,表示该参数不支持批量设置。

完成以上操作后,MQTT 驱动将自动与 MQTT 服务器建立连接。您可以前往 MQTT 服务器的仪表盘,在 监控 > 客户端 页面查看新建的客户端。新建的客户端的 ID 就是您在驱动通道中设置的 Client ID

步骤3:验证数据上报

您可以通过 MQTTX 客户端向 MQTT 服务器发送测试数据。MQTT 接收的测试数据会上报到边缘智能控制台。您可以在设备实例的运行状态页面查看相关数据。

模拟发送测试数据

以发送 int 类型测试数据为例。在 MQTTX 客户端的连接页面,发送测试数据到以下 Topic:test/mqtt-dv1/int。您也可以模拟发送其他类型的数据进行测试。
图片

查看上报的测试数据

  1. 在左侧导航栏,选择 设备管理 > 设备实例
  2. 找到 MQTT 设备,单击设备的名称。
  3. 单击 运行状态 页签。
  4. 设置一个时间段(包含您发送测试数据的时间),查看 MQTT 设备的数据。
    下图展示了通过 MQTTX 客户端发送到 MQTT 服务器的测试数据。
    图片