如何在 Node-RED 中使用 MQTT
作者:社区 / 开发者
2023年6月27日
导航至
传统的通信方法难以确保物联网系统内高效、可靠、实时的数据交换,从而导致性能欠佳、数据丢失和整体效率低下。传统的协议无法满足低带宽、间歇性连接和即时响应的需求。与 Node-RED 的可视化优雅性相结合,MQTT 变成了一个强大的解决方案,可以轻松地弥合设备、应用程序和数据源之间的差距。
本文将深入探讨 Node-RED 环境中 MQTT 的复杂性,深入研究其核心功能、实施策略和实际应用。
什么是 MQTT?
MQTT 是一种精简而高效的消息传递协议,专为资源受限的环境而精心设计。当远程设备面临处理能力受限、内存有限和网络带宽受限等约束时,它尤其出色。
MQTT 基于客户端-服务器模型运行,其中客户端(设备或应用程序)与中央服务器(MQTT 代理)通信。客户端可以将消息发布到代理上的主题,或订阅主题以接收来自其他客户端的消息。代理根据主题结构在客户端之间路由消息。
MQTT 中的关键概念包括以下内容
-
主题:主题是与消息关联的分层字符串。客户端可以将消息发布到特定主题并订阅主题以接收消息。例如,气象站可能会将温度数据发布到类似“sensors/weather/temperature”的主题。
-
服务质量 (QoS):MQTT 通过其 QoS 级别提供不同级别的消息传递保证。QoS 0(最多一次)、QoS 1(至少一次)和 QoS 2(精确一次)。
-
保留消息:保留消息是代理存储并立即传递给新订阅者的消息。这对于向连接的新客户端提供最新信息非常有用。
-
遗嘱 (LWT):客户端可以指定“遗嘱”消息,如果客户端意外断开连接,代理将向指定主题发送该消息。这可以在设备突然离线时通知其他人。
-
会话持久性:MQTT 支持干净会话和持久会话。在持久会话中,即使客户端断开连接并在稍后重新连接,代理也会记住客户端的订阅状态和排队的消息。
什么是 Node-RED?
Node-RED 是一种开源可视化编程工具,允许用户通过将各种节点连接在一起来直观地创建流程以执行任务。Node-RED 通常用于工业原型设计、物联网 (IoT)、自动化项目,以连接设备、API 和在线服务。
Node-RED 的一些主要功能和概念包括以下内容
-
用于不同功能的节点,例如输入、输出、处理等。
-
基于流程的编程,使您能够通过创建可视化流程来构建应用程序。通过将节点拖放到画布上并将它们连接起来以定义应用程序的逻辑来创建流程。
-
消息传递,它允许节点通过沿着连接它们的线路传递消息来相互通信。这些消息可以包含触发特定操作的数据或命令。
MQTT 节点
在 Node-RED 中,MQTT 节点有助于使用 MQTT 协议进行通信。这些节点允许您与 MQTT 代理交互、将消息发布到 MQTT 主题以及订阅 MQTT 主题以接收消息。Node-RED 提供了多个 MQTT 节点,您可以在流程中使用它们。
以下是一些常见的 MQTT 节点
-
MQTT-broker 节点:此节点表示 MQTT 代理连接。它配置到 MQTT 代理的连接详细信息,例如代理的地址、端口和凭据。配置完成后,流程中的其他 MQTT 节点可以引用此代理配置。
-
MQTT-in 节点(MQTT 输入):MQTT-in 节点订阅 MQTT 主题并从代理接收消息。当消息发布到订阅的主题时,MQTT-in 节点会触发并将接收到的消息传递到流程中的后续节点以进行进一步处理。
-
MQTT-out 节点(MQTT 输出):MQTT-out 节点将消息发布到 MQTT 主题。您可以配置要发布的消息的主题和有效负载。消息可以是静态的,也可以根据流程中其他节点的数据动态生成。
如何在 Node-RED 中连接和使用 MQTT
为了帮助您了解如何在 Node-RED 中使用 MQTT,我们将模拟一个流程,在该流程中,我们正在跟踪湿度传感器发出的数据。
要在 Node-RED 中连接到 MQTT,您需要一个代理。代理是发布客户端和使用者或订阅者客户端发送的消息的中间人。对于我们的情况,我们将使用 Eclipse Mosquitto 代理,但您可以使用其他代理,例如 HiveMQ、Cloud MQTT 或 EMQX。
确保您已安装代理并正在运行它。默认情况下,代理在端口 1883 或 8883(对于 TLS)上运行,因此您将在服务器字段中输入代理的 URL 或 IP 地址。如果您在本地运行代理,则服务器地址将为 localhost。
配置 MQTT 发布节点
将 MQTT-out 节点从 Node-RED 调色板拖放到画布上。
双击 MQTT-out 节点以打开其配置对话框。
在配置对话框中,单击服务器字段旁边的铅笔图标以创建新的代理配置。
通过在服务器字段中添加代理的地址、端口以及任何身份验证凭据(如果需要)来编辑 MQTT 代理设置。
单击完成以保存代理设置。
在配置对话框中,配置以下字段
-
主题:输入您要向其发布消息的 MQTT 主题。我们将添加 sensors/humidity 作为主题。
-
QoS:为消息传递选择所需的 QoS 级别(0、1 或 2)。
-
保留:选择是否在代理上保留已发布的消息(真或假)。
-
名称:可选,为您的节点指定有意义的名称。
单击完成以保存配置。
配置 MQTT 订阅节点
将 MQTT-in 节点从 Node-RED 调色板拖放到画布上。
双击 MQTT-in 节点以打开其配置对话框。
在配置对话框中,配置以下字段
-
服务器:由于我们已经在 MQTT-in 节点中配置了代理,因此它应该已预先填充。如果未填充,您可以单击铅笔图标重复步骤。
-
操作:您可以订阅单个主题或进行动态订阅。使用动态订阅,您可以使用函数节点或其他处理节点从消息的有效负载中提取所需的 MQTT 主题。由于我们知道我们想要的主题,因此我们将订阅单个主题。
-
主题:输入您要订阅的 MQTT 主题 (sensors/humidity)。
-
QoS:为消息传递选择所需的 QoS 级别(0、1 或 2)。
-
名称:可选,为您的节点指定有意义的名称。
单击完成以保存配置。
将注入节点从调色板拖放到画布上。将注入节点连接到将生成随机值的函数节点,然后连接到 MQTT-out 节点。您可以将注入节点设置为在设定的时间间隔(如十秒)后重复。
// Generate a random humidity value between 0 and 100
var randomHumidity = Math.random() * 15;
// Create the message object with the random humidity value
var msg = {
payload: randomHumidity,
topic: "sensors/humidity"
};
// Return the message object
return msg;
将 MQTT-in 节点的输出连接到流程中的调试节点,以将消息有效负载传递到 Node-RED 编辑器右侧的调试选项卡。
通过单击 Node-RED 界面右上角的部署按钮来部署您的流程。
完成这些配置后,MQTT-out 节点将消息发布到指定的主题,并且 MQTT-in 节点将订阅指定的主题以接收来自 MQTT 代理的消息。确保 MQTT-out 和 MQTT-in 节点中的主题配置匹配,以建立正确的通信。
Node-RED 和 MQTT 的应用
Node-RED 与 MQTT 相结合,开辟了许多实际应用,尤其是在物联网、自动化和实时数据处理领域。以下是一些可以有效使用 Node-RED 和 MQTT 的实际应用
家庭自动化
您可以使用 MQTT 连接各种 物联网设备,例如灯、恒温器、门传感器和运动检测器。Node-RED 流程可以根据传感器输入、时间表或用户定义的规则来控制和协调这些设备。
工业物联网 (IIoT)
使用 MQTT,Node-RED 可以连接到工业环境中的工业传感器、可编程逻辑控制器 (PLC) 和机械。这实现了工业过程的实时监控、数据分析和远程控制。
环境监测
MQTT 可以将来自环境传感器(温度、湿度、空气质量等)的数据传输到中央服务器。Node-RED 可以处理这些数据以触发警报、可视化趋势并根据环境变化执行自动化操作。
能源管理
Node-RED 可以通过 MQTT 与智能电表和传感器连接来帮助监控能源消耗。它可以跟踪能源使用模式、优化能源分配,并在高峰时段触发操作以减少能源消耗。
农业
田地中连接 MQTT 的传感器可以监控土壤湿度、温度和其他变量。Node-RED 可以处理这些数据以优化灌溉计划、自动化温室环境控制并加强作物管理。
安全和监控
MQTT 可以将来自安全摄像头、运动检测器和门禁系统的数据传输到 Node-RED。Node-RED 可以触发警报、自动化响应并显示实时视频流。
总结
当 MQTT 与直观的可视化编程工具 Node-RED 和强大的时间序列数据库 InfluxDB 结合使用时,MQTT 的强大功能真正得以体现。立即获取 InfluxDB,迈出改变您的通信和工业原型设计格局的第一步。
其他资源
- Node Red 仪表板教程
- MQTT 用例
- Home Assistant Webhook 教程
- Home Assistant 和 Docker 入门
- Home Assistant 集成指南
- Home Assistant 和 Grafana 教程
- Python 和 MQTT 教程
这篇文章由 Mercy Kibet 撰写。Mercy 是一位全栈开发人员,擅长学习和撰写关于新的和有趣的科技堆栈的文章。