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 解耦跨页逻辑

参考

相关推荐
MuMuMu12231 小时前
越华环保集团碳惠小屋:物联网 + 区块链,构建碳普惠终端数据可信与隐私保护体系
物联网·区块链
杰克说1 小时前
物联网消息协议MQTT详解
物联网·mqtt·信息与通信·通信协议
数字新视界2 小时前
空调双机切换器AIRC1000红外控制原理解析
大数据·物联网·信息可视化·信息与通信·一体化机柜
用包装物15 小时前
表单草稿自动保存:断网不丢数据
低代码
杰克说说说16 小时前
物联网消息协议MQTT详解
物联网
Steelenwang17 小时前
基于XT960的泵站监控方案
嵌入式硬件·物联网·硬件工程·智慧城市·智能硬件
SL_staff17 小时前
低代码选型避坑指南:为什么‘能拖拽’不等于‘能交付’?——基于JVS八大引擎的四维交付能力评估框架
java·低代码·spring cloud
华普微HOPERF18 小时前
BLE信道探测方案,开启物联网设备的“距离感知”时代
人工智能·物联网
芯岭技术21 小时前
XL2400T收发芯片,2.4G无线荧光棒控光解决方案,+PA距离可达700M
单片机·嵌入式硬件·物联网
Fibocom广和通21 小时前
KES 2026|广和通LE270-KR获韩国KC认证并通过KT准入,助力智能电表等IoT应用落地
物联网