执行操作

各种集成允许在特定事件发生时执行 actions动作在 Home Assistant 的多个地方使用。作为脚本或自动化的一部分,动作定义了触发器被激活后将发生的事情。在脚本中,动作被称为序列 [Learn more]。最常见的是在自动化 trigger触发器是定义的一组平台值或条件,用于触发自动化运行。 [Learn more] 发生时执行操作。但是操作也可以从 script脚本是允许用户指定 Home Assistant 打开时要执行的动作序列的组件。 [Learn more]、仪表板或通过 Amazon Echo 等语音命令设备调用。

调用配置的配置选项在所有集成中是相同的,并在此页面中进行描述。

此页面上的示例将作为自动化集成配置的一部分给出,但其他集成也可以使用不同的方法。

Tip

开发者工具 下使用 “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_iddevice_identity_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 中的响应数据。以下示例使用响应数据发送通知。

Important

可以在操作中使用哪些数据字段取决于所使用的通知类型。

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 - 打开实体(支持开启的),例如 automationswitch 等。
  • homeassistant.turn_off - 关闭实体(支持关闭的),例如 automationswitch 等。
  • homeassistant.toggle - 关闭打开的实体,或打开关闭的实体(支持开关操作的)
  • homeassistant.update_entity - 请求更新实体,而不是等待下一个计划更新,例如 Google travel time 传感器、template sensorlight

完整的操作详细信息和示例可以在 Home Assistant 集成 页面上找到。