执行动作
多种集成允许在特定事件发生时执行动作。最常见的是在自动化触发发生时执行动作。但动作也可以从脚本、仪表板或通过语音命令设备(如Amazon Echo)调用。
执行动作的配置选项在所有集成之间都是相同的,本页将对此进行描述。
本页的示例将作为自动化集成配置的一部分给出,但其他集成也可以使用不同的方法。
使用开发者工具下的"Actions"标签来发现可用的动作。
基础知识
在实体group.living_room
上执行homeassistant.turn_on
动作。这将打开group.living_room
的所有成员。你也可以使用entity_id: all
,它将打开所有可能的实体。
action: homeassistant.turn_on
target:
entity_id: group.living_room
目标区域和设备
除了针对实体,你还可以针对区域或设备。或者这些的组合。这是通过target
键完成的。
target
是一个包含以下至少一项的映射:area_id
、device_id
、entity_id
。每一项都可以是列表。值应该是小写的。
以下示例使用单个动作来打开客厅区域的灯光、2个额外的灯光设备和2个额外的灯光实体:
action: light.turn_on
target:
area_id: living_room
device_id:
- ff22a1889a6149c5ab6327a8236ae704
- 52c050ca1a744e238ad94d170651f96b
entity_id:
- light.hallway
- light.landing
向动作传递数据
你还可以指定除目标实体之外的其他参数。例如,light.turn_on
动作允许指定亮度。
action: light.turn_on
target:
entity_id: group.living_room
data:
brightness: 120
rgb_color: [255, 0, 0]
动作的参数完整列表可以在每个集成的文档页面上找到,就像light.turn_on
动作的做法一样。
使用模板决定执行哪个动作
你可以使用模板支持动态选择要执行的动作。例如,你可以根据灯是否打开来执行特定动作。
action: >
{% if states('sensor.temperature') | float > 15 %}
switch.turn_on
{% else %}
switch.turn_off
{% endif %}
entity_id: switch.ac
使用Actions开发者工具
你可以使用Actions开发者工具来测试要传递给动作的数据。例如,你可以测试打开或关闭"组"(有关更多信息,请参见groups)。
要打开或关闭组,传递以下信息:
Domain: homeassistant
Action: turn_on
Action data: { "entity_id": "group.kitchen" }
使用模板确定属性
模板也可以用于你传递给动作的数据。
action: thermostat.set_temperature
target:
entity_id: >
{% if is_state('device_tracker.paulus', 'home') %}
thermostat.upstairs
{% else %}
thermostat.downstairs
{% endif %}
data:
temperature: "{{ 22 - distance(states.device_tracker.paulus) }}"
你也可以使用返回原生字典的模板,这在要设置的属性取决于情况时很有用。
action: climate.set_temperature
data: >
{% if states('sensor.temperature_living') < 19 %}
{"hvac_mode": "heat", "temperature": 19 }
{% else %}
{"hvac_mode": "auto" }
{% endif %}
使用模板处理响应数据
某些动作可能会返回可在自动化中使用的数据。这些数据称为动作响应数据。动作响应数据通常用于动态或大型数据,这些数据可能不适合用于实体状态。动作响应数据的例子包括下周的即将到来的日历事件或详细的驾驶指南。
模板也可以用于处理响应数据。动作可以指定一个response_variable
。这是包含响应数据的变量。你可以为你的response_variable
定义任何名称。此示例执行一个动作并将响应存储在名为agenda
的变量中。
action: calendar.get_events
target:
entity_id: calendar.school
data:
duration:
hours: 24
response_variable: agenda
在动作中可以使用哪些数据字段取决于所使用的通知类型。
action: notify.gmail_com
data:
target: "gduser1@workspacesamples.dev"
title: "Daily agenda for {{ now().date() }}"
message: >-
Your agenda for today:
<p>
{% for event in agenda['calendar.school'].events %}
{{ event.start}}: {{ event.summary }}<br>
{% endfor %}
</p>
homeassistant动作
有四个homeassistant
动作不绑定到任何单一域,它们是:
homeassistant.turn_on
- 打开一个实体(支持被打开的实体),例如automation
、switch
等。homeassistant.turn_off
- 关闭一个实体(支持被关闭的实体),例如automation
、switch
等。homeassistant.toggle
- 关闭已打开的实体,或打开已关闭的实体(支持被打开和关闭的实体)homeassistant.update_entity
- 请求更新实体,而不是等待下一次计划的更新,例如Google travel time传感器、template sensor或light
完整的动作详情和示例可以在Home Assistant集成页面上找到。