活动报名
消费电子产品的智能体升级之路 →

使用 Node-RED 处理 MQTT 数据

Shifan Yu
2024-9-9
使用 Node-RED 处理 MQTT 数据

Node-RED 简介

Node-RED 是一款编程工具,用于连接硬件设备、应用程序接口(API)和在线服务。它提供了一个基于浏览器的编辑器,使用户能够轻松地通过拖放各种节点来创建和管理流程。创建的流程可以一键部署到运行环境中。

Node-RED 支持 MQTT 协议,其中使用 mqtt-in 节点来接收数据,使用 mqtt-out 节点来发送数据。

Node-RED 的主要特性包括

  • 基于流程的编程:通过可视化地连接节点来构建应用程序。
  • 丰富的节点库:提供多种节点,用于处理不同类型的输入、输出和任务。
  • 通过消息通信:节点通过相互传递消息进行通信。
  • 基于浏览器的编辑器:易于使用的界面,用于创建和部署流程。
  • 可扩展性:支持创建自定义节点,扩展功能以满足特定需求。
  • 社区驱动开发:基于 JSON 的流程可以轻松地导入和导出,并且能够通过在线流程库进行分享。

MQTT 简介

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,特别适合资源受限的设备以及低带宽、高延迟或不稳定的网络环境。它在物联网(IoT)应用中非常流行,常用于传感器、执行器和其他设备之间的高效通信。

使用 MQTT 需要一个中央 Broker,例如 EMQX,它能确保可靠的消息传递并有效地扩展系统。

MQTT PUB SUB

MQTT 与 Node-RED 结合使用的优势

将 MQTT 与 Node-RED 结合使用,为各种应用提供了强大的解决方案,尤其在物联网和实时数据处理方面。

  1. 高效的数据处理:Node-RED 能够实时处理 MQTT 消息,可以对传感器数据和其他输入作出快速反应。
  2. 使用简便:Node-RED 提供可视化编程界面,使复杂工作流的创建和部署变得简单,无需深入了解编程知识。
  3. 适用于物联网:Node-RED 的灵活性和丰富的节点库,使其能够无缝连接和处理各种物联网设备的数据。MQTT 提供的服务质量(QoS)级别、保留消息遗嘱消息(LWT)功能,确保了在低带宽、高延迟或不可靠网络中的高效通信。
  4. 广泛适用性:Node-RED 不仅限于物联网应用,还适用于家庭自动化、工业自动化、数据可视化以及与云服务集成。
  5. 可扩展性:Node-RED + MQTT 支持构建可扩展的解决方案,能够高效处理大量设备和数据。

通过将 Node-RED 的可视化流程开发与 MQTT 的强大功能和轻量特性相结合,您可以在多个领域快速构建出具有可扩展性、可靠性和高效性的应用程序。

安装 Node-RED

Node-RED 可以安装在个人电脑、树莓派或云服务器等设备上,安装过程简单快捷。以下是两种常见的安装方法:

使用 npm 进行全局安装:

npm install -g --unsafe-perm node-red

使用 Docker 进行安装:

docker run -it -p 1880:1880 --name mynodered nodered/node-red

启动 Node-RED

如果通过 npm 全局安装 Node-RED,安装完成后,只需运行 node-red 命令,就能立即启动 Node-RED。

无论使用 Docker 还是 npm,成功启动后,只需在浏览器中输入当前地址和端口号 1880,即可访问 Node-RED 的编辑界面。例如,如果在本地运行,打开浏览器并输入 http://127.0.0.1:1880。当看到下图所示的页面时,表示 Node-RED 已成功启动:

Node-RED

在 Node-RED 中使用 MQTT

在本文中,我们将使用 EMQ 提供的免费公共 MQTT Broker,该 Broker 基于 EMQX Platform 构建。服务器详细信息如下:

  • TCP 端口: 1883
  • SSL/TLS 端口: 8883
  • WebSocket 端口: 8083
  • SSL/TLS 端口: 8883
  • Secure WebSocket 端口: 8084

下面将分两部分介绍如何在 Node-RED 中使用 MQTT,基础部分介绍如何配置 MQTT 节点并连接到 MQTT Broker,进阶部分将讨论如何处理数据。

基础部分:配置 MQTT 节点并连接到 MQTT Broker

首先,打开浏览器并访问 http://host:1880,创建默认的 Flow 1。然后按照以下步骤操作:

1. 配置订阅节点:消息输入

1.1. 添加 MQTT-in 节点:从调色板中拖拽 mqtt-in 节点到中央画布,然后双击该节点打开配置页面。

1.2. 配置 MQTT Broker:点击 Server 旁的编辑按钮,添加新的 MQTT Broker,输入 Broker 地址 broker.emqx.io 及其他连接详细信息,然后点击 Add 以保存 Broker 配置。

Configure MQTT Broker

1.3. 订阅主题:输入您想订阅的主题,如 test/node_red/in,选择合适的 QoS 级别,然后单击 Done 保存节点配置。

Subscribe to a Topic

2. 配置发布节点:消息输出

2.1. 添加 MQTT-out 节点:将 mqtt-out 节点拖到中央画布上,然后双击打开配置页面。

2.2. 配置 MQTT Broker:确保选择了先前配置的 MQTT Broker。

2.3. 发布到主题:输入您要发布的主题,如 test/node_red/out,选择适当的 QoS 级别,配置是否保留消息,然后单击 Done 保存节点配置。

Publish to a Topic

3. 部署和测试

3.1. 连接节点:将画布上的 mqtt-in 节点连接到 mqtt-out 节点,然后点击右上角的 Deploy 按钮来部署流程。

Connect Nodes

3.2. 验证连接:部署后,您应在每个节点下看到 connected 状态,表明已成功连接到 MQTT Broker。

3.3. 使用 MQTTX 客户端测试:使用 MQTTX 作为您的 MQTT 客户端进行测试。向 test/node_red/in 主题发布消息,并订阅 test/node_red/out 主题,以验证消息接收情况。

Test with MQTTX Client

按照上述步骤,您将成功在 Node-RED 中配置 MQTT 节点来处理消息的接收和发送。接下来,我们将探讨如何处理接收到的数据。

进阶部分:处理 MQTT 数据

1. 数据访问

1.1. 添加 JSON 节点:将 JSON 节点拖拽到画布上,并双击打开其配置页面。

1.2. 配置 JSON 转换:将 Action 设置为 Always Convert to JavaScript Object,确保接收到的消息被正确转换为 JSON 格式。

1.3. 连接节点:将 JSON 节点连接到 mqtt-in 节点。

Connect Nodes

2. 数据过滤

2.1. 添加过滤器节点:将 filter 节点拖拽到画布上,并双击打开其配置页面。

2.2. 配置过滤规则:将 Mode 设置为 block unless value changes,将 Property 设置为 msg.payload.temperature,以便根据温度值过滤消息。

2.3. 连接节点:将 filter 节点连接到 JSON 节点。

Connect the filter node to the JSON node

3. 使用模板

3.1. 添加模板节点:将 Template 节点拖拽到画布上,并双击打开其配置页面。

3.2. 配置模板:输入模板内容来格式化过滤后的数据。

3.3. 可选步骤:如果希望直接输出结果,可以跳过添加模板节点的步骤。

Optional Step

4. 发送处理后的数据

4.1. 添加 MQTT-out 节点:在画布上拖拽一个 mqtt-out 节点,并双击打开其配置页面。

4.2. 配置 MQTT Broker:确保选择了之前配置的 MQTT Broker。

4.3. 配置主题:输入用于发布处理后数据的主题,例如 test/node_red/out,并设置所需的 QoS 级别。

4.4. 连接节点:将 MQTT-out 节点连接到 Template 节点。

Connect the MQTT-out node to the template node

5. 部署和测试

5.1. 部署该流程:单击右上角的 Deploy 按钮进行部署。

5.2. 使用 MQTTX 客户端进行测试

  • test/node_red/in 主题发布一条消息,让 Node-RED 接收该数据。
  • 订阅 test/node_red/out 主题,验证已处理的消息是否按照设定的模板接收。
  • 检查 Node-RED 中的过滤逻辑,确保重复发送相同消息时不会重复接收。只有在温度值发生变化时,才会收到新的信息。

Test with MQTTX Client

通过这些步骤,您可以成功配置 Node-RED 来处理、过滤 MQTT 数据,并将处理后的数据通过 MQTT 发送出去。

结语

至此,我们完成了安装 Node-RED、连接 MQTT 云服务、过滤和处理 MQTT 消息,并最终发送处理后的数据的整个过程。Node-RED 的用户界面简化了业务逻辑的描述,降低了非专业开发人员的入门门槛。用户可以利用可视化工具,通过连接简单的节点,快速创建复杂的任务,这在物联网应用场景中尤为有用。

咨询 EMQ 技术专家
联系我们 →

推荐阅读

2021-8-3Shifan Yu
使用 MQTTLens 接入 EMQX Cloud

本文将以 MQTTLens 作为 MQTT 客户端测试工具接入 EMQX Cloud,通过本文你将能快速了解 MQTTLens 的基础用法及 MQTT 协议的使用。