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

参考

相关推荐
jackiendsc1 小时前
基于ESP32实现物联网远程可视化遥控小船的主要过程
物联网·esp32·鸿蒙·遥控
明达智控技术1 小时前
MR30分布式IO:破解汽车焊接产线控制难题
物联网·自动化
明达智控技术1 小时前
MR30分布式IO赋能注塑机智能化升级
分布式·物联网·自动化
三佛科技-134163842122 小时前
KP3111LGA/KP3111LPA/ KP3111SPA高精度5V220MA离线式PWM功率开关 典型电路,三者对比
单片机·物联网·智能家居·pcb工艺
小小的代码里面挖呀挖呀挖2 小时前
杰理蓝牙耳机开发 -- 单线级联RGB幻彩灯控制
笔记·单片机·物联网·学习·iot
豌豆抛2 小时前
案例应用 | 精准定位重塑博物馆观展体验
网络·科技·物联网
TDengine (老段)2 小时前
TDengine COLS 函数用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine
AAAAA92402 小时前
蜂窝物联网模组中的GPS+北斗双模定位技术
物联网·位置
FreeBuf_2 小时前
攻击者利用物联网漏洞部署新型ShadowV2恶意软件
物联网·shadowv2