Home Assistant 自动化动作详解:使用 `automation.turn_on` 在自动化与脚本中启用自动化
2026/9/16 18:45:22 网站建设 项目流程

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)。文档给出了完整的操作路径:

  1. 进入Settings>Automations & scenes(自动化与场景)。
  2. 打开一条现有的自动化或脚本,或者选择Create automation>Create new automation新建。
  3. 如果是新建自动化,在When(何时)部分添加一个触发条件。脚本不需要触发条件——它们在被其他东西调用时运行。
  4. Then do(然后做什么)部分,选择Add action(添加动作)。
  5. 选择要控制的对象:在By target(按目标,详见下文"目标选择")下,选中你想要启用的自动化。
  6. 从该目标对应的动作列表中,选择Turn on automation(打开自动化)。
  7. 选择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的调用结构由三部分组成:

字段类型必填说明
actionstring动作名称,固定为automation.turn_on
targetmap目标选择器,至少指定一个目标(详见下一节)
datamap扩展数据;automation.turn_on本身没有额外的可选参数

需要说明的是:与automation.turn_off拥有stop_actions(是否停止正在运行的动作,默认true)这一选项不同,automation.turn_on没有任何附加参数——它只负责把自动化切换到开启状态。如果你想控制更多行为,应组合使用相关动作:例如先automation.turn_onautomation.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)

文档专门列出了三条容易踩坑的要点:

  1. 启用 ≠ 立即运行。启用一条自动化并不会运行它,只是让它重新开始监听触发条件。如果你要立刻执行它的 actions,应该使用 Trigger automation 动作(automation.trigger),它可以在不等待触发条件的情况下立即运行自动化。
  2. 关闭状态会被保留。一条处于关闭状态的自动化会保留它自己的状态,包括之前跟踪的信息(例如它上次运行的时间)。也就是说,关闭再启用不会"重置"自动化的内部状态。
  3. 也可以在自动化列表里手动启停。除了用动作控制,你还可以直接在Settings>Automations & scenes的自动化列表中手动启用/禁用某条自动化。

与相关动作的对比:turn_off / toggle / trigger

automation.turn_on的 front matter 中声明了三个相关动作(对应模板见 source/_includes/actions/related.md):automation.turn_offautomation.toggleautomation.trigger。它们语义不同,选择合适的动作很重要:

动作文档定义关键行为
automation.turn_onEnables an automation启用自动化,恢复监听触发条件;不运行 actions
automation.turn_offDisables an automation关闭自动化;默认同时停止正在运行的 actions(可用stop_actions: false让其跑完)
automation.toggleEnables or disables an automation开则关、关则开;总是停止正在运行的 actions,且没有让动作跑完的选项
automation.triggerRuns 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_onautomation.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):

  1. 打开Settings>Tools>Actions(开发者工具中的动作页面)。
  2. 搜索automation.turn_on这个动作。
  3. 填写目标字段(例如实体automation.away_lighting)。
  4. 点击Perform action(执行动作)。

你会在真实的实体上立即看到效果——自动化被启用后,其状态由off变为on(具体状态名称与版本有关,以你当前安装版本为准)。这非常适合在把动作写进自动化之前先做一次快速验证。

更多真实场景示例可以通过仓库中的 source/_includes/actions/more_examples.md 模板了解其组织方式,该模板说明这些动作会出现在自动化与脚本中的真实场景里,可以复制并根据自己的环境调整。

小结

automation.turn_on是 Home Assistant 自动化编排中最基础也最高频的动作之一:它让"自动化管理自动化"成为可能,是构建分层自动化、场景切换与临时启停控制的关键工具。使用时牢记三条原则:启用不等于运行(要立即执行请用automation.trigger);关闭状态与历史信息会被保留;目标可以是实体、设备、区域、楼层或标签,且可混用。配合automation.turn_offautomation.toggle,你就能完整覆盖自动化的启停控制需求。

【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询