入门之后还差什么
入门篇讲了怎么接设备、怎么写第一条"有人来就开灯"的自动化。真用起来你会发现:这条自动化太死板——晚上 12 点有人也开灯、白天光线够也开灯、客人来也触发。进阶要解决的就是"怎么让自动化更聪明":加条件、加延时、加状态判断、跨设备联动。
自动化的本质是"状态机":谁触发、在什么条件下、做什么动作、持续多久。把这四件事写清楚,自动化就稳了。
这篇从触发、条件、Node-RED 一直讲到 Blueprint 分享。
自动化的五种触发方式
HA 自动化的 trigger(触发)有这几类:
- state实体状态变化(人来了、门开了)。
- time定时(每天 22 点关窗帘)。
- template模板触发(当客厅温度 >28 且有人)。
- event事件触发(手机 App 通知、语音助手)。
- webhook外部 HTTP 调用。
automation:
- alias: 人来开灯
trigger:
- platform: state
entity_id: binary_sensor.hall_motion
to: "on"
条件与模板
trigger 是"什么时候",condition 是"什么情况下才执行"。比如上面"人来开灯"加两个条件:
condition:
- condition: state
entity_id: sun.sun
state: "below_horizon" # 只在天黑后
- condition: numeric_state
entity_id: sensor.hall_illuminance
below: 50 # 且光线够暗
action:
- service: light.turn_on
target: { entity_id: light.hall }
模板(template)Jinja 语法可以在自动化里读任意实体状态,做复杂判断。
Node-RED 入门
原生 YAML 自动化适合简单规则,复杂流程(多分支、循环、调用 API)就吃力了。Node-RED 是 HA 官方推荐的可视化流程编辑器:拖节点、连连线,比写 YAML 直观。
// 典型流程:
// [MQTT 入] -> [HA 节点:读客厅温度] -> [Switch 节点:>28?]
// 是 -> [HA 节点:开空调]
// 否 -> [HA 节点:关空调]
//
// Node-RED 节点即插即用,调试时可以看到每步的 msg 数据
什么时候用 Node-RED
- 多分支逻辑超过 3 个 if。
- 调用外部 API天气、股票、Webhook。
- 复杂数据转换MQTT 报文解析。
- 可视化调试看到每一步数据流。
Blueprint:把自动化分享出去
Blueprint 是 HA 的"自动化模板":你写好一条通用自动化,把"用哪个传感器、灯"留成参数,别人导入后填参数就能用。
# blueprint.yaml
blueprint:
name: 人来开灯
input:
motion_sensor:
selector: { entity: { domain: binary_sensor } }
target_light:
selector: { entity: { domain: light } }
trigger:
- platform: state
entity_id: !input motion_sensor
to: "on"
action:
- service: light.turn_on
target: { entity_id: !input target_light }
典型场景实战
三个能直接抄的场景:
- 观影模式语音说"看电影" → 关灯 50%、关窗帘、开电视、切音响。
- 离家布防最后一个人出门 → 全关设备、摄像头布防、门锁反锁。
- 回家欢迎门口人体感应 + 门锁解锁 → 玄关灯渐亮、播放欢迎语、开空调。
调试与排错
// 自动化不触发怎么查?
// 1. 开发者工具 → 状态:看实体现在值对不对
// 2. 自动化 → 跟踪:手动触发一次,看哪一步停了
// 3. 日志:configuration.yaml 里开 logger,看 trace
// 4. 避免死循环:动作里改了触发实体,会再触发自己
自动化写多了之后,一定要用"跟踪"功能看每次执行的轨迹。盲改 YAML 是最费时间的。
进阶之后,HA 就真正变成你家的"大脑"了。