自动化模板

自动化支持模板的高级功能,就像脚本一样。除了脚本可用的 Home Assistant 模板扩展之外,自动化还可以使用 triggerthis 模板变量。

模板中使用变量的示例:

  • this.name 是从此触发器执行的自动化的名称
  • trigger.platform 是触发器对象的类型,如 calendar

可用的状态数据

模板变量 this 是一个对象,包含触发动作时该自动化的状态,可用于评估活动自动化配置中声明的 trigger_variables。状态对象还包含上下文数据,可用于识别引发状态变化或触发执行的用户。请注意,this 在动作执行期间不会改变。

可用的触发器数据

模板变量 trigger 是一个对象,包含有关哪个触发器触发了自动化的详细信息。platform 属性包含其事件触发自动化的触发器的名称。

模板可以使用这些数据来修改自动化执行的操作或消息中显示的内容。例如,您可以创建一个可由多个传感器触发的自动化,然后使用传感器的位置来指定要激活的灯;或者您可以发送包含触发它的传感器的友好名称的通知。

每种触发器平台都包含该触发器特有的附加数据。

全部

来自所有平台的触发器都将包含以下属性。

模板变量数据
trigger.platform触发器对象类型。
trigger.alias触发器的别名。
trigger.id触发器的 id
trigger.idx触发器的索引。(第一个触发器 idx 为 0。)

日历

以下是日历触发器可用的属性。

模板变量数据
trigger.platform固定值:calendar
trigger.event触发事件类型,start(开始)或 end(结束)。
trigger.calendar_event匹配的日历事件对象。
trigger.calendar_event.summary日历事件的标题或摘要。
trigger.calendar_event.start日历事件开始日期或日期时间的字符串表示,例如 2022-04-102022-04-10 11:30:00-07:00
trigger.calendar_event.end日历事件结束日期或日期时间的字符串表示(UTC),例如 2022-04-112022-04-10 11:45:00-07:00
trigger.calendar_event.all_day指示事件是否持续全天。
trigger.calendar_event.description日历事件的详细描述(如果有)。
trigger.calendar_event.location日历事件的位置信息(如果有)。
trigger.offset事件偏移量的时间差对象(如果有)。

设备

以下是设备触发器可用的属性。

继承自事件状态模板变量,具体取决于为设备选择的触发器类型。

模板变量数据
trigger.platform固定值:device

事件

每当实体状态更改或发生与配置的 event_type 匹配的事件时,事件触发器就会触发。

以下是事件触发器可用的属性。

模板变量数据
trigger.platform固定值:event
trigger.event匹配的事件对象。
trigger.event.event_type事件类型。
trigger.event.data可选的事件数据。

地理定位

以下是地理位置触发器可用的属性。

模板变量数据
trigger.platform固定值:geo_location
trigger.event触发事件类型,enter(进入)或 leave(离开)。
trigger.source创建触发事件的地理定位平台。
trigger.zone区域的状态对象。

Home Assistant

对于自动化,推荐使用 Home Assistant 触发器,而不是 homeassistant_start 或 homeassistant_stop 事件

以下是 Home Assistant 触发器可用的属性。

模板变量数据
trigger.platform固定值:homeassistant
trigger.event触发事件类型,start(启动)或 shutdown(关闭)。

MQTT

以下是 MQTT 触发器可用的属性。

模板变量数据
trigger.platform固定值:MQTT
trigger.topic接收负载的主题。
trigger.payload负载。
trigger.payload_jsonJSON 解析负载的字典。
trigger.qos负载的 QOS。

数值状态

以下是数值状态触发器可用的属性。

模板变量数据
trigger.platform固定值:numeric_state
trigger.entity_id我们观察的实体 ID。
trigger.below低于阈值(如果有)。
trigger.above高于阈值(如果有)。
trigger.from_state实体的先前[状态对象]
trigger.to_state触发触发器的新[状态对象]。
trigger.for状态满足高于/低于条件的时间长度的时间差对象(如果有)。

语句

以下是语句触发器可用的属性。

模板变量数据
trigger.platform固定值:conversation
trigger.sentence匹配的语句文本。
trigger.slots匹配的槽位值的对象。
trigger.details按名称匹配的槽位详细信息的对象,例如通配符。每个详细信息包含:
  • name - 槽位名称
  • text - 匹配的文本
  • value - 输出值(参见列表
trigger.device_id捕获命令的设备 ID(如果有)。
trigger.satellite_id捕获命令的卫星实体 ID(如果有)。

状态

以下是状态触发器可用的属性。

模板变量数据
trigger.platform固定值:state
trigger.entity_id我们观察的实体 ID。
trigger.from_state实体的先前[状态对象]。
trigger.to_state触发触发器的新[状态对象]。
trigger.for状态已保持该状态的时间长度的时间差对象(如果有)。

太阳

以下是太阳触发器可用的属性。

模板变量数据
trigger.platform固定值:sun
trigger.event刚刚发生的事件:sunset(日落)或 sunrise(日出)。
trigger.offset事件偏移量的时间差对象(如果有)。

标签

以下是标签触发器可用的属性。

模板变量数据
trigger.platform固定值:tag
trigger.tag_id捕获的标签 ID。
trigger.device_id捕获标签的可选设备 ID。

模板

以下是模板触发器可用的属性。

模板变量数据
trigger.platform固定值:template
trigger.entity_id导致变化的实体 ID。
trigger.from_state导致变化的实体的先前[状态对象]。
trigger.to_state导致模板变化的实体的新[状态对象]。
trigger.for状态已保持该状态的时间长度的时间差对象(如果有)。

时间

以下是时间触发器可用的属性。

模板变量数据
trigger.platform固定值:time
trigger.now触发时间触发器的 DateTime 对象。

时间模式

以下是时间模式触发器可用的属性。

模板变量数据
trigger.platform固定值:time_pattern
trigger.now触发时间模式触发器的 DateTime 对象。

持久通知

以下是持久通知触发器可用的属性。

模板变量数据
trigger.platform固定值:persistent_notification
trigger.update_type持久通知更新的类型:added(添加)、removed(移除)、current(当前)或 updated(更新)。
trigger.notification触发持久通知触发器的通知对象。
trigger.notification.notification_id通知 ID。
trigger.notification.title通知的标题。
trigger.notification.message通知的消息。
trigger.notification.created_at指示通知创建时间的 DateTime 对象。

Webhook

以下是 Webhook 触发器可用的属性。

模板变量数据
trigger.platform固定值:webhook
trigger.webhook_id被触发的 webhook ID。
trigger.json请求的 JSON 数据(如果是 JSON 内容类型)作为映射。
trigger.data请求的表单数据(如果是表单数据内容类型)。
trigger.query请求的 URL 查询参数(如果提供)。

区域

以下是区域触发器可用的属性。

模板变量数据
trigger.platform固定值:zone
trigger.entity_id我们正在观察的实体 ID。
trigger.from_state实体的先前[状态对象]。
trigger.to_state实体的新[状态对象]。
trigger.zone区域的状态对象。
trigger.event触发器观察到的事件:enter(进入)或 leave(离开)。

示例

# 示例 configuration.yaml 条目
automation:
  triggers:
    - trigger: state
      entity_id: device_tracker.paulus
      id: paulus_device
  actions:
    - action: notify.notify
      data:
        message: >
          Paulus 的状态刚刚从 {{ trigger.from_state.state }}
          变为 {{ trigger.to_state.state }}
          
          此次触发来自 {{ trigger.id }}

automation 2:
  triggers:
    - trigger: mqtt
      topic: "/notify/+"
  actions:
    - action: >
        notify.{{ trigger.topic.split('/')[-1] }}
      data:
        message: "{{ trigger.payload }}"

automation 3:
  triggers:
    # 多个实体,您希望对它们执行相同的操作。
    - trigger: state
      entity_id:
        - light.bedroom_closet
        - light.kiddos_closet
        - light.linen_closet
      to: "on"
      # 当有人让这些灯中的任何一个开着 10 分钟时触发。
      for: "00:10:00"
  actions:
    - action: light.turn_off
      target:
        # 关闭触发自动化的任何实体。
        entity_id: "{{ trigger.entity_id }}"

automation 4:
  triggers:
    # 当 Home Assistant 扫描 NFC 标签时...
    - trigger: event
      event_type: tag_scanned
      # ...由特定人员扫描
      context:
        user_id:
          - 06cbf6deafc54cf0b2ffa49552a396ba
          - 2df8a2a6e0be4d5d962aad2d39ed4c9c
  conditions:
    # 检查 NFC 标签(ID)是否是前门的那个
    - condition: template
      value_template: "{{ trigger.event.data.tag_id == 'front_door' }}"
  actions:
    # 关闭各种灯
    - action: light.turn_off
      target:
        entity_id:
          - light.kitchen
          - light.bedroom
          - light.living_room