Home Assistant 自动化动作详解:使用automation.turn_on在自动化与脚本中启用自动化
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
导读
automation.turn_on是 Home Assistant 自动化域(automation domain)提供的标准动作(action),用于把一条已关闭的自动化(automation)重新启用,使其恢复对触发条件(triggers)的监听并在触发时执行。本指南以仓库中的动作参考文档 source/_actions/automation.turn_on.markdown 为主体,结合其相关动作文档与界面模板说明,完整讲解该动作的界面操作路径、YAML 调用语法、目标(target)选择方式,并给出"离家时启用离家灯光例程"等可直接复用的实战示例,帮助你实现"一条自动化管理另一条自动化"的场景编排。
动作概述:做什么、何时用
按照文档定义,automation.turn_on用于启用一条自动化:一旦自动化处于开启状态,它会重新开始监听自身的 {% term triggers %}(触发条件),并在这些触发条件满足时运行。与之对应的启用/禁用动作还包括automation.turn_off(关闭并默认停止正在运行的 action)与automation.toggle(在开启/关闭之间翻转)。
典型的使用场景是让一条自动化去开启另一条自动化。例如,当你离开家外出旅行时,用一条自动化去启用一条模拟有人在家的"离家灯光"例程:
Use this action to enable an automation. Once it's on, the automation listens for its {% term triggers %} again and runs when they fire. This is handy when you want one automation to switch another one on, for example to enable your away routines when you leave for a trip.
关于术语,仓库在 source/_data/glossary.yml 中对 automation 有统一定义:自动化是"一旦触发条件满足便采取行动的功能",其 actions 定义"触发发生之后将要发生什么"。这正解释了automation.turn_on的语义:它不执行任何动作,只是把"监听触发条件"这个开关重新打开。
从用户界面(UI)使用该动作
如果你习惯用可视化方式构建自动化与脚本,可以在界面中逐步完成配置,无需编写 YAML(对应模板见 source/_includes/actions/ui_header.md)。文档给出了完整的操作路径:
- 进入Settings>Automations & scenes(自动化与场景)。
- 打开一条现有的自动化或脚本,或者选择Create automation>Create new automation新建。
- 如果是新建自动化,在When(何时)部分添加一个触发条件。脚本不需要触发条件——它们在被其他东西调用时运行。
- 在Then do(然后做什么)部分,选择Add action(添加动作)。
- 选择要控制的对象:在By target(按目标,详见下文"目标选择")下,选中你想要启用的自动化。
- 从该目标对应的动作列表中,选择Turn on automation(打开自动化)。
- 选择Save(保存)。
这条路径同样适用于脚本(script):脚本本身没有触发条件,而是通过其他自动化、仪表盘或script.turn_on等方式被调用,因此可以在脚本里用automation.turn_on作为步骤之一来启用某条自动化。
在 YAML 中使用该动作
如果你直接编写 YAML,或者想精确掌握 Home Assistant 底层做了什么事,文档提供了技术参考(对应模板见 source/_includes/actions/yaml_header.md)。在 YAML 中,该动作的调用名称为automation.turn_on,最基本的形式如下:
action: | action: automation.turn_on target: entity_id: automation.away_lighting上面的例子会启用automation.away_lighting这条自动化。
动作参数说明
automation.turn_on的调用结构由三部分组成:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
action | string | 是 | 动作名称,固定为automation.turn_on |
target | map | 是 | 目标选择器,至少指定一个目标(详见下一节) |
data | map | 否 | 扩展数据;automation.turn_on本身没有额外的可选参数 |
需要说明的是:与automation.turn_off拥有stop_actions(是否停止正在运行的动作,默认true)这一选项不同,automation.turn_on没有任何附加参数——它只负责把自动化切换到开启状态。如果你想控制更多行为,应组合使用相关动作:例如先automation.turn_on再automation.trigger立即执行。
目标(Targets)选择详解
该动作必须有目标(target)。目标就是动作的作用对象(对应模板见 source/_includes/actions/targets.md)。你可以把动作指向单个实体、设备、区域、楼层或标签,Home Assistant 会针对该目标背后所有匹配的 automation 实体执行动作:
- Entity(实体):某一条具体的 automation 实体,例如
automation.living_room。 - Device(设备):隶属于某个设备的所有 automation 实体。
- Area(区域):某个房间/区域内的所有 automation 实体。
- Floor(楼层):某一楼层上的所有 automation 实体。
- Label(标签):共享某个标签的所有 automation 实体。
你还可以在同一个动作中混用不同类型的目标。例如,可以在同一个动作中同时添加一个具体实体和一个区域作为目标,让动作一次性作用于两者。这在需要"启用家里某几处灯光例程"时非常实用——不必逐条写entity_id,直接用区域或标签即可批量生效。
关键行为与使用要点(Good to know)
文档专门列出了三条容易踩坑的要点:
- 启用 ≠ 立即运行。启用一条自动化并不会运行它,只是让它重新开始监听触发条件。如果你要立刻执行它的 actions,应该使用 Trigger automation 动作(
automation.trigger),它可以在不等待触发条件的情况下立即运行自动化。 - 关闭状态会被保留。一条处于关闭状态的自动化会保留它自己的状态,包括之前跟踪的信息(例如它上次运行的时间)。也就是说,关闭再启用不会"重置"自动化的内部状态。
- 也可以在自动化列表里手动启停。除了用动作控制,你还可以直接在Settings>Automations & scenes的自动化列表中手动启用/禁用某条自动化。
与相关动作的对比:turn_off / toggle / trigger
automation.turn_on的 front matter 中声明了三个相关动作(对应模板见 source/_includes/actions/related.md):automation.turn_off、automation.toggle和automation.trigger。它们语义不同,选择合适的动作很重要:
| 动作 | 文档定义 | 关键行为 |
|---|---|---|
automation.turn_on | Enables an automation | 启用自动化,恢复监听触发条件;不运行 actions |
automation.turn_off | Disables an automation | 关闭自动化;默认同时停止正在运行的 actions(可用stop_actions: false让其跑完) |
automation.toggle | Enables or disables an automation | 开则关、关则开;总是停止正在运行的 actions,且没有让动作跑完的选项 |
automation.trigger | Runs the actions of an automation | 立即运行某条自动化的 actions;默认跳过条件检查(skip_condition默认true);即使自动化处于关闭状态也会运行 |
依据仓库中的相关动作文档(source/_actions/automation.turn_off.markdown、source/_actions/automation.toggle.markdown、source/_actions/automation.trigger.markdown),在实际使用中应注意:
- 如果你需要"临时关闭一段时间再恢复",可以像 turn_off 文档建议的那样:用一条自动化调用
automation.turn_off,再用另一条调用automation.turn_on来恢复。 - 如果你想要单一控制点(例如一个按钮或一个 toggle 辅助实体)来切换某条自动化的启停,
automation.toggle最合适;但如果你需要明确的结果,文档建议改用automation.turn_on或automation.turn_off。 - 调用
automation.trigger时,由于没有真实触发事件,自动化内部依赖 trigger 数据的模板会无数据可读——这一点在使用模板时需留意。
实战示例:离家时启用"离家灯光"例程
文档提供了一个完整的实战示例,用于演示"离家时开启一条模拟有人在家的灯光自动化"。场景设定为:
- 触发条件(Trigger):离开区域(Zone left)
- 目标(Target):Paulus(人物实体)
- 区域(Zone):Home(家)
- 动作(Action):打开自动化(Turn on automation)
- 目标(Target):Away lighting(离家灯光)
完整的 YAML 如下,可以直接复制并按需修改实体 ID:
automation: | - alias: "Enable the away lighting routine" triggers: - trigger: zone.left target: entity_id: person.paulus options: zone: zone.home actions: - action: automation.turn_on target: entity_id: automation.away_lighting这个例子的要点在于两层自动化的协作:外层自动化以zone.left(离开家区域)为触发条件,其 actions 中调用automation.turn_on去启用内层的automation.away_lighting。内层自动化启用后,会按自身的触发条件继续工作(例如按时间随机开关灯光),从而实现"模拟有人在家"的效果。
尝试与验证:用开发者工具直接测试
如果你想在不写一行 YAML 的情况下验证该动作,文档提供了快捷路径(对应模板见 source/_includes/actions/try_it.md):
- 打开Settings>Tools>Actions(开发者工具中的动作页面)。
- 搜索
automation.turn_on这个动作。 - 填写目标字段(例如实体
automation.away_lighting)。 - 点击Perform action(执行动作)。
你会在真实的实体上立即看到效果——自动化被启用后,其状态由off变为on(具体状态名称与版本有关,以你当前安装版本为准)。这非常适合在把动作写进自动化之前先做一次快速验证。
更多真实场景示例可以通过仓库中的 source/_includes/actions/more_examples.md 模板了解其组织方式,该模板说明这些动作会出现在自动化与脚本中的真实场景里,可以复制并根据自己的环境调整。
小结
automation.turn_on是 Home Assistant 自动化编排中最基础也最高频的动作之一:它让"自动化管理自动化"成为可能,是构建分层自动化、场景切换与临时启停控制的关键工具。使用时牢记三条原则:启用不等于运行(要立即执行请用automation.trigger);关闭状态与历史信息会被保留;目标可以是实体、设备、区域、楼层或标签,且可混用。配合automation.turn_off与automation.toggle,你就能完整覆盖自动化的启停控制需求。
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考