Home Assistant 中文文档 下载 App

Node-RED——可视化流程编辑器

Node-RED 是什么

Node-RED 是 IBM 开源的可视化流程编辑器——用浏览器界面拖拽节点、连线就能构建数据处理和自动化流程。Home Assistant 原生自动化引擎的视觉编辑器虽然好用,但碰到需要"条件分支、错误重试、外部 API 调用、消息队列"这种复杂场景时,Node-RED 更合适。

Node-RED 和 Home Assistant 的关系:Node-RED 是 Home Assistant 的"外挂大脑"——Home Assistant 负责设备和状态,Node-RED 负责编排复杂逻辑。

Node-RED vs. Home Assistant 原生自动化

对比项Home Assistant 自动化Node-RED
学习曲线低(可视化编辑器)中(需要理解节点/消息流)
自然语言无无(但可以写 JS 函数节点)
复杂逻辑用 YAML 的 choose/if/repeat拖拽分支节点、subflow、loop
外部集成通过 webhook/trigger 调用内置 HTTP、MQTT、email、exec 等节点
错误处理无内置重试Catch 节点、Status 节点
版本控制写 YAML 可以 Git可以导出 JSON 流程 Git 管理
调试Traces(有限)内置 Debug 面板,每个节点都能看消息
实时运行事件驱动事件驱动 + 定时器

推荐:80% 的日常自动化用 Home Assistant 原生,20% 复杂逻辑用 Node-RED。

安装 Node-RED

Home Assistant OS

Settings → Apps → 搜索 Node-RED → Install

安装后启动 App,Home Assistant 会自动配置好 Home Assistant 节点。点击 Open Node-RED 打开编辑器(URL 默认 http://homeassistant.local:1880)。

Docker 容器(已有 Docker 的服务器)

docker run -d \
  --name node-red \
  -p 1880:1880 \
  -v /opt/node-red:/data \
  --restart=unless-stopped \
  nodered/node-red:latest

然后在 Node-RED 里装 node-red-contrib-home-assistant-websocket 插件,连接到 Home Assistant。

Home Assistant 节点

Node-RED 的 Home Assistant 插件提供以下节点:

输入节点(触发)

节点触发条件
events: state实体状态变化
events: device设备事件
poll state定时轮询实体
webhookHome Assistant 的 webhook 触发
server events监听 Home Assistant 的 event bus
calendar日历事件
time定时触发

输出节点(动作)

节点功能
call service调用 Home Assistant 服务
call apiREST API 调用
get entities查询实体列表
get history查询历史数据

第一个 Node-RED 流程示例

场景:日落自动开灯,1 小时后关灯,但如果有人在家就不关灯

[sun: 日落事件] → [Home Assistant: get state person.me] → [Function: 判断是否在家] → [IF: 不在家?] → [Home Assistant: call service light.turn_on] → [delay 1h] → [Home Assistant: call service light.turn_off]

对应的 Node-RED 操作:

  1. 拖入一个 sun 节点,选 Sunset,Offset -10min
  2. 拖入一个 events: state 节点,监听 person.me
  3. 拖入一个 Function 节点,写:
   // 判断是否在家
   if (msg.payload === "home") {
     return null; // 不输出,中断流程
   }
   return msg; // 继续
  1. 拖入一个 call service 节点,配 light.turn_on → 目标 light.living_room
  2. 拖入一个 delay 节点,配 1 小时
  3. 拖入一个 call service 节点,配 light.turn_off → 目标 light.living_room

复杂场景用 Node-RED 更合适

场景一:多步骤条件链

"如果太阳能 > 家庭消耗 → 如果电池 < 80% → 充电到 95% → 如果 EV 没在充 → 如果 EV 电量 < 70% → 开始给 EV 充"

场景二:调用外部 API

"太阳能盈余 → 调用电价 API 查当前电价 → 如果谷价 → 给电池充电;如果峰价 → 卖回电网"

场景三:错误重试

"MQTT 设备上报故障 → 发送通知 → 10 秒后重试一次 → 还不行 → 升级告警"

场景四:定时批量

"每天凌晨 3 点 → 读所有温度传感器 → 算日平均 → 存到 InfluxDB → 发日报"

Subflow(子流程)—— 封装复用

Node-RED 的 Subflow 可以把一段常用逻辑打包成一个节点,之后在其他流程里复用:

  1. 选中要打包的节点 → 右键 → Subflow → Create Subflow
  2. 给子流程起名字,定义输入输出
  3. 之后就可以像用内置节点一样拖入子流程

备份与版本控制

Node-RED 插件生态

Node-RED 的真正威力来自社区插件:

插件功能
node-red-contrib-home-assistant-websocket官方 Home Assistant 集成
node-red-contrib-influxdbInfluxDB 时序数据库读写
node-red-contrib-schedule高级定时调度(比内置 time 节点灵活)
node-red-node-email发邮件通知
node-red-contrib-telegrambotTelegram Bot
node-red-contrib-openai调用 OpenAI API

管理方式:Node-RED → 右上角菜单 → Manage Palette → Install

小建议