Home Assistant 中文文档 下载 App

自动化触发器全类型解析

触发器概述

触发器决定了自动化何时开始执行。Home Assistant 内置了十余种触发器类型,覆盖最常见的触发场景。

核心触发器类型

State(状态变化触发)

实体从一个状态变成另一个状态时触发:

trigger:
  - platform: state
    entity_id: sensor.door
    from: "closed"
    to: "open"

也可以只指定 from 或只指定 to,或者都不指定(任何变化都触发)。还可以监听属性变化:

trigger:
  - platform: state
    entity_id: climate.living_room
    attribute: temperature
    to: "24"

Numeric State(数值变化触发)

数值型传感器超过阈值时触发:

trigger:
  - platform: numeric_state
    entity_id: sensor.temperature_kitchen
    above: 28
    below: 10
    for:
      minutes: 5   # 持续 5 分钟在阈值外才触发

Time(定时触发)

trigger:
  - platform: time
    at: "07:00:00"
  - platform: time_pattern
    minutes: "/30"    # 每 30 分钟
    hours: "*/2"      # 每 2 小时

Sun(日出日落)

trigger:
  - platform: sun
    event: sunrise
    offset: "+00:15:00"   # 日出后 15 分钟
  - platform: sun
    event: sunset
    offset: "-00:20:00"   # 日落前 20 分钟

Zone(区域进出触发)

当 Person 实体进入/离开某个区域时触发:

trigger:
  - platform: zone
    entity_id: person.me
    zone: zone.home
    event: enter    # enter / leave

HomeKit / Xiaomi / Z-Wave 设备事件

某些设备有特有的事件类型。例如小米人体传感器的"2 分钟没人":

trigger:
  - platform: event
    event_type: xiaomi_aqara.movement_timeout
    event_data:
      entity_id: binary_sensor.motion_kitchen

Webhook(HTTP 请求触发)

Home Assistant 暴露一个 webhook URL,任何服务发 POST 请求到这个 URL 都会触发:

trigger:
  - platform: webhook
    webhook_id: my_unique_id

适合和第三方服务(IFTTT、Node-RED、自定义脚本)集成。

Event(自定义事件)

trigger:
  - platform: event
    event_type: my_custom_event

事件可以由其他自动化的 fire_event 动作触发,也可以由集成、Python 脚本、REST API 触发。

MQTT(MQTT 消息触发)

trigger:
  - platform: mqtt
    topic: "zigbee2mqtt/+/action"
    payload: "single"

Device(设备级触发器)

直接选择某个设备的某个事件(比如"Z-Wave 门锁被手动开锁"),Home Assistant 自动帮你填充底层配置:

trigger:
  - domain: lock
    entity_id: lock.front_door
    device_id: xxxxx
    type: opened
    sub_type: manual

多个触发器

一个自动化可以有多个触发器,任一触发都会启动执行:

trigger:
  - platform: sun
    event: sunset
  - platform: state
    entity_id: person.me
    to: "home"

上面这个自动化会在日落时或你回家时(先到先触发)执行。

触发器的"for"防抖

很多触发器支持 for 参数——满足条件持续多久后才真正触发。这是避免瞬态抖动的利器:

trigger:
  - platform: state
    entity_id: sensor.door
    from: "closed"
    to: "open"
    for:
      seconds: 10   # 门开了持续 10 秒才触发

触发器传递的数据

触发后,自动化的 {{ trigger }} 模板变量里包含了触发相关的所有信息:

trigger.platform       → 平台名(state / time / sun ...)
trigger.entity_id      → 触发的实体 ID
trigger.from_state     → 之前的状态
trigger.to_state       → 新的状态
trigger.event          → 完整事件对象
trigger.id             → 2026.10 新增的触发器 ID

这些变量在动作里做模板运算时非常有用。