共计 3654 个字符,预计需要花费 10 分钟才能阅读完成。
触发器(trigger)是用来启动自动化过程。可以通过在一个触发器下面定义多个触发条件(用多个规则定义符号 -),当任意一个触发器条件满足(条件为真)的情况下,自动化就会启动。一旦触发器出发,Home assistant 会验证所有的条件(condition),如果满足,则执行行动(action)。
事件(event)触发器
当一个事件发生时的触发器。事件是 Home assistant 自带的基础功能。可以通过匹配事件名称或者特殊的事件数据发生时。
事件可以通过 API 由集成的设备触发(这里需要验证一下)。事件没有类型限制。内置的事件列表可以查表(todo 还没有翻译)。
automation:
trigger:
platform: event
event_type: MY_CUSTOM_EVENT
# optional
event_data:
mood: happy
Home Assistant 触发器
当 Home assistant 启动或者关闭的时候触发。
MQTT 触发器
(译者注,因为好像暂时没有找到 MQTT 的设备,这里就跳过了)
数字状态触发器
该类型触发器是当某个传感器的数值超过某个阀值的时候,触发。如果某个实体(entity)的状态改变,状态是一种数字,或者一旦数值从一个阀值上下发生变化时,采用这个触发器。
automation:
trigger:
platform: numeric_state
entity_id: sensor.temperature
# Optional
value_template: "{{state.attributes.battery}}"
# 至少下面一个选项需要写,大于或者低于
above: 17
below: 25
# 如果使用 for 条件,需要这个状态保持了超过多少时间,可以使用天(days)或者毫秒(milliseconds)。for:
hours: 1
minutes: 10
seconds: 5
Note,上述的例子是指,电池电量的数值(numeric_state)在大于 17 或者小于 25 这两个数值中。上述的例子中,这个数值状态,需要在 17.1 到 24.9 之间,会触发这个触发器。
for:
可以也用 HH:MM:SS
描述
for: "01:10:05"
同样 for
选项可以用模板。(模板感觉跟 tornado 的模板很像,但是又不太一样)
automation:
trigger:
platform: 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 }}"
action:
service: persistent_notification.create
data_template:
message: >
{{trigger.to_state.name}} too high for {{trigger.for}}!
for
模板在一个实体变化时赋值评估。(这一段的功能,应该是定时提醒,超温保持了多久,但是模板是怎么产生功能的还没有看懂。)
状态触发器
给定的实体的状态发生改变时触发。只要 entity_id
给到触发器,任何状态变化都会导致触发器触发,甚至只有状态属性变化。
automation:
trigger:
platform: state
entity_id: device_tracker.paulus, device_tracker.anne_therese
# Optional
from: "not_home"
# Optional
to: "home"
# If given, will trigger when state has been the to state for X time.
for: "01:10:05"
from
和 to
的值需要带上引号,防止 YAML 渲染器把值解释成 bool 值。
太阳触发器
日升日落触发器
太阳升起或者落山触发。例如,太阳的高度角为 0°
一个可选的时间偏移量可以添加到触发器上,让日升或者日落后一定时间触发。
注,由于晨昏的时间长度在一年内是不一样的。所以建议使用太阳高度角触发器而不是日升、日落触发器加上一个时间偏移量,来触发在清晨或者黄昏的自动化。
automation:
trigger:
platform: sun
# Possible values: sunset, sunrise
event: sunset
# Optional time offset. This example will trigger 45 minutes before sunset.
offset: "-00:45:00"
太阳高度角触发器
有时候你需要更精确的根据太阳高度角来执行一些控制器。例如当太阳低于地平线一定角度后再触发,或者比如太阳落山后,天空并不是非常暗或者户外不是特别暗的情况。所以你需要在太阳落山后到一定的角度后,才打开户外的灯光。对于大多数需要在黄昏或者黎明触发的设备,0°到 -6°是比较合适的,例如在例子中,采用的是 -4°:
automation:
alias: "Exterior Lighting on when dark outside"
trigger:
platform: numeric_state
entity_id: sun.sun
value_template: "{{state.attributes.elevation}}"
# Can be a positive or negative number
below: -4.0
action:
service: switch.turn_on
entity_id: switch.exterior_lighting
尽管时间的光照强度和天气,地理位置,陆地覆盖等有关,但是一般是定义成:
- 民用黄昏:0°> 太阳角 >-6°
- 航海黄昏:-6°到 -12°
- 天文黄昏:-12°到 -18°
模板触发器
(模板相关的会在译者对模板深入了解后在详细翻译)
时间触发器
用来在每天的固定时刻来执行运行一次的任务。
automation:
trigger:
platform: time
# Military time format. This trigger will fire at 3:32 PM
at: "15:32:00"
时间规律触发器
当时间规律触发,可以根据时间,分钟,秒,是否满足现在的时间来触发。可以在数值之间用 /
匹配数值是否能被该数字整除(每几分钟,几小时执行)。也可以用 *
匹配任何数字。
automation:
trigger:
platform: time_pattern
# 每个小时的第 5 分钟,例如 00:05,01:05,但是不是每 5 分钟
minutes: 5
automation 2:
trigger:
platform: time_pattern
# 每天的 3 点
hours: "3"
minutes: "*"
automation 3:
trigger:
platform: time_pattern
# 每 5 分钟
minutes: "/5"
Warning:
不要在数字前面用 0 的前缀,例如 00
会报错,但是 0
不会。
网页触发器
(译者注,等看懂了或者用到了。。在翻译。。)
区域触发器
当实体进入或者离开某个区域时触发。例如需要到达工作区域是触发自动,需要设置一个追踪器支持反馈 gps 信息。包括用 GPS Logger,OwnTracks Platform 或者 Icloud platform。
automation:
trigger:
platform: zone
entity_id: device_tracker.paulus
zone: zone.home
# Event is either enter or leave
event: enter # or "leave"
坐标信息触发器
当实体出现或从某个区域消失时,坐标信息触发器触发。
多个触发器
当某个自动化规则,有多个触发器时,只需要每个触发器钱,用横线(-)标记,并且每个触发器都用该标记标记即可。只要任何一个触发器满足条件,规则就会被执行。
automation:
trigger:
# first trigger
- platform: time_pattern
minutes: 5
# our second trigger is the sunset
- platform: sun
event: sunset
总结
对于触发器的类型,就是用 platform 来区分采用了什么类型的触发器。然后采用该触发器的各种参数来定义触发器的出发条件。但是实际上由于有条件(condition)的存在,导致触发器只是一个启动,至于是否真的触发,还是要看条件是否满足。
此外可以看到 Home Assistant 支持很多很多功能,远比现有的大多数智能化软件的功能来的多。只是由于如果是个人家里布置的话,如何传输这些遥测信号(例如 GPS 数据,可能需要固定 IP 地址,在国内可能比较难办到),这些功能可能用不了。
但是实际上提供了很多新的自动化设计的思路。嗯。又可以玩了(让钞票飞)