执行操作
各种集成允许在特定事件发生时执行 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列。 [Learn more]。最常见的是在自动化 trigger触发器是定义的一组平台值或条件,用于触发自动化运行。 [Learn more] 发生时执行操作。但是操作也可以从 script脚本是允许用户指定 Home Assistant 打开时要执行的动作序列的组件。 [Learn more]、仪表板或通过 Amazon Echo 等语音命令设备调用。
调用配置的配置选项在所有集成中是相同的,并在此页面中进行描述。
此页面上的示例将作为自动化集成配置的一部分给出,但其他集成也可以使用不同的方法。
在 开发者工具 下使用 “Actions” 选项卡来发现可用的操作。
基础知识
对 entity实体表示 Home Assistant 中的传感器、执行器或功能。实体用于监控物理属性或控制其他实体。实体通常是设备或服务的一部分。 [Learn more] group.living_room
执行操作 homeassistant.turn_on
。这将打开 group.living_room
的所有成员。您也可以使用 entity_id: all
,它将打开所有可能的实体。
action: homeassistant.turn_on
target:
entity_id: group.living_room
针对区域和设备
您可以选择针对一个 area在 Home Assistant 中,区域是设备和实体的逻辑分组,旨在匹配物理世界中的区域(或房间):您的家。例如,客厅
区域将分组您客厅中的设备和实体。 或 device设备是表示包含实体的物理或逻辑单元的模型。,而不是目标实体。或者这两者的组合。
这是通过 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 开发者工具测试传递给操作的数据。 例如,您可以测试打开或关闭一个 ‘group’ (有关更多信息,请参阅 groups)
要打开或关闭一个组,传递以下信息:
- 域:
homeassistant
- 操作:
turn_on
- 操作数据:
{ "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 %}
使用模板处理响应数据
某些操作可能会响应可以在自动化中使用的数据。这些数据称为 action response data。操作响应数据通常用于动态或较大且不适合用于实体状态的数据。 操作响应数据的示例包括接下来一周的日历事件或详细的行车路线。
模板也可以用于处理响应数据。操作可以指定
一个 response_variable
。这是变量
,它包含响应数据。您可以为 response_variable
定义任何名称。此示例执行一个操作并将响应存储在名为 agenda
的变量中。
action: calendar.get_events
target:
entity_id: calendar.school
data:
duration:
hours: 24
response_variable: agenda
然后您可以在同一个脚本中的另一个操作中使用变量 agenda
中的响应数据。以下示例使用响应数据发送通知。
可以在操作中使用哪些数据字段取决于所使用的通知类型。
action: notify.gmail_com
data:
target: "gduser1@workspacesamples.dev"
title: "今日议程 {{ now().date() }}"
message: >-
您今天的议程:
<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 集成 页面上找到。