本文介绍了边缘智能官方 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 服务器,请跳过这部分内容。
在本章节,您将使用边缘智能的官方 Helm 模板(emqx
),在节点上部署 MQTT 消息服务,使节点成为 MQTT 消息服务器。
登录边缘智能控制台。
在左侧导航栏顶部的 我的项目 区域,选择您的项目。
在左侧导航栏,选择 应用管理 > Helm 应用。
单击 官方模板 页签。
定位到 emqx 模板,单击 操作 列的 部署。
在 部署应用 页面,修改以下参数的设置,然后单击 确认。
emqx
,表示 MQTT 服务器的名称。service
部分的参数配置做以下修改:
service.type
的值设置为 NodePort
。service.nodePorts.mqtt
和 service.nodePorts.dashboard
各自指定一个端口。说明
端口不能重复。
说明
NodePort 端口在边缘智能集群层面共享。若指定的端口已被(您自己或其他用户的应用)占用,将会导致 MQTT 服务因端口冲突而无法访问。更多信息,请参见 kubernetes 官方文档。
如果 MQTT 服务无法访问,您可以编辑应用的 Yaml 文件,指定其他未被占用的端口号。保存 Yaml 文件后,应用将会自动重新部署。这时,您可以再次尝试访问。
等待应用部署成功后,您可以访问 MQTT 服务器的仪表盘来验证服务器是否正常。验证方法如下:
http://<节点IP>:<service.nodePorts.dashboard>
。注意
本地计算机必须与节点处于相同的私有网络。
admin
/public
)登录 MQTT 服务器的仪表盘。如果登录成功,表示 MQTT 服务器已经正常工作。
MQTTX 是一款 MQTT 客户端工具,它支持 MQTT 5.0、3.1.1 和 3.1 协议。在本章节,您将在自己的终端设备上安装 MQTTX,并与 MQTT 服务器建立连接。
连接成功后,您可以前往 MQTT 服务器的仪表盘,在 监控 > 客户端 列表查看已连接的客户端。
登录边缘智能控制台。
在左侧导航栏顶部的 我的项目 区域,选择您的项目。
在左侧导航栏,选择 设备管理 > 设备模板。
创建一个设备模板。
在本教程中,我们使用 MQTT 作为设备模板的名称。
单击新建的设备模板的名称。
您将进入模板详情。接下来,您需要在设备模板详情中完成定义物模型。
在设备模板详情页,单击 物模型定义 页签。
单击 编辑。
在 默认模块 下,根据需要 添加自定义功能。
您可以添加 属性 类型的自定义功能。每个自定义功能表示 MQTT 服务器从客户端接收的某种数据。
在本教程中,我们添加了下表罗列的自定义功能用于测试。
功能类型 | 功能名称 | 标识符 | 数据类型 | 数据定义 |
---|---|---|---|---|
属性 | bool | bool | bool | 0-off、1-on |
属性 | enum | enum | enum | 枚举对:1-一、2-二 |
属性 | text | text | text | 数据长度:1024 |
属性 | int | int | int | 无 |
添加完自定义功能,在 编辑物模型 页面右下角,单击 保存。
在 发布新版本 对话框,设置 版本号 和 描述,然后单击 确定。
在本教程中,我们使用 1.0.0.0 作为物模型的版本号。
发布版本后,您将会得到如下图所示的物模型。
接下来,您需要在 设备接入 页签依次完成以下操作:部署驱动实例、添加驱动通道、添加设备。
您提交部署请求后,系统将在节点上部署驱动实例。部署过程涉及到数据传输。根据现场网络环境不同,部署所需时间不同。请确保您的节点在线,并耐心等待部署完成。当驱动部署成功后,驱动实例状态 将变为 运行中。
驱动通道表示多个设备与驱动通信时所使用的相同配置。在 MQTT 驱动使用场景下,MQTT 驱动可以从一个 MQTT 服务器(消息代理)订阅来自多个设备(发布者)的消息。一个驱动通道就表示一种订阅途径,它定义了从一个 MQTT 服务器订阅消息的通用配置。
配置项 | 说明 |
---|---|
通道名称 | 为通道设置一个名称。允许使用任意字符,并且长度不超过 32 个字符。 |
协议 | 选择 mqtt。 |
服务器地址 | 填写 MQTT 服务器的连接地址。
|
端口号 | 填写 MQTT 服务的端口号。默认端口号是 |
Client ID | 按照 MQTT 规范,为 MQTT 驱动设置一个客户端 ID。示例: |
用户名 & 密码 | 填写分配给 MQTT 驱动的用户名和密码。
|
成功添加驱动通道后,您可以单击驱动以展示或隐藏驱动通道。
在 基本信息 标签页,单击 添加设备。
在 添加设备 面板,完成以下配置,然后单击 确定。
配置项 | 说明 |
---|---|
名称 | 为设备设置一个名称。
|
标识符 | 为设备设置一个标识符。
|
设备模板 | 选择您在步骤1:准备设备模板中为 MQTT 客户端创建的设备模板。 |
子协议名称 | 选择 mqtt。 |
Topic前缀 | 可选。设置订阅消息的 Topic 前缀。如果不设置该参数,那么驱动默认订阅以
|
标签 | 为设备添加标签。如果需要创建新的标签,输入 key 和 value 后,单击 创建标签。 |
描述 | 为设备添加描述信息。 |
完成以上操作后,MQTT 驱动将自动与 MQTT 服务器建立连接。您可以前往 MQTT 服务器的仪表盘,在 监控 > 客户端 页面查看新建的客户端。新建的客户端的 ID 就是您在驱动通道中设置的 Client ID。
在 基本信息 标签页,单击 批量添加。
在 添加设备 页面,您可以在 驱动信息 区域查看驱动相关信息,并参考下表说明完成 设备配置,然后单击 确定。
配置项 | 说明 |
---|---|
子协议类型 | 选择 mqtt。 |
设备模板 | 选择您在步骤1:准备设备模板中为 MQTT 客户端创建的设备模板。 |
设备名称 | 为设备设置一个名称。
|
标识符 | 为设备设置一个标识符。
|
Topic前缀 | 可选。设置订阅消息的 Topic 前缀。如果不设置该参数,那么驱动默认订阅以
|
标签 | 为设备添加标签。如果需要创建新的标签,输入 key 和 value 后,单击 创建标签。 |
描述 | 为设备添加描述。 |
(可选)如果需要同时添加多个设备实例,在 添加设备 后的输入框中输入要添加的设备个数,然后单击 添加设备。系统会自动生成多个设备配置条目。
(可选)如果需要批量设置一些设备参数,先勾选右上角的 批量编辑所有配置项,然后修改某个参数值,系统会同步修改所有设备的对应参数值。
说明
勾选 批量编辑所有配置项 后,如果参数配置框置灰,表示该参数不支持批量设置。
完成以上操作后,MQTT 驱动将自动与 MQTT 服务器建立连接。您可以前往 MQTT 服务器的仪表盘,在 监控 > 客户端 页面查看新建的客户端。新建的客户端的 ID 就是您在驱动通道中设置的 Client ID。
您可以通过 MQTTX 客户端向 MQTT 服务器发送测试数据。MQTT 接收的测试数据会上报到边缘智能控制台。您可以在设备实例的运行状态页面查看相关数据。
以发送 int 类型测试数据为例。在 MQTTX 客户端的连接页面,发送测试数据到以下 Topic:test/mqtt-dv1/int
。您也可以模拟发送其他类型的数据进行测试。