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 小时前
蓝牙 ® 技术在智慧城市中的应用
人工智能·物联网·智慧城市
zhaoshuzhaoshu8 小时前
蓝核心规范6.0功能概述
物联网
门思科技9 小时前
门思科技正式开放 ThinkLink 纯国产化物联网平台免费部署方案
javascript·科技·物联网
专业开发者9 小时前
以蓝牙 ® 照明为平台,提升投资回报率(ROI)
物联网
专业开发者10 小时前
照明如何成为建筑网络的平台
网络·物联网
专业开发者10 小时前
中国东方航空在其旗舰航班上引入蓝牙 ® 技术
物联网
中设智控11 小时前
采集系统连 ERP:告别手动录入,让数据自动驱动制造效率
制造·数据采集·erp·设备管理·设备管理系统·工业软件·工业数采
专业开发者12 小时前
维多利亚国家美术馆借助蓝牙定位服务提升了游客体验
物联网
NocoBase13 小时前
GitHub 上星星数量前 10 的 AI CRM 开源项目
人工智能·低代码·开源·github·无代码