脚本语法

脚本是一系列 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

Note

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 variablesvariables 和 [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 的变量(即,它在 sequencewhileuntil 中可用)。 它包含以下字段:

字段 描述
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] 控制彼此无关但共有相同触发器的实体。

当太阳落到地平线以下时,porchgarden 灯必须开启。如果有人在客厅看电视,则很有可能有人在那房间,因此客厅灯也必须开启。相同的概念也适用于 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: "我立即发送,不等待上述动作!"

Warning

并行运行 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] 不是通过对话引擎触发的,则该响应将不会被任何东西使用。