引言
"你有一个温度传感器,一个 MQTT broker,一个 Slack 频道。要写多少代码才能把这三者连起来?"
这是「每日一个开源项目」系列的第 179 篇。今天的项目是 Node-RED —— OpenJS Foundation 维护的可视化低代码编程工具,专门用来"把东西连在一起":硬件传感器、工业设备、REST API、数据库、消息队列,任意两点之间的数据流,在 Node-RED 里拖几个节点、连几条线就能实现。
Node-RED 的设计出发点很具体:工厂里有一台 PLC,你想把它的数据送进 InfluxDB 再显示在 Grafana 上;家里有一套智能家居设备,你想在特定条件下触发特定动作;你有一堆 SaaS API,你想让它们在特定事件下互相通信。这类"事件发生 → 处理 → 转发"的流程,Node-RED 的可视化流编辑器是专门为此设计的。
23,500 颗 Star,Apache 2.0,OpenJS Foundation 项目。Node-RED 5 已于 2026 年发布。
你会学到什么
- Node-RED 能做什么,四个核心使用场景
- 流式编程的核心概念:节点、连线、消息、流
- 工业 IoT 里用到的协议:MQTT、OPC-UA、Modbus
- Node-RED 5 的新功能:Explorer 面板、深色主题、编辑器重设计
- Node-RED、n8n、Airflow 各自的定位差异
- 在树莓派和服务器上的安装方式
前提知识
- 了解基本的网络概念(HTTP、WebSocket)
- 听说过 MQTT 或 IoT 会有帮助,但不是必须的
- 不需要 Node.js 开发经验,Node-RED 的设计目标之一就是非程序员可用
Node-RED 能做什么
场景一:工业设备数据采集和监控
这是 Node-RED 最典型的工业 IoT 场景。工厂里跑着几十台旧设备,它们通过 Modbus 或 OPC-UA 暴露传感器数据,但没有任何现代接口。
Node-RED 的做法:
PLC/传感器 (OPC-UA)
→ Node-RED (读取数据 → 格式转换 → 异常判断)
→ InfluxDB (时序数据存储)
→ Grafana (实时面板)
→ 阈值超出时 → 发送告警 (邮件/Slack/企业微信)这条链路里,Node-RED 是连接器和处理中间件:轮询 OPC-UA 节点、做单位换算、写进数据库、触发告警。整个流程在可视化编辑器里完成,不需要写一行自定义服务。
工业协议支持(通过社区节点包):
node-red-contrib-opcua— OPC-UA 读写node-red-contrib-modbus— Modbus TCP/RTUnode-red-node-serialport— 串口通信node-red-contrib-s7— 西门子 S7 PLC
场景二:IoT 设备自动化(MQTT 中心)
MQTT 是 IoT 设备最常用的消息协议,Node-RED 对 MQTT 有原生内置支持:
温湿度传感器 → MQTT broker → Node-RED
→ 如果温度 > 28°C
→ 打开空调 (HTTP 命令到智能插座)
→ 记录日志 (写 CSV 文件)
→ 如果湿度 < 30%
→ 触发加湿器 (MQTT publish)这类条件逻辑用节点拼接,switch 节点做分支,function 节点写少量 JavaScript 处理复杂逻辑,mqtt-out 节点发布消息。整条流程直观可见。
场景三:API 集成和数据管道
不只是硬件场景,Node-RED 在纯软件的 API 集成场景里同样有用:
- 每小时从第三方 API 拉取数据,转换格式后写进 PostgreSQL
- 用户在表单提交数据 → 验证 → 分发到 CRM 和邮件服务
- GitHub webhook 触发 → 发 Slack 通知 + 创建 Jira 工单
- 聚合多个数据源 → 定时生成报告
http in 节点接收 webhook,http request 节点调用外部 API,json 节点做格式转换,change 节点操作消息字段——这些节点组合起来可以处理大多数 API 集成需求。
场景四:边缘计算预处理
在边缘网关上跑 Node-RED,在数据上云之前做本地预处理:
传感器原始数据 (高频率,大量)
→ Node-RED (在边缘网关上)
→ 数据聚合(每秒 1000 条 → 每分钟 1 条均值)
→ 异常检测(本地实时响应,不依赖云端)
→ 只把聚合后的数据上传云端(带宽节省 99%)Node-RED 可以跑在树莓派 4、工业边缘计算盒子、任何能跑 Node.js 的设备上,消耗资源极少。
核心概念:流式编程
节点(Node)
节点是 Node-RED 的基本单元,每个节点做一件具体的事:
| 节点类型 | 用途 |
|---|---|
inject | 触发器,定时或手动发起消息 |
debug | 把消息内容打印到调试面板 |
function | 用 JavaScript 处理消息逻辑 |
switch | 条件分支,根据消息属性路由 |
change | 修改、删除、移动消息字段 |
http in | 接收 HTTP 请求 |
http request | 发出 HTTP 请求(调用 API) |
mqtt in/out | 订阅/发布 MQTT 消息 |
template | Mustache 模板,生成文本输出 |
file | 读写本地文件 |
delay | 限速或延时 |
连线(Wire)和消息(Message)
节点之间用连线连接,数据通过消息对象从左向右流动:
// 每条消息是一个 JavaScript 对象,核心属性是 payload
{
"payload": "传感器读数:23.5°C",
"topic": "sensor/temperature/room1",
"timestamp": 1722700800000
}function 节点里可以写 JavaScript 处理消息:
// function 节点:把原始读数转换为结构化对象
const temp = parseFloat(msg.payload);
msg.payload = {
value: temp,
unit: "celsius",
fahrenheit: (temp * 9/5) + 32,
alert: temp > 28
};
return msg;流(Flow)和子流(Subflow)
流是一张画布,多个节点和连线组成一个完整的逻辑。大型项目可以把相关节点打包成子流,像一个可复用的模块使用,类似函数封装。
上下文存储(Context)
节点可以在以下三个作用域存储数据,在流里共享状态:
// 节点私有(只当前节点可读写)
context.set("count", 0);
// 流级别(同一 flow 所有节点共享)
flow.set("lastValue", msg.payload);
// 全局(所有 flow 所有节点共享)
global.set("config", { threshold: 28 });节点生态系统
Node-RED 的核心价值之一是庞大的社区节点库。官方 Flow Library 收录了数千个社区贡献的节点包,npm install 直接安装:
数据库
node-red-node-mongodb— MongoDB 读写node-red-node-influxdb— InfluxDB 时序数据库node-red-contrib-postgresql— PostgreSQL
消息中间件
node-red-contrib-kafka-manager— Apache Kafkanode-red-node-rabbitmq— RabbitMQ- 内置 MQTT 节点(无需额外安装)
云平台
node-red-contrib-aws— AWS S3, DynamoDB, Lambdanode-red-contrib-googlecloud— Google Cloud 服务node-red-contrib-azure-iot-hub— Azure IoT Hub
AI/LLM(2025 年新热点)
node-red-contrib-ollama— 本地 Ollama LLM@democratize-ai/node-red-contrib-openai— OpenAI API- Node-RED Con 2026 上 LLM + MCP 集成是重点议题
Node-RED 5:新版本变化
2026 年发布的 Node-RED 5 主要专注于开发体验改善:
Explorer 面板
全新的 Explorer 侧边栏,提供所有流的结构化视图。以前大型项目有几十个 tab,找一个特定流要挨个点。现在 Explorer 面板提供类似文件树的导航,快速定位任意流和节点。
重设计的侧边栏
左右两侧边栏行为统一,控制项分组整理,不再散落在各处菜单。支持侧边栏垂直分割,同时展示两个面板。
内置深色主题
Node-RED 4 及以前需要安装第三方包才能用深色主题,5.0 直接内置。同时做了默认主题的无障碍审查,改善了工业环境(工厂控制室光线复杂)下的可读性。
系统要求变化
- 要求 Node.js 22.9+(推荐 Node.js 24)
- 放弃 32 位 ARM 支持,树莓派 3B 及更早型号不再支持(树莓派 4 和 5 不受影响)
安装和快速上手
最快安装方式(全局 npm 包)
# 安装
sudo npm install -g --unsafe-perm node-red
# 启动
node-red
# 访问编辑器
# 浏览器打开 http://localhost:1880树莓派安装(官方推荐脚本)
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
# 设置为系统服务(开机自启)
sudo systemctl enable nodered.service
sudo systemctl start nodered.serviceDocker 部署
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red第一个流:HTTP 请求触发 → 获取数据 → 返回结果
在编辑器里:
- 拖入
http in节点,方法 GET,路径/weather - 拖入
http request节点,URL 填天气 API 地址 - 拖入
function节点,写解析逻辑:const data = JSON.parse(msg.payload); msg.payload = { city: data.name, temp: data.main.temp, desc: data.weather[0].description }; return msg; - 拖入
http response节点 - 用线把四个节点从左到右连起来
- 点击 Deploy
访问 http://localhost:1880/weather 就能看到结果。整个过程不到 5 分钟。
Node-RED vs n8n vs Airflow:各自的定位
上一篇(#177)介绍了 Airflow,今天讲 Node-RED,两者经常被放在一起比较。加上 n8n,这三个工具的定位其实差异很大:
| 维度 | Node-RED | n8n | Apache Airflow |
|---|---|---|---|
| 核心场景 | IoT / 工业 / 边缘计算 | 业务流程自动化 / SaaS 集成 | 数据管道 / ETL / MLOps |
| 触发方式 | 事件驱动(实时) | 触发器 + 定时 | 定时 + 数据就绪 |
| 编程方式 | 可视化拖拽 + 少量 JS | 可视化 + 代码混合 | Python 代码 |
| 协议支持 | MQTT, OPC-UA, Modbus, 串口 | HTTP, WebSocket, SaaS API | 主要 HTTP/数据库 |
| 部署目标 | 边缘设备 / 树莓派 / 网关 | 服务器 / 云 | 服务器 / 集群 |
| 历史记录 | 弱(无内置任务历史) | 中等 | 强(完整执行历史) |
| 目标用户 | 工程师 + 硬件开发者 | 技术运营 / 开发者 | 数据工程师 |
选择逻辑:
- 要连硬件、跑在树莓派上、处理 MQTT/OPC-UA → Node-RED
- 要连 SaaS 服务、自动化业务流程、非技术人员也能用 → n8n
- 要管理几十个相互依赖的数据管道、需要完整的调度历史 → Airflow
项目地址与资源
- 🌟 GitHub: node-red/node-red
- 🌐 官网: nodered.org
- 📖 文档: nodered.org/docs
- 🧩 节点库: flows.nodered.org
- 💬 社区论坛: discourse.nodered.org
- 🎓 Node-RED Con 2026: 年度社区大会
总结
Node-RED 解决的是一个在数据工程和 IoT 交叉地带长期存在的痛点:两台设备或两个服务之间需要数据流,但从头写一个服务来做这件事成本太高、而且这件事本来就不是业务逻辑,只是"胶水代码"。
它的设计哲学很明确:把连接本身变成一等公民。每个节点封装一种连接能力,每条线代表数据流向,整个业务逻辑在画布上可见、可拖拽、可修改。这在硬件和工业场景里特别有价值——工厂工程师不一定会写 Python 服务,但能看懂一张流程图。
Node-RED 不适合替代 Airflow 管理复杂的批处理数据管道,也不适合替代 n8n 做业务流程自动化。它最擅长的是:实时事件、硬件协议、边缘节点,三者交汇的地方,Node-RED 是这个生态里最成熟、社区最活跃的工具。
探索 PrimeSkills —— 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。
欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。