Node-RED 物联网实践系列(3):编辑器与运行时详解

来源:https://nodered.org/docs/user-guide/editor

编辑器组成与导航

  • 四大区域:顶部 Header、左侧 Palette、中央 Workspace、右侧 Sidebar
  • 快速键:Ctrl/⌘-p 显示/隐藏 Palette,Ctrl/⌘-Space 显示/隐藏 Sidebar

来源:https://nodered.org/docs/user-guide/editor/palette/

来源:https://nodered.org/docs/user-guide/editor/sidebar

Flow流程、Tab标签 与 Subflow子流程

  • Flow/Tab:在画布上组织逻辑,每个 Tab 关注单一主题

  • Subflow:可复用 的子流程,支持参数化,适合封装采集或清洗逻辑

    -- 新建子流程有两种方法如图

    -- 直接新建子流程

    -- 将选择部分更改为子流程

  • Link 节点:跨 Tab 编排与解耦

Deploy 部署策略

  • Full:全量下发,适合首次或大改动
  • Modified:仅下发变更,提高效率
  • Nodes-only:仅更新节点属性,不重启连接

消息结构与路由

  • 核心对象:msg(常用 msg.payload、msg.topic)
  • Change:赋值、删除、移动、JSONata 变换
  • Switch:条件路由(阈值、匹配、表达式)

示例:温度路由与告警

导入以下 JSON 到画布,点击 Deploy,然后在 Inject 节点触发测试。

json 复制代码
[
  {
    "id": "i1",
    "type": "inject",
    "z": "f1",
    "name": "temp=28",
    "props": [
      { "p": "payload" }
    ],
    "payload": "{\"temperature\":28}",
    "payloadType": "json",
    "x": 160,
    "y": 140,
    "wires": [["s1"]]
  },
  {
    "id": "s1",
    "type": "switch",
    "z": "f1",
    "name": ">=30?",
    "property": "payload.temperature",
    "propertyType": "msg",
    "rules": [
      { "t": ">=", "v": "30", "vt": "num" },
      { "t": "else" }
    ],
    "checkall": "true",
    "repair": false,
    "x": 330,
    "y": 140,
    "wires": [["c1"],["d1"]]
  },
  {
    "id": "c1",
    "type": "change",
    "z": "f1",
    "name": "set alert",
    "rules": [
      { "t": "set", "p": "msg.topic", "pt": "msg", "to": "alert", "tot": "str" },
      { "t": "set", "p": "payload", "pt": "msg", "to": "\"HIGH TEMP\"", "tot": "jsonata" }
    ],
    "x": 500,
    "y": 120,
    "wires": [["d1"]]
  },
  {
    "id": "d1",
    "type": "debug",
    "z": "f1",
    "name": "out",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "true",
    "targetType": "full",
    "x": 680,
    "y": 140,
    "wires": []
  }
]

Function 节点与上下文

  • context:节点级状态;flow/global:跨节点/全局状态
  • On Start:Function 节点"On Start"面板中初始化状态(支持返回 Promise)

Function 代码示例

javascript 复制代码
let counter = context.get('counter') || 0;
counter += 1;
context.set('counter', counter);
msg.payload = counter;
return msg;

On Start 初始化示例

javascript 复制代码
if (context.get("counter") === undefined) {
  context.set("counter", 0)
}

调试与日志

  • Debug 面板:选择输出 payload 或完整消息;避免过度日志
  • 终端日志:使用 -v 获取详细信息;结合 --safe 排错
powershell 复制代码
node-red -v --safe

最佳实践

  • 尽量使用 Change/Switch/Template 组合,减少复杂 JS
  • 为主题与数据结构制定统一规范,便于路由与维护
  • 对大对象或二进制流先做裁剪或分片,优化内存
  • 使用 Subflow 与 Link 解耦跨页逻辑

参考

相关推荐
调试优选官4 天前
IoT物联网系统定制落地实践:从设备接入、协议网关、平台分层到业务应用,如何做技术选型、交付验收、责任边界与长期运维成本评估及迁移安排
物联网·iot·成本分析
华允物联-HUAIOT4 天前
工业路由器和DTU在联网方式上的区别
物联网
wuyk5554 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
码流子4 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
绿蕉4 天前
配电房的“AI听诊师”:可视化声纹局放智能巡检系统与通讯保障
物联网
chshang19925 天前
工业路由器是什么?浅谈5G工业网络中的IR602
网络·物联网·5g·智能路由器
做萤石二次开发的哈哈5 天前
海康商用音频主机接入萤石蓝海 AIoT:多路拾音、矩阵路由、分区广播、应急广播四类技能,IP 网络广播系统多端开发实战
物联网·音频矩阵·萤石开放平台·ip网络广播·蓝海aiot一站式工作台·aiot开发·公共广播
wuyk5555 天前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网
CServer_015 天前
开源!混合存储底座+湖仓一体的AI数据中台
物联网·制造
数字新视界5 天前
数据中心基础设施管理系统的智能监测与运维整合剖析
数据库·物联网·数据中心·数据中心基础设施管理·dcim管理系统