摘要

Node-RED 是一款开源的低代码流式编程工具,特别适合物联网(IoT)数据流的动态建模。它通过直观的拖拽界面,将硬件设备、API 和数据处理逻辑连接起来,简化了物联网应用的开发。本攻略面向初学者,详细介绍如何使用 Node-RED 进行动态建模,包括安装、核心概念、搭建简单物联网数据流、调试与优化,以及常见问题解答。通过具体示例和 PlantUML 流程图,帮助小白快速上手并理解 Node-RED 在物联网数据流中的应用。


一、Node-RED 简介

Node-RED 由 IBM 开发,现由 OpenJS 基金会维护,基于 Node.js 运行,采用事件驱动的非阻塞模型,特别适合物联网场景。其核心特点包括:

  • 低代码编程:通过拖拽节点和连线构建数据流,无需大量编码。
  • 模块化设计:支持丰富的节点库,涵盖传感器、协议(如 MQTT)、数据库等。
  • 跨平台:可运行在 Windows、macOS、Linux 和 Raspberry Pi 等设备上。
  • 动态建模:支持实时数据流处理,适合物联网数据采集、处理和可视化。

本攻略将以一个简单的物联网温度监控示例,展示如何使用 Node-RED 实现数据从传感器采集到可视化的全流程。


二、安装与环境配置

1. 安装 Node.jsNode-RED 依赖 Node.js 运行,需先安装最新 LTS 版本。
  • Windows/macOS:
    1. 访问 Node.js 官网,下载 LTS 版本(推荐 v18.x 或更高)。
    2. 按提示安装,完成后在终端运行 node -v 和 npm -v 确认版本。
  • Linux/Raspberry Pi:bash
    sudo apt update
    sudo apt install -y nodejs npm
    或使用 NodeSource 安装最新版本:bash
    curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
    sudo apt-get install -y nodejs
2. 安装 Node-RED在终端运行以下命令全局安装 Node-RED:bash
sudo npm install -g --unsafe-perm node-red
  • --unsafe-perm 确保以 root 权限安装,避免权限问题。
  • 安装完成后,运行 node-red 启动服务,默认在 http://localhost:1880 打开。
3. 验证安装
  1. 打开浏览器,访问 http://localhost:1880。
  2. 看到 Node-RED 的流编辑器界面,说明安装成功。
4. 安装 Dashboard 插件为实现数据可视化,需安装 node-red-dashboard 插件:
cd ~/.node-red
npm install node-red-dashboard

重启 Node-RED 后,仪表板节点将出现在编辑器左侧节点面板。


三、核心概念理解 Node-RED 的核心概念有助于快速上手:

  • 节点(Node):功能单元,如输入(Inject)、处理(Function)、输出(Debug)。每个节点完成特定任务。
  • 流(Flow):由节点通过连线组成的逻辑序列,表示数据从输入到输出的处理路径。
  • 消息(Message):数据载体,通常为 JavaScript 对象,核心属性为 msg.payload,承载主要数据。
  • 上下文(Context):用于存储临时数据,支持节点级、流级或全局级。
  • 仪表板(Dashboard):用于创建交互式界面,展示图表、仪表盘等。

四、示例:

构建物联网温度监控数据流以下是一个简单的物联网数据流示例:模拟温度传感器数据,通过 MQTT 协议发送到 broker,处理后存储到数据库,并显示在仪表板上。

1. 准备工作
  • 硬件(可选):Raspberry Pi + 温度传感器(如 DHT11)。
  • 软件:
    • 安装好的 Node-RED。
    • MQTT Broker(如 Mosquitto,免费公共 broker:test.mosquitto.org)。
    • SQLite 数据库(用于存储数据)。
  • 目标:
    • 模拟温度数据(JSON 格式)。
    • 通过 MQTT 发送到 broker。
    • 处理数据并存储到 SQLite。
    • 在仪表板显示实时温度曲线。
2. 打开 Node-RED 编辑器
  1. 启动 Node-RED(终端运行 node-red)。
  2. 在浏览器访问 http://localhost:1880。
3. 创建数据流以下是具体步骤,逐步搭建流。
步骤 1:模拟温度数据
  1. 从左侧节点面板拖动一个 Inject 节点 到工作区。
  2. 双击 Inject 节点,配置:
    • Payload:选择 JSON,输入:json

      {"temperature": 25.5, "timestamp": "2025-08-20T18:00:00"}
    • Repeat:选择 Interval,设置为每 5 秒触发一次。
    • Name:设为“模拟温度数据”。
  3. 添加一个 Debug 节点,连接到 Inject 节点,查看输出。
步骤 2:发送到 MQTT
  1. 拖动一个 MQTT Out 节点。
  2. 双击配置:
    • Server:点击编辑,输入 test.mosquitto.org,端口 1883,无需认证。
    • Topic:设为 sensors/temperature(唯一主题,避免冲突)。
    • Name:设为“发送到 MQTT”。
  3. 连接 Inject 节点到 MQTT Out 节点。
步骤 3:接收 MQTT 数据
  1. 拖动一个 MQTT In 节点。
  2. 配置:
    • Server:同上,选择 test.mosquitto.org。
    • Topic:设为 sensors/temperature。
    • Output:选择 Parsed JSON object。
    • Name:设为“接收温度数据”。
  3. 添加一个 Debug 节点,连接 MQTT In 节点,验证接收。
步骤 4:处理数据
  1. 拖动一个 Function 节点,连接到 MQTT In 节点。
  2. 配置 Function 节点,输入以下 JavaScript 代码:javascript
    msg.payload = {
        temperature: msg.payload.temperature,
        timestamp: new Date().toISOString()
    };
    return msg;
    • 功能:提取温度值,更新时间戳。
  3. Name:设为“格式化数据”。
步骤 5:存储到 SQLite
  1. 安装 SQLite 节点(若未安装):bash

    cd ~/.node-red
    npm install node-red-node-sqlite
    重启 Node-RED。
  2. 拖动一个 SQLite 节点,连接到 Function 节点。
  3. 配置:
    • Database:输入数据库路径(如 /home/user/test.db)。
    • SQL Query:输入:sql

      INSERT INTO sensor_data (temperature, timestamp) VALUES ($temperature, $timestamp)
    • Parameters:
      • $temperature: msg.payload.temperature
      • $timestamp: msg.payload.timestamp
    • Name:设为“存储到数据库”。
  4. 确保数据库和表已创建(可通过 Function 节点初始化):javascript

    msg.topic = "CREATE TABLE IF NOT EXISTS sensor_data (temperature REAL, timestamp TEXT)";
    return msg;
步骤 6:创建仪表板
  1. 拖动一个 Chart 节点(从 node-red-dashboard)。
  2. 配置:
    • Group:新建分组(如 “Temperature Dashboard”)。
    • Type:选择 Line Chart。
    • Label:设为“温度曲线”。
    • X-axis:选择 last 1 hour。
  3. 连接 Function 节点到 Chart 节点。
  4. 点击右上角“Dashboard”标签,访问 http://localhost:1880/ui 查看实时图表。
步骤 7:部署
  1. 点击右上角“Deploy”按钮,保存并运行流。
  2. 在 Debug 面板查看数据流转情况,在仪表板查看实时图表。

4. 运行结果

  • 每 5 秒,Inject 节点模拟发送温度数据。
  • 数据通过 MQTT 传输,Function 节点格式化后存储到 SQLite。
  • 仪表板显示实时温度曲线。

五、调试与优化

1. 调试技巧
  • Debug 节点:连接到每个关键节点,检查 msg.payload 内容。
  • 日志查看:终端运行 Node-RED 时,查看控制台日志。
  • 错误捕获:添加 Catch 节点 捕获错误,连接到 Debug 节点分析。
2. 优化建议
  • 性能:限制 Inject 节点频率(如 5-10 秒),避免高频数据冲击。
  • 安全:使用 MQTT 的 TLS 加密(端口 8883)保护数据传输。
  • 备份:定期导出流(在编辑器选择“Export”),保存为 JSON 文件。
  • 模块化:将复杂流拆分为多个子流(Subflow),提高可维护性。

六、常见问题解答

  1. Node-RED 无法启动?
    • 检查 Node.js 版本(需 v14 或以上)。
    • 确保端口 1880 未被占用(netstat -tuln | grep 1880)。
  2. MQTT 连接失败?
    • 确认 broker 地址和端口,测试公共 broker 如 test.mosquitto.org。
    • 检查网络防火墙是否阻止连接。
  3. 仪表板不显示?
    • 确保安装 node-red-dashboard。
    • 检查流是否已部署,访问 /ui 路径。
  4. 数据库报错?
    • 验证 SQLite 数据库路径正确,表结构已创建。
    • 使用准备语句(Prepared Statement)防止 SQL 注入。

七、复盘与改进复盘

  • 成功点:通过拖拽节点快速搭建物联网数据流,验证了 Node-RED 的易用性。
  • 不足:
    • 模拟数据无法完全代表真实传感器场景。
    • 未实现复杂逻辑(如异常检测)。
    • 数据存储未优化,可能在高并发下性能受限。
  • 经验教训:
    • 调试时多使用 Debug 节点,减少错误排查时间。
    • 提前规划流结构,避免后期修改复杂。

改进方向

  1. 真实硬件:接入实际传感器(如 DHT11),替换 Inject 节点。
  2. 高级逻辑:添加 Switch 节点实现温度阈值报警。
  3. 数据分析:集成 TensorFlow.js 节点进行预测分析。
  4. 高可用性:部署 Node-RED 到云服务(如 AWS IoT),支持大规模设备。

八、流程图

以下是用 PlantUML 描述的使用流程,展示从数据采集到可视化的完整过程:

@startuml
actor User
participant "IoT Device" as Device
participant "Node-RED" as NR
participant "MQTT Broker" as MQTT
participant "SQLite DB" as DB
participant "Dashboard" as UI

User -> NR: Open Editor (localhost:1880)
NR -> Device: Simulate Temperature Data (Inject Node)
Device -> NR: Send JSON Data
NR -> MQTT: Publish to sensors/temperature
MQTT -> NR: Receive Data (MQTT In Node)
NR -> NR: Format Data (Function Node)
NR -> DB: Store Data (SQLite Node)
NR -> UI: Display Chart (Dashboard Node)
User -> UI: View Real-time Chart (localhost:1880/ui)

@enduml
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐