本文介绍了如何借助北向通道将边缘节点采集的设备属性数据上报到第三方 MQTT 服务器。
准备一个边缘节点,并完成模拟数据源。
注意
边缘智能软件版本必须在 v2.7.0 及以上。
准备一个 MQTT broker。
在本文中,我们使用免费的公共 MQTT broker 进行测试。
注意
请勿在生产环境中使用公共 MQTT broker,否则可能带来安全风险和导致业务停机。
准备一个 MQTT client 工具。
在本文中,我们使用 MQTTX。
参照创建北向通道,创建一个北向通道。
按以下方式配置数据源(source)和数据目的地(sink):
类型 | 配置项 | 说明 |
---|---|---|
数据源配置 | 节点 | 选择您的边缘节点。 |
设备模板 | 选择 全部。 | |
驱动模板 | 选择 全部。 | |
设备实例 | 选择您在模拟数据源操作中,接入到边缘节点的虚拟设备。 | |
sink 节点配置 | sink 类型 | 选择 mqtt。 |
参数配置 |
|
完成以上配置后,单击 连通性测试。确保连通性测试成功,然后单击 保存。
准备工作完成后,北向通道将被部署到边缘节点。当北向通道正常运行时,虚拟设备的随机属性数据将被上报到 MQTT broker。您可以按以下方式进行验证:
tcp://broker.emqx.io:1883
)并订阅设备属性数据(vei/device/data/report
)。在客户端可以看到边缘节点上报到 MQTT broker 的设备属性数据。
在生产环境中,如果您的 MQTT broker 对消息发送客户端有要求,您可按需修改以下客户端参数:clientId
、protocolVersion
、qos
、retained
、compression
、username
& password
。
要修改消息发送客户端的参数,按以下方式配置:
北向通道保存后会自动重新部署。当修改后的北向通道正常运行时,您可以到 MQTTX 客户端验证结果。如果在 MQTTX 客户端可以正常收到设备属性数据,则表示参数修改成功。(边缘节点依据修改后的参数,成功连接到 MQTT broker 并发送设备属性数据到 MQTT broker。)
默认情况下,边缘节点采集到的设备属性数据会以原始格式转发到目标 MQTT broker。如果目标 MQTT broker 需要特定的数据格式,您可以相应地修改数据转发格式。
要修改数据转发格式,按以下方式配置:
dataTemplate
参数,并定义该参数的值为数据格式转换逻辑。说明
如需编写数据格式转换逻辑,可以参考设备数据采集 - 原始数据格式以及使用 Golang template。您也可以提交工单联系我们,以获取帮助。
修改数据转发格式后,您可前往 MQTTX 客户端进行验证。在最新接收到的数据中,如果数据格式符合预期,表示数据转发格式已经修改成功。
下表介绍了 mqtt sink 支持的所有参数。
参数 | 数据类型 | 是否必选 | 说明 | 示例值 |
---|---|---|---|---|
server | String | 是 | MQTT broker 地址。 |
|
topic | String | 是 | 上报到 MQTT broker 的消息主题。 |
|
clientId | String | 否 | 指定连接 MQTT broker 的客户端 ID。 |
|
protocolVersion | String | 否 | 指定使用的 MQTT 协议版本。该参数有以下取值:
|
|
qos | Integer | 否 | 消息转发的服务质量。该参数以下取值:
数值越高,消息传递可靠性就越强,但通信开销和延迟也会增加。 |
|
retained | Boolean | 否 | 指定 MQTT broker 是否应保留当前主题的最近一条消息,以便对此主题感兴趣的订阅者可以离线,并随时重新连接以接收最新消息,而不必在订阅后等待发布者的下一条消息。默认值为 |
|
compression | String | 否 | 使用指定的压缩方法压缩 Payload。该参数有以下取值: |
|
username | String | 否 | 连接 MQTT broker 的用户名称。 |
|
password | String | 否 | 连接 MQTT broker 的用户密码。 |
|
insecureSkipVerify | Boolean | 否 | 是否跳过证书验证。默认值为 |
|
enableCache | Boolean | 否 | 是否启用本地缓存。默认值为 |
|
cleanCacheAtStop | Boolean | 否 | 北向通道停止处理时是否清除缓存。默认值为 |
|
memoryCacheThreshold | Integer | 否 | 本地内存中允许缓存的最大消息数量。默认值为 |
|
maxDiskCache | Integer | 否 | 本地磁盘中允许缓存的最大消息数量。默认值为 |
|
bufferPageSize | Integer | 否 | 缓冲区每页中包含的消息数量,防止频繁 IO。默认值为 |
|
ResendInterval | Integer | 否 | 重新发送缓存消息的时间间隔(毫秒)。默认值为 |
|