自动化触发器

触发器是启动automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more]规则处理的条件。当自动化的任何触发器变为真(触发器_触发_)时,Home Assistant将验证条件,如果有的话,并调用action

一个automationHome Assistant 中的自动化允许您自动响应在家中和周围发生的事情。 [Learn more]可以通过event每当 Home Assistant 中发生某些事情时,都会触发一个事件。有不同类型的事件,例如状态更改事件、动作触发事件或时间更改事件。所有实体都会产生状态更改事件。每当状态更改时,都会产生状态更改事件。事件可用于触发自动化或脚本。例如,您可以在灯打开时触发自动化,然后在该房间中打开扬声器。事件还可用于触发前端的动作。例如,您可以在按下按钮时触发动作。 [Learn more]、特定的entity实体表示 Home Assistant 中的传感器、执行器或功能。实体用于监控物理属性或控制其他实体。实体通常是设备或服务的一部分。 [Learn more] state状态保存实体的感兴趣信息,例如灯是开还是关。每个实体只有一个状态,并且状态一次只保存一个值。但是,实体可以存储与该状态相关的属性,例如亮度、颜色或测量单位。 [Learn more]、在特定时间等来触发。这些可以直接指定或通过模板更灵活地指定。也可以为一个自动化指定多个触发器。

触发器 ID

所有触发器可以被指定一个可选的id。如果省略ID,则将设置为触发器的索引。可以从触发条件和行动引用idid不需要对每个触发器都是唯一的,它可以用于将相似的触发器分组以便稍后在自动化中使用(即,应将多个不同类型的触发器全部打开某个实体)。

视频教程

该视频教程解释了触发器 ID 的工作原理。

automation:
  triggers:
    - trigger: event
      event_type: "MY_CUSTOM_EVENT"
      id: "custom_event"
    - trigger: mqtt
      topic: "living_room/switch/ac"
      id: "ac_on"
    - trigger: state  # 该触发器将被分配 id="2"
      entity_id:
        - device_tracker.paulus
        - device_tracker.anne_therese
      to: "home"

触发器变量

有两种不同类型的变量可用于触发器。两者的工作方式类似于脚本级变量

第一种变体允许您定义在触发器触发时将被设置的变量。这些变量可以使用模板并访问trigger变量

第二种变体是在附加触发器时可用的变量,当触发器可以包含模板化的值。这些使用trigger_variables键在自动化级别定义。这些变量只能包含有限模板。如果模板的值发生变化,则不会重新应用触发器。触发器变量是为了支持在触发器中使用蓝图输入而设计的功能。

automation:
  trigger_variables:
    my_event: example_event
  triggers:
    - trigger: event
      # 能够使用 `trigger_variables`
      event_type: "{{ my_event }}"
      # 这些变量在该触发器被触发时被评估和设置
      variables:
        name: "{{ trigger.event.data.name }}"

事件触发器

当接收到事件时,事件触发器会触发。事件是 Home Assistant 的原始构建块。您可以仅按事件名称来匹配事件,也可以要求特定的事件数据或上下文存在。

事件可以由集成或通过 API 触发。没有类型上的限制。内置事件的列表可以在这里找到。

automation:
  triggers:
    - trigger: event
      event_type: "MY_CUSTOM_EVENT"
      # 可选
      event_data:
        mood: happy
      context:
        user_id:
        # 这些都将匹配
          - "MY_USER_ID"
          - "ANOTHER_USER_ID"

也可以同时监听多个事件。这对于包含没有或相似数据和上下文的事件很有用。

automation:
  triggers:
    - trigger: event
      event_type:
        - automation_reloaded
        - scene_reloaded

您还可以在event_typeevent_datacontext选项中使用有限模板

Important

event_typeevent_datacontext模板仅在设置触发器时被评估,它们不会为每个事件重新评估。

automation:
  trigger_variables:
    sub_event: ABC
    node: ac
    value: on
  triggers:
    - trigger: event
      event_type: "{{ 'MY_CUSTOM_EVENT_' ~ sub_event }}"

Home Assistant 触发器

在 Home Assistant 启动或关闭时触发。

automation:
  triggers:
    - trigger: homeassistant
      # 事件也可以是 'shutdown'
      event: start

Note

shutdown 事件触发的自动化有 20 秒的时间运行,之后它们将被停止以继续关闭过程。

MQTT 触发器

在给定的 MQTT 主题上收到特定消息时触发。可选地可以匹配发送的有效负载。默认的有效负载编码为 ‘utf-8’。对于图像和其他字节负载,请使用 encoding: '' 完全禁用有效负载解码。

automation:
  triggers:
    - trigger: mqtt
      topic: "living_room/switch/ac"
      # 可选
      payload: "on"
      encoding: "utf-8"

payload 选项可以与 value_template 结合使用,以在与有效负载匹配之前处理在给定 MQTT 主题上接收到的消息。 下面示例中的触发器将仅在 living_room/switch/ac 上接收到的消息是有效 JSON 时触发,其中键 state 的值为 "on"

automation:
  triggers:
    - trigger: mqtt
      topic: "living_room/switch/ac"
      payload: "on"
      value_template: "{{ value_json.state }}"

您还可以在 topicpayload 选项中使用有限模板

Note

topicpayload 模板仅在设置触发器时被评估,它们不会为每个传入的 MQTT 消息重新评估。

automation:
  trigger_variables:
    room: "living_room"
    node: "ac"
    value: "on"
  triggers:
    - trigger: mqtt
      topic: "{{ room ~ '/switch/' ~ node}}"
      # 可选
      payload: "{{ 'state:' ~ value }}"
      encoding: "utf-8"

数值状态触发器

当实体状态(或属性值,如果使用 attribute 属性)数值跨越给定的阈值(不包括等于)时触发。在指定实体的状态变化时,尝试将状态解析为数字,当值从以上变为以下或从以下变为以上给定阈值时触发(不包括等于)。

Note

跨越阈值意味着触发器仅在状态未先前在阈值内时触发。 如果实体的当前状态为 50 并且您将阈值设置为 below: 75,则如果状态改变为例如 4972,则不会触发,因为从未跨越阈值。状态必须先改变为例如 76,然后再改变为例如 74 才能触发。

automation:
  triggers:
    - trigger: numeric_state
      entity_id: sensor.temperature
      # 如果给定,则在给定实体的给定属性值发生变化时触发。
      attribute: attribute_name
      # ..或者替代地,在此评估模板定义的值发生变化时触发。
      value_template: "{{ state.attributes.value - 5 }}"
      # 至少需要以下一项
      above: 17
      below: 25
      # 如果给定,将在条件成立 X 时间后触发;您还可以使用天数和毫秒。
      for:
        hours: 1
        minutes: 10
        seconds: 5

Note

同时列出 above 和 below 意味着 numeric_state 必须在两个值之间。 在上述示例中,如果 numeric_state 进入 17.1-24.9 范围(高于 17 和低于 25),则触发器将单次触发。它只会再次触发,一旦它离开定义的范围并再次进入。

当指定 attribute 选项时,触发器与给定的 attribute 进行比较,而不是与实体的状态进行比较。

automation:
  triggers:
    - trigger: numeric_state
      entity_id: climate.kitchen
      attribute: current_temperature
      above: 23

使用 value_template 可以进行更动态和复杂的计算。变量’state’是由 entity_id 指定的实体的state object

可以像这样引用实体的状态:

automation:
  triggers:
    - trigger: numeric_state
      entity_id: sensor.temperature
      value_template: "{{ state.state | float * 9 / 5 + 32 }}"
      above: 70

可以像这样引用实体的属性:

automation:
  triggers:
    - trigger: numeric_state
      entity_id: climate.kitchen
      value_template: "{{ state.attributes.current_temperature - state.attributes.temperature_set_point }}"
      above: 3

数字助手(input_number 实体)、numbersensor 和包含数值的 zone 实体可以在 abovebelow 阈值中使用。 但是,比较仅在触发器中指定的实体更新时进行。如下所示:

automation:
  triggers:
    - trigger: numeric_state
      entity_id: sensor.outside_temperature
      # 可以为 above 和/或 below 阈值指定其他实体 ID
      above: sensor.inside_temperature

for: 还可以以 HH:MM:SS 形式指定,如下所示:

{% raw %}

automation:
  triggers:
    - trigger: numeric_state
      entity_id: sensor.temperature
      # 至少需要以下一项
      above: 17
      below: 25

      # 如果给定,将在条件符合 X 时间后触发。
      for: "01:10:05"

您还可以在 for 选项中使用模板。

automation:
  triggers:
    - trigger: numeric_state
      entity_id:
        - sensor.temperature_1
        - sensor.temperature_2
      above: 80
      for:
        minutes: "{{ states('input_number.high_temp_min')|int }}"
        seconds: "{{ states('input_number.high_temp_sec')|int }}"
  actions:
    - action: persistent_notification.create
      data:
        message: >
          {{ trigger.to_state.name }} 太高了 {{ trigger.for }}!

for 模板将在实体更改时根据指定的条件进行评估。

Important

使用 for 选项在 Home Assistant 重启或自动化重载后不会存活。当重启或重载时,正在等待 for 的触发器将被重置。 如果您认为这对您的使用场景不合适,可以考虑使用自动化设置input_datetime到所需时间,然后使用该input_datetime作为自动化触发器在设定时间执行所需操作。

状态触发器

一般来说,状态触发器在给定实体的状态发生变化时触发。行为如下:

  • 如果仅给定 entity_id,触发器会在所有状态变化时触发,即使只有状态属性发生了变化。
  • 如果给定了至少一个 fromtonot_fromnot_to,则触发器在任何匹配的状态变化时触发,但不会仅在属性变化时触发。
    • 要在所有状态变化上触发,但不在属性变化上触发,请将 fromtonot_fromnot_to 中的至少一个设置为 null
  • 使用 for 选项则不会在 Home Assistant 重启或自动化重载时存活。
    • 在重启或重载时,正在等待 for 的触发器将被重置。
    • 如果您认为这对您的使用场景不合适,可以考虑使用自动化设置input_datetime到所需时间,然后使用该input_datetime作为自动化触发器在设定时间执行所需操作。

Tip

您在概述中看到的值往往与实体的实际状态不同。例如,概述可能显示为 连接,而基础实体实际上为 打开。您应该通过开发者工具中的状态检查实体的状态,位于 开发者工具 > 状态

示例

该自动化在 Paulus 或 Anne-Therese 在家待了一分钟时触发。

automation:
  triggers:
    - trigger: state
      entity_id:
        - device_tracker.paulus
        - device_tracker.anne_therese
      # 可选
      from: "not_home"
      # 可选
      to: "home"
      # 如果给定,将在条件成立 X 时间后触发;您还可以使用天数和毫秒。
      for:
        hours: 0
        minutes: 1
        seconds: 0

可以提供一个 from 状态或 to 状态的列表:

automation:
  triggers:
    - trigger: state
      entity_id: vacuum.test
      from:
        - "cleaning"
        - "returning"
      to: "error"

如果您希望在所有状态变化时触发,但不在属性变化时触发,可以将 to 设置为 null(这也可以通过将 fromnot_fromnot_to 设置为 null 来实现):

automation:
  triggers:
    - trigger: state
      entity_id: vacuum.test
      to:

如果您希望在所有状态变化之外的特定状态上触发,请使用 not_fromnot_tonot_fromnot_to 选项是 fromto 的反面。它们可以用于触发不是指定状态的状态变化。

automation:
  triggers:
    - trigger: state
      entity_id: vacuum.test
      not_from:
        - "unknown"
        - "unavailable"
      to: "on"

您不能同时使用 fromnot_from。同样适用于 tonot_to

在属性变化时触发

当指定 attribute 选项时,触发器仅在指定属性变化时触发。对其他属性或状态变化将被忽略。

例如,该触发器仅在锅炉加热了 10 分钟时触发:

automation:
  triggers:
    - trigger: state
      entity_id: climate.living_room
      attribute: hvac_action
      to: "heating"
      for: "00:10:00"

该触发器在锅炉的 hvac_action 属性发生变化时触发:

automation:
  triggers:
    - trigger: state
      entity_id: climate.living_room
      attribute: hvac_action

保持一个状态或属性

您可以使用 for 选项使状态触发器仅在状态持续了一段时间后触发。

此示例在实体状态改变为“打开”并保持该状态 30 秒时触发:

automation:
  triggers:
    - trigger: state
      entity_id: light.office
      # 必须保持“打开”状态 30 秒
      to: "on"
      for: "00:00:30"

在保持状态时,将忽略对属性的变化。属性的变化不会取消保持时间。

您还可以在状态值从特定状态变化,但在指定时间内没有返回到该状态值时触发。

这可能很有用,例如,检查某个媒体播放器在指定时间内没有变为“关闭”,但不关心“播放”或“暂停”。

automation:
  triggers:
    - trigger: state
      entity_id: media_player.kitchen
      # 在 30 分钟内不“关闭”
      from: "off"
      for: "00:30:00"

请注意,在使用 fromtofor 时,仅考虑 to 选项的值用于所指定的时间。

在此示例中,当实体的状态值在指定的 for 时间内保持不变时,触发器被触发,而不管当前的状态值。

automation:
  triggers:
    - trigger: state
      entity_id: media_player.kitchen
      # 媒体播放器在当前状态下保持了 1 小时
      for: "01:00:00"

您还可以在 for 选项中使用模板。

automation:
  triggers:
    - trigger: state
      entity_id:
        - device_tracker.paulus
        - device_tracker.anne_therese
      to: "home"
      for:
        minutes: "{{ states('input_number.lock_min')|int }}"
        seconds: "{{ states('input_number.lock_sec')|int }}"
  actions:
    - action: lock.lock
      target:
        entity_id: lock.my_place

for 模板将在实体更改时根据指定的条件进行评估。

Tip

fromto 值中使用引号,以避免 YAML 解析器将值解释为布尔值。

太阳触发器

日落 / 日出触发器

在太阳落山或升起时触发,也就是当太阳高度达到 0° 时。

可以指定一个可选的时间偏移,以便在太阳事件之前或之后触发(例如,在日落之前 45 分钟)。负值使它在日出或日落之前触发,正值则在之后。偏移需要以秒数或 hh:mm:ss 格式指定。

Tip

由于黄昏的持续时间在全年不同,建议使用太阳高度触发器而不是 sunsetsunrise 作为触发器,以便在黄昏或黎明时触发自动化。

automation:
  triggers:
    - trigger: sun
      # 可能的值:日落,日出
      event: sunset
      # 可选时间偏移。此示例将在日落前 45 分钟触发。
      offset: "-00:45:00"

太阳高度触发器

有时您可能希望比简单的日落或日出更为详细地控制自动化,并指定确切的太阳高度。可以用于让自动化在太阳下降到地平线时或甚至在其低于地平线时发生。这在“日落”事件的阳光外部不够明亮时也很有用,您希望自动化在精确的太阳角度下运行,而不是时间偏移,例如开启外部照明。对于大多数期望在黄昏或黎明时运行的自动化,0° 到 -6° 之间的数值是合适的;在此示例中使用 -4°:

automation:
  - alias: "外部照明在外面黑暗时开启"
    triggers:
      - trigger: numeric_state
        entity_id: sun.sun
        attribute: elevation
        # 可以是正数或负数
        below: -4.0
    actions:
      - action: switch.turn_on
        target:
          entity_id: switch.exterior_lighting

如果您希望更精准,您可以使用这个太阳计算器,它将帮助您估算在任何特定时间的太阳高度。然后,从中可以选择定义的黄昏数值。

尽管实际的光线强度取决于天气、地形和土地覆盖,但它们被定义为:

  • 民用黄昏:0° > 太阳角度 > -6°

    这就是一般人所理解的黄昏:在晴朗的天气条件下,民用黄昏近似于太阳照明对人眼清楚地辨别地面物体的局限。足够的照明使得大多数户外活动无需人造光源。

  • 海事黄昏:-6° > 太阳角度 > -12°

  • 天文黄昏:-12° > 太阳角度 > -18°

关于这一点的详细解释可以在维基百科关于黄昏的文章中找到。

标签触发器

在扫描标签时触发,例如,通过 Home Assistant Companion 移动应用程序扫描 NFC 标签。

automation:
  triggers:
    - trigger: tag
      tag_id: A7-6B-90-5F

此外,您还可以仅在特定设备/扫描仪扫描卡片时触发,方法是设置 device_id

automation:
  triggers:
    - trigger: tag
      tag_id: A7-6B-90-5F
      device_id: 0e19cd3cf2b311ea88f469a7512c307d

或针对多个标签上的多个可能设备触发:

automation:
  triggers:
    - trigger: tag
      tag_id:
        - "A7-6B-90-5F"
        - "A7-6B-15-AC"
      device_id:
        - 0e19cd3cf2b311ea88f469a7512c307d
        - d0609cb25f4a13922bb27d8f86e4c821

模板触发器

模板触发器通过在任何识别的实体状态发生变化时评估模板来工作。若状态变化导致模板渲染为 ‘true’(非零数字或任一字符串 trueyesonenable)时,触发器将触发,而之前为 ‘false’(其他任何情况)。

这通过使模板结果形成一个真正的布尔表达式(例如 {{ is_state('device_tracker.paulus', 'home') }})或使模板渲染为 true(下面的示例)来实现。

使用模板触发器时,您还可以通过使用 is_state_attr 来评估属性变化(如 {{ is_state_attr('climate.living_room', 'away_mode', 'off') }})。

automation:
  triggers:
    - trigger: template
      value_template: "{% if is_state('device_tracker.paulus', 'home') %}true{% endif %}"

      # 如果给定,将在模板保持为真 X 时间后触发。
      for: "00:01:00"

您还可以在 for 选项中使用模板。

automation:
  triggers:
    - trigger: template
      value_template: "{{ is_state('device_tracker.paulus', 'home') }}"
      for:
        minutes: "{{ states('input_number.minutes')|int(0) }}"

for 模板将在 value_template 变为 ‘true’ 时被评估。

不包含实体的模板将在每分钟渲染一次。

Important

使用 for 选项在 Home Assistant 重启或自动化重载后不会存活。在重启或重载时,正在等待 for 的触发器将被重置。 如果您认为这对您的使用场景不合适,可以考虑使用自动化设置input_datetime到所需时间,然后使用该input_datetime作为自动化触发器在设定时间执行所需操作。

时间触发器

时间触发器配置为每天在特定时间触发,或在特定日期的特定时间触发。允许三种格式:

时间字符串

表示每天触发的时间字符串。可以指定为 HH:MMHH:MM:SS。如果未指定秒数,将使用 :00

automation:
  - triggers:
    - trigger: time
      # 军事时间格式。该触发器将在下午 3:32 触发
      at: "15:32:00"

输入日期时间

一个输入日期时间的实体 ID。

has_date has_time 描述
true true 将在指定日期和时间触发。
true false 将在指定日期的午夜触发。
false true 将在每天的指定时间触发。
automation:
  - triggers:
      - trigger: state
        entity_id: binary_sensor.motion
        to: "on"
    actions:
      - action: climate.turn_on
        target:
          entity_id: climate.office
      - action: input_datetime.set_datetime
        target:
          entity_id: input_datetime.turn_off_ac
        data:
          datetime: >
            {{ (now().timestamp() + 2*60*60)
               | timestamp_custom('%Y-%m-%d %H:%M:%S') }}
  - triggers:
      - trigger: time
        at: input_datetime.turn_off_ac
    actions:
      - action: climate.turn_off
        target:
          entity_id: climate.office

时间设备类的传感器

具有“时间戳”设备类的传感器的实体 ID。

automation:
  - triggers:
      - trigger: time
        at: sensor.phone_next_alarm
    actions:
      - action: light.turn_on
        target:
          entity_id: light.bedroom

带偏移的时间设备类传感器

当使用时间戳设备类的传感器提供时间时,可以提供偏移。此偏移将加到(或在为负时从)传感器值中。

例如,该触发器将在电话闹钟响起前 5 分钟触发。

automation:
  - triggers:
      - trigger: time
        at:
          entity_id: sensor.phone_next_alarm
          offset: -00:05:00
    actions:
      - action: light.turn_on
        target:
          entity_id: light.bedroom

Important

使用正偏移时,触发器可能永远不会触发。这是因为传感器在偏移达到之前会变化。例如,当使用电话闹钟作为触发器时,传感器值将在闹钟响起时更改为新的闹钟时间,这意味着该触发器也将变为新时间。

多个时间

可以在列表中提供多个时间。所有格式可以混合使用。

automation:
  triggers:
    - trigger: time
      at:
        - input_datetime.leave_for_work
        - "18:30:00"
        - entity_id: sensor.bus_arrival
          offset: "-00:10:00"

限制模板

也可以对时间使用限制模板

blueprint:
  input:
    alarm:
      name: Alarm
      selector: 
        text:
    hour:
      name: Hour
      selector:
        number:
          min: 0
          max: 24

  trigger_variables:
    my_alarm: !input alarm
    my_hour: !input hour
  trigger:
    - platform: time
      at:
      - "sensor.{{ my_alarm | slugify }}_time"
      - "{{ my_hour }}:30:00"

时间模式触发器

使用时间模式触发器,您可以匹配当前时间的小时、分钟或秒是否匹配特定值。您可以用 / 前缀值,以匹配每当该值能被该数字整除时。可以指定*以匹配任何值(在使用 Web 界面时这是必需的,字段不能留空)。

automation:
  triggers:
    - trigger: time_pattern
      # 每小时的 5 分钟触发
      minutes: 5

automation 2:
  triggers:
    - trigger: time_pattern
      # 在 3 点的每分钟触发一次
      hours: "3"
      minutes: "*"

automation 3:
  triggers:
    - trigger: time_pattern
      # 您也可以按间隔匹配。这将每 5 分钟触发一次
      minutes: "/5"

Note

请勿在数字前加零 - 例如使用 '01' 代替 '1' 将导致错误。

持久通知触发器

持久通知触发器在符合配置选项的情况下,当 persistent_notification添加移除 时被触发。

automation:
  triggers:
    - trigger: persistent_notification
      update_type:
        - added
        - removed
      notification_id: invalid_config

有关事件触发器和自动化可使用的附加事件数据的详细信息,请参阅持久通知集成。

Webhook 触发器

Webhook 触发器在向 webhook 端点发送网络请求时触发:/api/webhook/<webhook_id>。当您在自动化触发器中将其设置为 webhook_id 时,Webhook 端点会自动创建。

automation:
  triggers:
    - trigger: webhook
      webhook_id: "some_hook_id"
      allowed_methods:
        - POST
        - PUT
      local_only: true

您可以通过向 http://your-home-assistant:8123/api/webhook/some_hook_id 发送 HTTP POST 请求来运行此自动化。以下是使用 curl 命令行程序的示例,示例表单数据有效负载:

curl -X POST -d 'key=value&key2=value2' https://your-home-assistant:8123/api/webhook/some_hook_id

Webhook 支持 HTTP POST、PUT、HEAD 和 GET 请求;推荐使用 PUT 请求。HTTP GET 和 HEAD 请求默认未启用,但可以通过将其添加到 allowed_methods 选项来启用。请求方法也可以通过单击 Webhook ID 旁边的设置齿轮菜单按钮在 UI 中进行配置。

默认情况下,Webhook 触发器只能从与 Home Assistant 在同一网络中的设备访问,或通过Nabu Casa Cloud Webhook 访问。应将 local_only 选项设置为 false,以允许 webhook 在互联网上直接触发。该选项也可以通过单击 Webhook ID 旁边的设置齿轮菜单按钮在 UI 中进行配置。

记得在使用 SSL/TLS 保护您的 Home Assistant 安装时使用 HTTPS URL。

请注意,每个 webhook 只能在一个自动化中使用一次。就是说,只有一个自动化触发器可以使用特定的 webhook ID。

Webhook 数据

有效负载可以编码为表单数据或 JSON。根据这一点,其数据将在自动化模板中作为 trigger.datatrigger.json 可用。URL 查询参数在模板中也可用,作为 trigger.query

请注意,使用 JSON 编码的有效负载必须将 Content-Type 头设置为 application/json,例如:

curl -X POST -H "Content-Type: application/json" -d '{ "key": "value" }' https://your-home-assistant:8123/api/webhook/some_hook_id

Webhook 安全

Webhook 端点不需要身份验证,仅需知道有效的 webhook ID。Webhook 的安全最佳实践包括:

  • 不要使用 webhook 触发可能破坏或造成安全问题的自动化。例如,不要使用 webhook 解锁锁,或打开车库门。
  • 将 webhook ID 视为密码:使用唯一的、不可猜测的值,保持机密。
  • 不要从公共来源,包括蓝图,复制和粘贴 webhook ID。始终创建您自己的。
  • 如果不需要从互联网访问,始终将 local_only 选项启用。

区域触发器

区域触发器在实体进入或离开区域时触发。实体可以是一个人或设备跟踪器。要使区域自动化正常工作,您需要设置支持报告 GPS 坐标的设备跟踪平台。这包括 GPS LoggerOwnTracks 平台iCloud 平台

automation:
  triggers:
    - trigger: zone
      entity_id: person.paulus
      zone: zone.home
      # 事件是进入还是离开
      event: enter # 或 "leave"

地理位置触发器

地理位置触发器在实体出现在或消失于区域时触发。由 Geolocation 平台生成的实体支持报告 GPS 坐标。 由于这些平台自动生成和移除实体,实体 ID 通常无法预测。因此,此触发器需要定义一个 source,该 source 直接链接到其中一个地理位置平台。

Tip

这不适用于 device_tracker 实体。对于那些请查看上面的 zone 触发器。

automation:
  triggers:
    - trigger: geo_location
      source: nsw_rural_fire_service_feed
      zone: zone.bushfire_alert_zone
      # 事件是进入还是离开
      event: enter # 或 "leave"

设备触发器

设备触发器包含由集成定义的一组事件。这包括传感器的状态变化以及遥控器的按钮事件。 MQTT 设备触发器通过自动发现设置。

与状态触发器相比,设备触发器与设备相关,而不一定与实体相关。 要使用设备触发器,请通过浏览器前端设置自动化。 如果要使用不通过浏览器前端管理的自动化的设备触发器,则可以从前端的触发器小部件中复制 YAML 代码并将其粘贴到自动化的触发器列表中。

日历触发器

日历触发器在日历事件开始或结束时触发,允许比使用仅支持单个事件开始的日历实体状态更灵活的自动化。

可以提供可选的时间偏移,以在日历事件之前或之后触发(例如,在事件开始前 5 分钟)。

automation:
  triggers:
    - trigger: calendar
      # 可能的值:start, end
      event: start
      # 日历实体 ID
      entity_id: calendar.light_schedule
      # 可选时间偏移
      offset: "-00:05:00"

有关事件触发器和自动化可使用的附加事件数据的详细信息,请参阅日历集成。

句子触发器

Assist通过默认的对话代理与语音助手匹配句子时,句子触发器会触发。句子触发器仅适用于 Home Assistant Assist。不能使用外部对话代理,如 OpenAI 或 Google 生成 AI 来触发自动化。

句子可以使用一些基本的模板语法,例如可选和替代词。例如,[it's ]party time 将匹配 “party time” 和 “it’s party time”。

automation:
  triggers:
    - trigger: conversation
      command:
        - "[it's ]party time"
        - "happy (new year|birthday)"

该触发器匹配的句子将是:

  • party time
  • it’s party time
  • happy new year
  • happy birthday

标点符号和大小写将被忽略,因此 “It’s PARTY TIME!!!” 也将匹配。

相关主题

句子通配符

向触发句子添加一个或多个 {lists} 可以在句子中的该点捕获任何文本。在触发数据中将可用的 slots 对象。 这允许您匹配包含可变部分的句子,例如专辑/艺术家的名字或图片的描述。

例如,句子 play {album} by {artist} 将匹配 “play the white album by the beatles”,并在行动模板中具有以下可用变量:

  • {{ trigger.slots.album }} - “the white album”
  • {{ trigger.slots.artist }} - “the beatles”

通配符将匹配尽可能多的文本,这可能会导致一些意外情况:“play day by day by taken by trees” 将匹配 album 为 “day” 和 artist 为 “day by taken by trees”。 在模板中包括额外的词可以有所帮助: play {album} by artist {artist} 现在可以正确地匹配 “play day by day by artist taken by trees”。

多个触发器

可以为同一规则指定多个触发器。只需在每个触发器的第一行前加上短横线(-),并相应地缩进后续行即可。每当其中一个触发器触发时,自动化规则的处理将开始。

automation:
  triggers:
    # 第一个触发器
    - trigger: time_pattern
      minutes: 5
      # 第二个触发器是日落触发器
    - trigger: sun
      event: sunset

同一触发器的多个实体 ID

可以为同一触发器指定多个实体。为此,使用嵌套列表添加多个实体。每次触发器在所列的任何实体为真时,将触发并开始处理自动化。

automation:
  triggers:
    - trigger: state
      entity_id:
        - sensor.one
        - sensor.two
        - sensor.three

禁用触发器

每个自动化中的单个触发器都可以被禁用,而不移除它。 为此,向触发器添加 enabled: false。例如:

# 示例脚本,其中禁用了一个触发器
automation:
  triggers:
    # 此触发器将不会触发,因为它被禁用。
    # 当太阳落山时该自动化不会运行。
    - enabled: false
      trigger: sun
      event: sunset

    # 此触发器将触发,因为它未被禁用。
    - trigger: time
      at: "15:32:00"

触发器也可以根据有限模板或蓝图输入被禁用。这些仅在自动化加载时评估一次。

blueprint:
  input:
    input_boolean:
      name: Boolean
      selector: 
        boolean:
    input_number:
      name: Number
      selector:
        number:
          min: 0
          max: 100

  trigger_variables:
    _enable_number: !input input_number

  triggers:
    - trigger: sun
      event_type: sunrise
      enabled: !input input_boolean
    - trigger: sun
      event_type: sunset
      enabled: "{{ _enable_number < 50 }}"

合并触发器列表

Caution

此功能要求 Home Assistant 版本 2024.10 或更高。如果在蓝图中使用此功能,请将蓝图的 min_version 设置为至少此版本。有关更多详细信息,请参阅蓝图模式文档

在某些高级情况下(例如对于具有触发器选择器的蓝图),可能需要将第二个触发器列表插入主触发器列表。这可以通过在主触发器列表中添加一个字典来完成,唯一的键是 triggers,该键的值包含第二个触发器列表。然后,这些将被扁平化为一组触发器。例如:

blueprint:
  name: 嵌套触发器蓝图
  domain: automation
  input:
    usertrigger:
      selector:
        trigger:

triggers:
  - trigger: event
    event_type: manual_event
  - triggers: !input usertrigger

该蓝图自动化可以通过固定的 manual_event 触发器触发,或通过触发器选择器中选择的任何触发器附加触发。这同样适用于 wait_for_trigger 操作。