一天一个开源项目

开源项目第179期:Node-RED — 把硬件、API 和在线服务连在一起的可视化编程工具

OpenJS Foundation 出品的低代码事件驱动编程平台。用浏览器里的可视化编辑器,把节点拖出来、连上线,就能建立从传感器到数据库、从 MQTT 到 HTTP API 的完整数据流。工业 IoT 的事实标准工具之一,支持 OPC-UA、Modbus、MQTT 等工业协议,可跑在树莓派、工厂边缘网关、云服务器。Node-RED 5 带来了 Explorer 面板、深色主题和全面改版的编辑器。23.5k Stars,Apache 2.0。

·约 11 分钟阅读·IoT & Automation

引言

"你有一个温度传感器,一个 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/RTU
  • node-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 消息
templateMustache 模板,生成文本输出
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 Kafka
  • node-red-node-rabbitmq — RabbitMQ
  • 内置 MQTT 节点(无需额外安装)

云平台

  • node-red-contrib-aws — AWS S3, DynamoDB, Lambda
  • node-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.service

Docker 部署

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

第一个流:HTTP 请求触发 → 获取数据 → 返回结果

在编辑器里:

  1. 拖入 http in 节点,方法 GET,路径 /weather
  2. 拖入 http request 节点,URL 填天气 API 地址
  3. 拖入 function 节点,写解析逻辑:
    const data = JSON.parse(msg.payload);
    msg.payload = {
        city: data.name,
        temp: data.main.temp,
        desc: data.weather[0].description
    };
    return msg;
  4. 拖入 http response 节点
  5. 用线把四个节点从左到右连起来
  6. 点击 Deploy

访问 http://localhost:1880/weather 就能看到结果。整个过程不到 5 分钟。


Node-RED vs n8n vs Airflow:各自的定位

上一篇(#177)介绍了 Airflow,今天讲 Node-RED,两者经常被放在一起比较。加上 n8n,这三个工具的定位其实差异很大:

维度Node-REDn8nApache Airflow
核心场景IoT / 工业 / 边缘计算业务流程自动化 / SaaS 集成数据管道 / ETL / MLOps
触发方式事件驱动(实时)触发器 + 定时定时 + 数据就绪
编程方式可视化拖拽 + 少量 JS可视化 + 代码混合Python 代码
协议支持MQTT, OPC-UA, Modbus, 串口HTTP, WebSocket, SaaS API主要 HTTP/数据库
部署目标边缘设备 / 树莓派 / 网关服务器 / 云服务器 / 集群
历史记录弱(无内置任务历史)中等强(完整执行历史)
目标用户工程师 + 硬件开发者技术运营 / 开发者数据工程师

选择逻辑

  • 要连硬件、跑在树莓派上、处理 MQTT/OPC-UA → Node-RED
  • 要连 SaaS 服务、自动化业务流程、非技术人员也能用 → n8n
  • 要管理几十个相互依赖的数据管道、需要完整的调度历史 → Airflow

项目地址与资源


总结

Node-RED 解决的是一个在数据工程和 IoT 交叉地带长期存在的痛点:两台设备或两个服务之间需要数据流,但从头写一个服务来做这件事成本太高、而且这件事本来就不是业务逻辑,只是"胶水代码"。

它的设计哲学很明确:把连接本身变成一等公民。每个节点封装一种连接能力,每条线代表数据流向,整个业务逻辑在画布上可见、可拖拽、可修改。这在硬件和工业场景里特别有价值——工厂工程师不一定会写 Python 服务,但能看懂一张流程图。

Node-RED 不适合替代 Airflow 管理复杂的批处理数据管道,也不适合替代 n8n 做业务流程自动化。它最擅长的是:实时事件、硬件协议、边缘节点,三者交汇的地方,Node-RED 是这个生态里最成熟、社区最活跃的工具。


探索 PrimeSkills —— 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。

欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。