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.payloadmsg.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 分钟前
斩断 `navigator` 前端:底层重写 UserAgent/Platform/Language 属性描述符
爬虫·数据采集·指纹浏览器·浏览器指纹
远创智控研发中心011 小时前
汽车水泵密封检测工位三菱QPLC配以太网模块无线采集装配误差率0.2%
数据采集·三菱plc·触摸屏·以太网模块·工业自动化
数据知道3 小时前
C++ 层拦截:修改 Blink 引擎与 V8 绑定的底层逻辑
javascript·数据采集·指纹浏览器·风控
CSDN官方博客4 小时前
「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令
嵌入式硬件·物联网·embedding
踩着两条虫8 小时前
VTJ.PRO v2.4.2 私有化部署与升级实操指南
前端·人工智能·低代码·架构·数据挖掘
北京耐用通信9 小时前
耐达讯自动化工业网关:极简组态实现 Modbus 转 PROFINET 稳定通讯
人工智能·物联网·网络协议·自动化·信息与通信
Inhand陈工10 小时前
映翰通IG502实战:通过RS232采集交通信号灯数据,实现自动短信告警
网络·嵌入式硬件·物联网·网络安全·边缘计算·信息与通信·信号处理
行者-全栈开发10 小时前
【智慧防洪】水利物联网监测网络设计:从传感器选型到边缘计算的完整实践
物联网·网络安全·lora·边缘计算·nb-iot·mqtt 协议·传感器选型
远创智控研发中心0110 小时前
解决工业产线多协议对接难题的三菱 PLC 以太网智能化改造方案
数据采集·三菱plc·触摸屏·以太网模块·工业自动化
2501_9139817812 小时前
畜牧养殖物联网方案指南:定制管理,为养殖业打造全新生态
物联网·智能畜牧·畜牧养殖