如何在 Node-RED 中使用 MQTT
作者:社区 / 开发者
2023年6月27日
导航到
传统的通信方法难以确保物联网系统内部的高效、可靠、实时数据交换,导致性能不佳、数据丢失和整体效率低下。常规协议无法满足低带宽、间歇性连接和即时响应的需求。结合 Node-RED 的视觉优雅,MQTT 成为一个强大的解决方案,轻松地架起了设备、应用程序和数据源之间的桥梁。
本文将通过深入探讨 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代理节点:此节点表示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为8883),因此您需要在服务器字段中输入代理的URL或IP地址。如果您在本地运行代理,服务器地址将是localhost。
配置MQTT发布节点
从Node-RED调色板中将MQTT-out节点拖放到画布上。
双击MQTT-out节点以打开其配置对话框。
在配置对话框中,单击Server字段旁边的铅笔图标以创建新的代理配置。
通过在服务器字段中添加代理的地址、端口以及如果需要任何认证凭据来编辑MQTT代理设置。
单击完成以保存代理设置。
在配置对话框中,配置以下字段
-
主题:输入您想发布消息的MQTT主题。我们将添加sensors/humidity作为主题。
-
QoS:选择所需的QoS级别以进行消息传递(0、1或2)。
-
保留:选择是否在代理上保留发布的消息(true或false)。
-
名称:可选地,为您的节点提供一个有意义的名称。
单击完成以保存配置。
配置MQTT订阅节点
将 Node-RED 调色板中的 MQTT-in 节点拖放到画布上。
双击 MQTT-in 节点以打开其配置对话框。
在配置对话框中,配置以下字段
-
服务器:由于我们已经在 MQTT-in 节点中配置了代理,因此它应该已经预先填充。如果没有,您可以通过点击铅笔图标重复这些步骤。
-
操作:您可以订阅单个主题或具有动态订阅。使用动态订阅,您可以使用函数节点或其他处理节点从消息的有效负载中提取所需的 MQTT 主题。由于我们知道我们想要的主题,我们将订阅单个主题。
-
主题:输入您想要订阅的 MQTT 主题(sensors/humidity)。
-
QoS:选择所需的QoS级别以进行消息传递(0、1或2)。
-
名称:可选地,为您的节点提供一个有意义的名称。
单击完成以保存配置。
从调色板中将 inject 节点拖放到画布上。将 inject 节点连接到将生成随机值并连接到 MQTT-out 节点的函数节点。您可以将 inject 节点设置为在设置的时间间隔后重复,例如十秒。
// 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 节点的输出连接到您流程中的 debug 节点,以将消息有效负载传递到 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 的结合。通过获取 InfluxDB,迈出将您的通信和工业原型设计景观转变为第一步骤。
其他资源
- Node Red 仪表盘教程
- MQTT 用例
- Home Assistant Webhooks 教程
- 开始使用 Home Assistant 和 Docker
- Home Assistant 集成指南
- Home Assistant 和 Grafana 教程
- Python 和 MQTT 教程
本文由Mercy Kibet撰写。 Mercy是一位全栈开发者,擅长学习和撰写有关新颖有趣的科技栈。