Node-RED:输入节点全家桶:数据从哪里来?
Node-RED:输入节点全家桶:数据从哪里来?
文章目录
- Node-RED:输入节点全家桶:数据从哪里来?
- 摘要
- 一、Inject 节点:你的“手动开关”
- 📌 适用场景:
- 🔧 核心配置:
- 💡 高级技巧:
- 二、HTTP In 节点:把 Node-RED 变成 Web 服务
- 📌 适用场景:
- 🔧 核心配置:
- 🌰 典型流程:
- 💡 关键细节:
- 三、MQTT In 节点:物联网的“神经末梢”
- 📌 适用场景:
- 🔧 核心配置:
- 💡 最佳实践:
- 四、Watch 节点:监听文件系统变化
- 📌 适用场景:
- 🔧 核心配置:
- 🌰 实战案例:
- 五、Serial In 节点:与硬件“对话”
- 📌 适用场景:
- 🔧 核心配置:
- 💡 调试技巧:
- 六、TCP In / UDP In 节点:底层网络通信
- 📌 适用场景:
- 🔧 配置要点:
- 🌰 示例:解析十六进制温度数据
- 七、其他实用输入节点
- 1. **Email In**(需额外安装)
- 2. **Twitter / Telegram In**
- 3. **Cron 节点**(社区节点:node-red-contrib-cron-plus)
- 八、输入节点选择指南:一张表说清楚
- 九、通用调试建议
- 写在最后:输入是自动化的起点
关键字:
Node-RED、
输入节点、
数据接入、
MQTT配置、
HTTP请求
定时任务、
串口通信
摘要
去年我帮一个工厂做设备监控系统,客户问:“能不能把 PLC 的数据、微信告警、定时任务、本地文件都接进来?”
我当时没多想,直接在 Node-RED 里拖了四个输入节点——10 分钟搞定演示。客户惊讶地说:“原来数据接入可以这么简单?”
其实,Node-RED 的强大,首先体现在它能“感知”世界的方式足够多。
无论是定时触发、网络请求、硬件信号,还是文件变更,它都有对应的“输入节点”作为入口。这些节点就像人的感官:眼睛看(HTTP)、耳朵听(MQTT)、皮肤触(串口)……没有它们,再复杂的流程也只是空转。
今天这篇文章,我们就来系统盘点 Node-RED 中最常用的 7 类输入节点,告诉你:
- 它们分别适合什么场景?
- 配置时有哪些隐藏选项?
- 如何避免常见陷阱?
这不是功能列表,而是一份“输入节点使用地图”。
一、Inject 节点:你的“手动开关”
📌 适用场景:
- 调试流程
- 手动触发任务(如“立即备份”)
- 模拟测试数据
🔧 核心配置:
- Payload type:支持 string、number、boolean、JSON、Buffer、timestamp 等
- Repeat:可设置定时循环(秒/分/小时)
- Inject once after deploy:部署后自动触发一次(适合初始化)
💡 高级技巧:
-
使用 表达式 动态生成内容(Node-RED 3.0+):
当前时间:{{ $now() | $formatTime('YYYY-MM-DD HH:mm') }} -
在 JSON 模式下,可直接写复杂对象:
{ "cmd": "reboot", "target": "device_01" }
⚠️ 注意:Inject 节点只能手动或定时触发,不能响应外部事件。
二、HTTP In 节点:把 Node-RED 变成 Web 服务
📌 适用场景:
- 接收 Webhook(如 GitHub、企业微信)
- 构建轻量 API 网关
- 与前端页面交互
🔧 核心配置:
- Method:GET / POST / PUT 等
- URL:如
/api/sensor,最终访问地址为http://ip:1880/api/sensor - Return:通常选 “HTTP Response”(需搭配 HTTP Response 节点)
🌰 典型流程:
💡 关键细节:
- POST 请求的 body 会自动解析为
msg.payload(JSON 或 form-data) - 请求头在
msg.headers中 - 查询参数在
msg.req.query中(如?id=123→msg.req.query.id)
❌ 常见错误:忘记连接 HTTP Response 节点,导致客户端一直 pending。
三、MQTT In 节点:物联网的“神经末梢”
📌 适用场景:
- 接收传感器数据(温湿度、光照等)
- 设备状态上报
- 消息队列消费
🔧 核心配置:
- Broker:需先配置 MQTT 服务器(支持用户名/密码/TLS)
- Topic:支持通配符(
sensor/+/temp) - QoS:建议用 0(最多一次)或 1(至少一次)
💡 最佳实践:
-
用 不同 topic 区分设备,如
factory/device_01/temp -
在 Function 节点中提取设备 ID:
// topic = "sensor/device_01/temp" msg.deviceId = msg.topic.split('/')[1]; return msg;
🔒 安全提示:生产环境务必启用 TLS 和认证,避免数据泄露。
四、Watch 节点:监听文件系统变化
📌 适用场景:
- 监控日志文件更新
- 自动处理上传的 CSV/JSON 文件
- 配置文件热加载
🔧 核心配置:
- Filename:要监听的文件或目录(支持通配符,如
/data/*.csv) - Watch for:文件创建 / 修改 / 删除
- Output:可选“文件名”或“文件内容”
🌰 实战案例:
监控 /uploads/ 目录,新文件一出现就解析并入库:
Watch → File In → CSV → Function → Database
⚠️ 注意:Watch 节点不会读取文件内容,只触发事件。需配合 File In 节点读取。
五、Serial In 节点:与硬件“对话”
📌 适用场景:
- 读取 Arduino / STM32 串口数据
- 连接工业设备(Modbus RTU)
- 调试嵌入式设备输出
🔧 核心配置:
- Port:如
/dev/ttyACM0(Linux)或COM3(Windows) - Baud rate:波特率(常见 9600、115200)
- Data bits / Parity / Stop bits:按设备要求设置
💡 调试技巧:
-
数据默认是 Buffer 类型,需转字符串:
msg.payload = msg.payload.toString('utf8').trim(); -
用 Split 节点按换行符
\n切分多行数据
🛠️ 权限问题(Linux):
将用户加入dialout组:sudo usermod -a -G dialout $USER,然后重启。
六、TCP In / UDP In 节点:底层网络通信
📌 适用场景:
- 接收自定义协议设备数据
- 与旧系统对接(无 HTTP/MQTT 支持)
- 高性能数据流(UDP 广播)
🔧 配置要点:
- TCP In:需指定端口,每次连接生成一个会话
- UDP In:监听端口,接收广播或多播包
- 数据均为 Buffer,需自行解析协议
🌰 示例:解析十六进制温度数据
// 假设 payload = <Buffer 01 2c> 表示 300(0x012c = 300)
let temp = msg.payload.readUInt16BE(0) / 10; // 30.0℃
msg.payload = { temperature: temp };
return msg;
⚠️ 注意:TCP In 节点需配合 TCP Out 回复,否则连接可能被设备断开。
七、其他实用输入节点
1. Email In(需额外安装)
- 监听邮箱新邮件(IMAP)
- 适合审批流、告警确认
2. Twitter / Telegram In
- 接收社交媒体消息
- 可做聊天机器人入口
3. Cron 节点(社区节点:node-red-contrib-cron-plus)
- 比 Inject 的定时更强大
- 支持 cron 表达式(如
0 9 * * 1表示每周一 9 点)
八、输入节点选择指南:一张表说清楚
| 场景 | 推荐节点 | 数据格式 | 是否需外部服务 |
|---|---|---|---|
| 手动测试 | Inject | 任意 | 否 |
| Web API | HTTP In | JSON / Form | 否(Node-RED 自带) |
| 传感器数据 | MQTT In | JSON / String | 是(MQTT Broker) |
| 文件监控 | Watch + File In | 文件内容 | 否 |
| 硬件串口 | Serial In | Buffer | 否 |
| 自定义协议 | TCP/UDP In | Buffer | 否 |
| 定时任务 | Inject(简单) / Cron(复杂) | 任意 | 否 |
九、通用调试建议
- 所有输入节点后,先接 Debug 节点
确认数据是否正确到达,格式是否符合预期。 - 注意数据类型
Buffer、string、JSON 处理方式完全不同,用typeof msg.payload判断。 - 善用 Context 查看原始数据
在 Function 节点临时保存:flow.set("raw_input", msg); - 网络类节点务必检查防火墙
云服务器需开放对应端口(1883、80、5000 等)。
写在最后:输入是自动化的起点
Node-RED 的哲学是:先让数据进来,再决定怎么处理。
你不需要一开始就设计完美流程,只要选对输入节点,把真实数据“接”进来,后续的转换、判断、输出自然水到渠成。
在此之前,不妨打开你的 Node-RED,试着用 三种不同的输入节点 获取当前时间:
- Inject(手动)
- HTTP In(浏览器访问)
- Cron(定时)
你会发现,同一个目标,Node-RED 提供了多种“感知”路径——而这,正是它的魅力所在。

