脚本语法
脚本是一系列 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more],Home Assistant 将执行这些动作。脚本作为实体通过独立的 脚本集成 可用,但也可以嵌入到 automationsHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 和 Alexa/Amazon Echo 配置中。
当脚本在 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 中执行时,trigger
变量可用。请参阅 Available-Trigger-Data。
脚本语法
脚本语法的基本结构是一个包含 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 的键/值映射列表。如果脚本仅包含 1 个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more],则可以省略外层列表。
所有的 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 都支持一个可选的 alias
。
# 示例脚本集成包含脚本语法
script:
example_script:
sequence:
# 这是使用脚本语法编写的
- alias: "打开天花板灯"
action: light.turn_on
target:
entity_id: light.ceiling
- alias: "通知天花板灯已打开"
action: notify.notify
data:
message: "天花板灯已打开!"
执行一个动作
执行一个动作可以通过多种方式完成。有关所有不同的可能性,请查看 actions page。
- alias: "卧室灯开启"
action: light.turn_on
target:
entity_id: group.bedroom
data:
brightness: 100
激活一个场景
脚本还可以使用快捷语法来激活 scenes场景捕获您希望某些实体处于的状态。例如,场景可以指定灯 A 应该打开,灯 B 应该是亮红色。 [Learn more],而不是调用 scene.turn_on
动作。
- scene: scene.morning_living_room
变量
<span class='terminology'>action<span class='terminology-tooltip'>动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为*序列*。<a class='terminology-link' href='/docs/automation/action/'> [Learn more]</a></span></span>
允许您设置/覆盖将在后续 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 中的模板使用的变量。有关如何定义整个脚本中可访问的变量,请参阅 脚本变量。
- alias: "设置变量"
variables:
entities:
- light.kitchen
- light.living_room
brightness: 100
- alias: "控制灯光"
action: light.turn_on
target:
entity_id: "{{ entities }}"
data:
brightness: "{{ brightness }}"
变量可以进行模板化。
- alias: "设置一个模板变量"
variables:
blind_state_message: "百叶窗状态是{{ states('cover.blind') }}。"
- alias: "通知百叶窗的状态"
action: notify.mobile_app_iphone
data:
message: "{{ blind_state_message }}"
变量作用域
由 variables
action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 定义的变量具有局部作用域。这意味着如果在嵌套序列块中更改了变量,该更改将在外部序列块中不可见。
在 if
序列内,variables
action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 仅会更改该序列中的 people
变量。
sequence:
# 将 people 变量设置为默认值
- variables:
people: 0
# 尝试在 Paulus 在家时增加 people
- if:
- condition: state
entity_id: device_tracker.paulus
state: "home"
then:
# 在此作用域和序列的这个点,people == 0
- variables:
people: "{{ people + 1 }}"
# 在此作用域,people 现在将是 1 ...
- action: notify.notify
data:
message: "家里有 {{ people }} 个人" # "家里有 1 个人"
# ... 但在此作用域它仍将是 0
- action: notify.notify
data:
message: "家里有 {{ people }} 个人" # "家里有 0 个人"
测试条件
在执行脚本时,您可以在主序列中添加条件,以停止进一步执行。当条件未返回 true
时,脚本将停止执行。有关不同条件的文档,请参阅 conditions page。
condition
action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 仅会停止当前序列块的执行。当它在 repeat 动作内部使用时,只有当前的 repeat
循环迭代将停止。当它在 choose 动作内部使用时,只有该 choose
内的 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 会停止。
# 如果 paulus 在家,继续执行下面的脚本
- alias: "检查 Paulus 是否在家"
condition: state
entity_id: device_tracker.paulus
state: "home"
condition
也可以是条件列表,并且执行将仅在所有条件返回 true
时继续。
- alias: "检查 Paulus 是否在家 且 温度低于 20"
conditions:
- condition: state
entity_id: "device_tracker.paulus"
state: "home"
- condition: numeric_state
entity_id: "sensor.temperature"
below: 20
等待时间(延迟)
延迟对于暂时暂停您的脚本,并在稍后时间启动它非常有用。我们支持以下不同的延迟语法。
# 秒
# 等待 5 秒
- alias: "等待 5 秒"
delay: 5
# HH:MM
# 等待 1 小时
- delay: "01:00"
# HH:MM:SS
# 等待 1.5 分钟
- delay: "00:01:30"
# 支持毫秒、秒、分钟、小时、天
# 可以组合使用,至少需要一个
# 使用毫秒时,考虑到延迟至少为 X 毫秒。它不会非常精确。
# 等待 1 分钟
- delay:
minutes: 1
所有形式都支持模板。
# 等待 input_number.minute_delay 设置的分钟数
- delay: "{{ states('input_number.minute_delay') | multiply(60) | int }}"
等待
这些 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 允许脚本等待系统中的实体在模板指定的某个状态,或某个事件根据一个或多个触发器发生。
等待模板
这个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 评估模板,如果为 true,则脚本将继续。如果不为 true,则将等待直到它为 true。
每当引用的实体 ID 改变状态时,都会重新评估模板。如果您在模板中使用非确定性函数,如 now()
,则它将不会持续重新评估,而仅在引用的实体 ID 发生变化时重新评估。如果您需要定期重新评估模板,可以引用 Time and Date 集成中的传感器,更新频率为每分钟或每日。
# 等待媒体播放器停止
- alias: "等待媒体播放器停止"
wait_template: "{{ is_state('media_player.floor', 'stop') }}"
等待触发器
这个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 可以使用在自动化的 trigger
部分中可用的相同触发器。请参阅 Automation Trigger。脚本将在任何触发器触发时继续执行。所有先前定义的 trigger variables、variables 和 [script variables] 都会传递给触发器。
# 等待自定义事件或灯光开启并保持开启 10 秒
- alias: "等待 MY_EVENT 或灯光开启"
wait_for_trigger:
- trigger: event
event_type: MY_EVENT
- trigger: state
entity_id: light.LIGHT
to: "on"
for: 10
等待超时
对于这两种等待,可以设置超时,如果条件/事件未满足,则脚本将继续执行。超时具有与 delay
相同的语法,并且像 delay
一样,也接受模板。
# 等待传感器改变为 'on',最长等待 1 分钟,再继续执行。
- wait_template: "{{ is_state('binary_sensor.entrance', 'on') }}"
timeout: "00:01:00"
您还可以通过使用可选的 continue_on_timeout: false
来使脚本在超时后中止。
# 等待 IFTTT 事件或在指定超时后中止。
- wait_for_trigger:
- trigger: event
event_type: ifttt_webhook_received
event_data:
action: connected_to_network
timeout:
minutes: "{{ timeout_minutes }}"
continue_on_timeout: false
在没有 continue_on_timeout: false
的情况下,脚本将始终继续,因为 continue_on_timeout
的默认值为 true
。
等待变量
每次等待完成后,无论是因为满足条件,事件发生,还是超时到期,变量 wait
将被创建/更新,以指示结果。
变量 | 描述 |
---|---|
wait.completed |
如果条件满足则为 true ,否则为 false
|
wait.remaining |
剩余的超时,或者如果未指定超时,则为 none
|
wait.trigger |
仅在 wait_for_trigger 后存在。包含有关哪个触发器触发的信息。(参见 Available-Trigger-Data。) 如果在超时到期之前没有触发器发生,则为 none
|
这可以用于在满足条件与不满足条件的情况下采取不同的行动,或者在实现单个超时的情况下顺序使用多个等待。
# 根据条件是否满足采取不同的行动。
- wait_template: "{{ is_state('binary_sensor.door', 'on') }}"
timeout: 10
- if:
- "{{ not wait.completed }}"
then:
- action: script.door_did_not_open
else:
- action: script.turn_on
target:
entity_id:
- script.door_did_open
- script.play_fanfare
# 等待总共 10 秒。
- wait_template: "{{ is_state('binary_sensor.door_1', 'on') }}"
timeout: 10
continue_on_timeout: false
- action: switch.turn_on
target:
entity_id: switch.some_light
- wait_for_trigger:
- trigger: state
entity_id: binary_sensor.door_2
to: "on"
for: 2
timeout: "{{ wait.remaining }}"
continue_on_timeout: false
- action: switch.turn_off
target:
entity_id: switch.some_light
触发事件
这个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 允许您触发一个事件。事件可以用于很多目的。它可以触发一个 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 或向另一个集成指示某些事情正在发生。例如,在下面的示例中,它用于在日志中创建一个条目。
- alias: "触发 LOGBOOK_ENTRY 事件"
event: LOGBOOK_ENTRY
event_data:
name: Paulus
message: 正在醒来
entity_id: device_tracker.paulus
domain: light
您还可以使用 event_data 触发一个带有自定义数据的事件。这可以用于将数据传递给另一个等待事件触发的脚本。
event_data
接受模板。
- event: MY_EVENT
event_data:
name: myEvent
customData: "{{ myCustomVariable }}"
生成和消费自定义事件
以下 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 示例展示了如何生成一个名为 event_light_state_changed
的自定义事件,并将 entity_id
作为事件数据。action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 部分可以在脚本或 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 内部。
- alias: "触发事件"
triggers:
- trigger: state
entity_id: switch.kitchen
to: "on"
actions:
- event: event_light_state_changed
event_data:
state: "on"
以下 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 示例展示了如何使用 事件自动化触发器 捕获自定义事件 event_light_state_changed
,并检索作为事件触发数据传递的相应 entity_id
,有关更多详细信息,请参阅 Available-Trigger-Data。
- alias: "捕获事件"
triggers:
- trigger: event
event_type: event_light_state_changed
actions:
- action: notify.notify
data:
message: "厨房灯已变为 {{ trigger.event.data.state }}"
重复一组动作
这个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 允许您重复一系列其他 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more]。完全支持嵌套。 有三种方法可以控制序列将运行多少次。
计数重复
此形式接受计数值。该值可以通过模板指定,在这种情况下,当到达重复步骤时模板将被渲染。
script:
flash_light:
mode: restart
sequence:
- action: light.turn_on
target:
entity_id: "light.{{ light }}"
- alias: "循环灯 'count' 次"
repeat:
count: "{{ count|int * 2 - 1 }}"
sequence:
- delay: 2
- action: light.toggle
target:
entity_id: "light.{{ light }}"
flash_hallway_light:
sequence:
- alias: "闪烁走廊灯 3 次"
action: script.flash_light
data:
light: hallway
count: 3
对每个项
这种重复形式接受要迭代的项目列表。项目列表可以是预先定义的列表,也可以是通过模板创建的列表。
序列将为列表中的每个项目执行,当前迭代中的项目可用为 repeat.item
。
以下示例将关闭一系列灯光:
repeat:
for_each:
- "living_room"
- "kitchen"
- "office"
sequence:
- action: light.turn_off
target:
entity_id: "light.{{ repeat.item }}"
其他类型也可以作为列表项被接受,例如,每个项目可以是一个模板,甚至是键值对的映射。
repeat:
for_each:
- language: English
message: Hello World
- language: Dutch
message: Hallo Wereld
sequence:
- action: notify.phone
data:
title: "Message in {{ repeat.item.language }}"
message: "{{ repeat.item.message }}!"
循环
这种形式接受一组条件(请参见 conditions page 以获得可用选项),这些条件在每次运行序列之前被评估。该序列会在条件评估为 true 的情况下运行。
script:
do_something:
sequence:
- action: script.get_ready_for_something
- alias: "只要条件为真就重复序列"
repeat:
while:
- condition: state
entity_id: input_boolean.do_something
state: "on"
# 不要做太多次
- condition: template
value_template: "{{ repeat.index <= 20 }}"
sequence:
- action: script.something
while
还接受 模板条件的简写语法。
例如:
- repeat:
while: "{{ is_state('sensor.mode', 'Home') and repeat.index < 10 }}"
sequence:
- ...
直到
这种形式接受一组条件,这些条件在每次运行序列后被评估。因此,该序列将至少运行一次。该序列将在条件评估为 true 之前运行。
automation:
- triggers:
- trigger: state
entity_id: binary_sensor.xyz
to: "on"
conditions:
- condition: state
entity_id: binary_sensor.something
state: "off"
actions:
- alias: "直到条件为真重复序列"
repeat:
sequence:
# 运行某个原因可能不总是有效的命令
- action: shell_command.turn_something_on
# 给它时间完成
- delay:
milliseconds: 200
until:
# 它成功了吗?
- condition: state
entity_id: binary_sensor.something
state: "on"
until
也接受 模板条件的简写语法。
例如:
- repeat:
until: "{{ is_state('device_tracker.iphone', 'home') }}"
sequence:
- ...
重复循环变量
在重复 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 中定义了一个名为 repeat
的变量(即,它在 sequence
、while
和 until
中可用)。
它包含以下字段:
字段 | 描述 |
---|---|
first |
在重复序列的第一次迭代期间为 true |
index |
循环的迭代编号:1、2、3,… |
last |
在重复序列的最后一次迭代期间为 true,仅在计数循环中有效 |
如果-那么
这个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 允许您根据一个或多个 conditions(使用 and
连接)有条件地运行一系列动作(then
),并可选择性地在条件未通过时运行其他序列(else
)。
script:
- if:
- alias: "如果没有人在家"
condition: state
entity_id: zone.home
state: 0
then:
- alias: "那么就开始清洁吧!"
action: vacuum.start
target:
area_id: living_room
# `else` 是完全可选的,可以省略
else:
- action: notify.notify
data:
message: "跳过清洁,有人在家!"
这个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 支持嵌套,然而,如果您发现自己在 else
部分使用嵌套的 if-then 动作,您可能要考虑使用 choose 而不是。
选择一组动作
这个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 允许您从一组序列中选择其他 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 的序列。 完全支持嵌套。
每个序列都与一组条件配对。(请参见 conditions page 以获取可用选项以及如何处理多个条件。)第一个条件的所有条件都为 true 的序列将被执行。
可以包括一个可选的 default
序列,该序列仅在列表中的其他序列未被执行时运行。
可以为每个序列添加可选的 alias
,不包括 default
序列。
choose
action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 可以像 “if/then/elseif/then…/else” 语句一样使用。第一个 conditions
/sequence
对就像 “if/then”,可以单独使用。或者可以添加更多对,每个对就像 “elif/then”。最后,可以添加一个 default
,就像 “else”。
# 示例包括 "if"、"elif" 和 "else"
automation:
- triggers:
- trigger: state
entity_id: input_boolean.simulate
to: "on"
mode: restart
actions:
- choose:
# 如果是早上
- conditions:
- condition: template
value_template: "{{ now().hour < 9 }}"
sequence:
- action: script.sim_morning
# 或者是白天
- conditions:
- condition: template
value_template: "{{ now().hour < 18 }}"
sequence:
- action: light.turn_off
target:
entity_id: light.living_room
- action: script.sim_day
# 否则是晚上
default:
- action: light.turn_off
target:
entity_id: light.kitchen
- delay:
minutes: "{{ range(1, 11)|random }}"
- action: light.turn_off
target:
entity_id: all
conditions
也接受 模板条件的简写语法。
例如:
automation:
- triggers:
- trigger: state
entity_id: input_select.home_mode
actions:
- choose:
- conditions: >
{{ trigger.to_state.state == 'Home' and
is_state('binary_sensor.all_clear', 'on') }}
sequence:
- action: script.arrive_home
data:
ok: true
- conditions: >
{{ trigger.to_state.state == 'Home' and
is_state('binary_sensor.all_clear', 'off') }}
sequence:
- action: script.turn_on
target:
entity_id: script.flash_lights
- action: script.arrive_home
data:
ok: false
- conditions: "{{ trigger.to_state.state == 'Away' }}"
sequence:
- action: script.left_home
可以使用更多的 choose
。这就是 IF-IF 的情况。
以下示例展示了如何单个 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 控制彼此无关但共有相同触发器的实体。
当太阳落到地平线以下时,porch
和 garden
灯必须开启。如果有人在客厅看电视,则很有可能有人在那房间,因此客厅灯也必须开启。相同的概念也适用于 studio
房间。
# 示例包含 "if" 和 "if"
automation:
- alias: "当太阳变暗以及如果某个房间被占用时开启灯光"
triggers:
- trigger: numeric_state
entity_id: sun.sun
attribute: elevation
below: 4
actions:
# 这必须始终适用
- action: light.turn_on
data:
brightness: 255
color_temp: 366
target:
entity_id:
- light.porch
- light.garden
# 如果有实体是开启的
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.livingroom_tv
state: "on"
sequence:
- action: light.turn_on
data:
brightness: 255
color_temp: 366
target:
entity_id: light.livingroom
# 如果与之前无关的另一个实体是开启的
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.studio_pc
state: "on"
sequence:
- action: light.turn_on
data:
brightness: 255
color_temp: 366
target:
entity_id: light.studio
组合动作
sequence
action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 允许您将多个 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 组合在一起。每个动作将在完成前一个动作后执行。
在序列中组合动作在您希望能够在用户界面上折叠相关组以进行组织时非常有用。
结合 parallel
动作,它还可以用于在序列中并行运行多个动作组。
在下面的示例中,两个独立的动作组依次执行,一个用于打开设备,另一个用于发送通知。每组动作按顺序执行,这包括每组中的动作以及组本身。总共执行四个动作,一个接一个。
automation:
- triggers:
- trigger: state
entity_id: binary_sensor.motion
to: "on"
actions:
- alias: "打开设备"
sequence:
- action: light.turn_on
target:
entity_id: light.ceiling
- action: siren.turn_on
target:
entity_id: siren.noise_maker
- alias: "发送通知"
sequence:
- action: notify.person1
data:
message: "运动传感器被触发!"
- action: notify.person2
data:
message: "哦哦,有人触发了运动传感器..."
并行化动作
默认情况下,Home Assistant 中的所有 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 序列按顺序运行。 这意味着下一个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 在当前动作完成后开始。
在某些情况下,这并不是必需的,例如,如果动作序列彼此不依赖,且顺序并不重要。在这些情况下,可以使用 parallel
动作并行运行序列中的 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more],这意味着所有 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 同时开始。
以下示例展示了同时(并行)发送消息:
automation:
- triggers:
- trigger: state
entity_id: binary_sensor.motion
to: "on"
actions:
- parallel:
- action: notify.person1
data:
message: "这些消息是同时发送的!"
- action: notify.person2
data:
message: "这些消息是同时发送的!"
在并行动作内部,也可以顺序运行一组动作。下面的示例演示了这一点:
script:
example_script:
sequence:
- parallel:
- sequence:
- wait_for_trigger:
- trigger: state
entity_id: binary_sensor.motion
to: "on"
- action: notify.person1
data:
message: "此消息在运动触发器等待"
- action: notify.person2
data:
message: "我立即发送,不等待上述动作!"
并行运行 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 在许多情况下可能有帮助,但请谨慎使用,仅在需要时使用。
使用并行动作时,有一些注意事项(如下所示)。
虽然并行化听起来具有吸引力,但大多数情况下,常规的顺序 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 会工作得很好。
并行运行 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 的一些注意事项:
- 没有顺序保证。actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 将并行启动,但没有保证它们会按相同顺序完成。
- 如果一个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 失败或出现错误,其他 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 将继续运行,直到它们也完成或出现错误。
- 在一个并行化的 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 中创建/修改的变量在另一个并行化的 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 中不可用。并行化的每一步都有自己的作用域。
- 并行化的 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 的响应数据也可在其自身范围之外访问。这对于并行化执行长时间运行的 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 特别有用。
停止脚本序列
可以在任何时候停止脚本序列并通过 stop
action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 返回脚本响应。
stop
action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 以文本作为输入,解释停止序列的原因。此文本将被记录并出现在 automationsHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 和脚本跟踪中。
在序列中的某个位置中止脚本时,stop
是非常有用的,例如,当满足条件时。
- stop: "停止运行剩余序列"
要从脚本返回响应,请使用 response_variable
选项。此选项期望包含要返回的数据的变量名。响应数据必须包含键/值映射。
- stop: "停止运行剩余序列"
response_variable: "my_response_variable"
还有一个 error
选项,指示我们因意外错误而停止。它也停止序列,但将 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 或脚本标记为运行失败。
- stop: "好吧,那是意料之外的!"
error: true
在错误时继续
默认情况下,当序列中的一个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 遇到错误时,该序列将停止。automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 或脚本将被停止,记录错误,并将 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 或脚本运行标记为错误。
有时这些错误是预期的,例如,因为您知道您执行的操作有时可能会出现问题,并且如果失败也无妨。
您可以在这种情况下为该 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 设置 continue_on_error
。
continue_on_error
可用于所有 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more],并设置为 false
。如果您希望无论该 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 是否遇到错误都继续进行该 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 序列,可以将其设置为 true
。
下面的示例展示了 continue_on_error
在第一个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 上设置。如果它遇到错误,则会继续到下一个 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more]。
- alias: "如果这个失败了..."
continue_on_error: true
action: notify.super_unreliable_service_provider
data:
message: "我将会出错..."
- alias: "这个仍然会运行!"
action: persistent_notification.create
data:
title: "你好!"
message: "我很好..."
请注意,continue_on_error
将不会抑制/忽略 Home Assistant 不处理的配置错误或其他错误。
禁用动作
序列中的每个单独 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 可以被禁用,而无需删除它。
要做到这一点,请在 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 中添加 enabled: false
。例如:
# 示例脚本包含一个禁用的动作
script:
example_script:
sequence:
# 此动作不会运行,因为它被禁用。
# 消息将不会发送。
- enabled: false
alias: "通知正在打开天花板灯"
action: notify.notify
data:
message: "正在打开天花板灯!"
# 此动作将运行,因为它没有被禁用
- alias: "打开天花板灯"
action: light.turn_on
target:
entity_id: light.ceiling
动作用有限的模板或蓝图输入也可以被禁用。
blueprint:
input:
input_boolean:
name: 布尔值
selector:
boolean:
actions:
- delay: 0:35
enabled: !input input_boolean
响应对话
set_conversation_response
脚本 action动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more] 允许在通过对话引擎触发的 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 时返回自定义响应,例如语音助手。对话响应可以进行模板化。
# 模板化对话响应的示例,结果为 "测试 123"
- variables:
my_var: "123"
- set_conversation_response: "{{ '测试 ' + my_var }}":
响应在 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 完成时传递给对话引擎。如果多次执行 set_conversation_response
,则将最新的响应传递给对话引擎。要清除响应,将其设置为 None
:
# 清除对话响应的示例
set_conversation_response: ~
如果 automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more] 不是通过对话引擎触发的,则该响应将不会被任何东西使用。