模板覆盖

template 平台可以创建结合集成的覆盖,并提供 根据开、关、停止、位置和倾斜命令为每个覆盖运行脚本或调用动作的能力。

配置

要在您的安装中启用模板覆盖, 请将以下内容添加到您的 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中:

# 示例 configuration.yaml 条目
cover:
  - platform: template
    covers:
      garage_door:
        device_class: garage
        friendly_name: "车库门"
        value_template: "{{ states('sensor.garage_door')|float > 0 }}"
        open_cover:
          action: script.open_garage_door
        close_cover:
          action: script.close_garage_door
        stop_cover:
          action: script.stop_garage_door

Configuration Variables

covers map Required

您的覆盖列表。

friendly_name string (Optional)

前端使用的名称。

unique_id string (Optional)

唯一标识此覆盖的 ID。设置为唯一值以允许通过 UI 自定义。

value_template template (Optional)

定义一个模板以获取覆盖的状态。模板的有效输出值为 openopeningclosingclosed,这些值直接映射到相应的状态。此外,true 被视为 open 的同义词,false 被视为 closed 的同义词。如果同时指定了 value_template 和 [position_template],则仅 openingclosing 状态由 value_template 设置。如果模板产生 None 值,状态将被设置为 unknown

position_template template (Optional)

定义一个模板以获取覆盖的位置。合法值为 0(关闭)和 100(打开)之间的数字。如果模板产生 None 值,当前的位置将被设置为 unknown

icon_template template (Optional)

定义一个模板以指定使用哪个图标。

entity_picture_template template (Optional)

定义覆盖的实体图片模板。

availability_template template (Optional, default: true)

定义一个模板以获取实体的 available 状态。如果模板未能渲染或返回 True"1""true""yes""on""enable" 或非零数字,则该实体将是 available。如果模板返回其他任何值,则实体将是 unavailable。如果未配置,实体将始终是 available。请注意,字符串比较不区分大小写;"TrUe""yEs" 是允许的。

device_class string (Optional)

设置 设备类别,更改显示在前端的设备状态和图标。

open_cover action (Inclusive)

定义打开覆盖的动作。如果指定了 open_cover,则也必须指定 close_cover。必须指定 open_coverset_cover_position 中的至少一个。

close_cover action (Inclusive)

定义关闭覆盖的动作。

stop_cover action (Optional)

定义停止覆盖的动作。

set_cover_position action (Optional)

定义设置覆盖位置的动作(在 0100 之间)。变量 position 将包含实体的设置位置。

set_cover_tilt_position action (Optional)

定义设置覆盖倾斜度的动作(在 0100 之间)。变量 tilt 将包含实体的设置倾斜度。

optimistic boolean (Optional, default: false)

强制覆盖位置使用 乐观模式

tilt_optimistic boolean (Optional, default: false)

强制覆盖倾斜位置使用 乐观模式

tilt_template template (Optional)

定义一个模板以获取覆盖的倾斜状态。合法值为 0(关闭)和 100(打开)之间的数字。如果模板产生 None 值,当前倾斜状态将被设置为 unknown

模板和动作变量

基于状态的模板实体在其模板和动作中有一个特殊的模板变量 this 可用。this 变量有助于在模板和动作中 自引用 实体的状态和属性。

注意事项

如果您使用的平台的状态加载时间较长,则 模板覆盖在启动期间可能会得到 unknown 状态。这会导致您的日志文件中出现错误 消息,直到该平台加载完成。 如果您在模板中使用 is_state() 函数,可以避免这种情况。 例如,您将替换 {{ states.cover.source.state == 'open' }} 为这个等效的返回 true/false 而且永远不会给出未知 结果: {{ is_state('cover.source', 'open') }}

乐观模式

在乐观模式下,覆盖位置状态在内部维护。如果未指定 value_templateposition_template,则自动启用此模式。请注意,这在没有某种反馈机制的情况下不太可靠,因为否则无法知道覆盖是否正常移动。可以通过使用 optimistic 属性强制覆盖进入乐观模式。 对于 tilt_position,当未指定 tilt_template 或使用 tilt_optimistic 属性时,启用等效模式。

结合 value_template 和 position_template

如果同时指定了 value_templateposition_template,则仅 openingclosing 状态直接从 value_template 设置,openclosed 状态将从覆盖位置导出。

value_template 输出 结果
open 状态由 position_template 定义
closed 状态由 position_template 定义
true 状态由 position_template 定义
false 状态由 position_template 定义
opening 状态设置为 opening
closing 状态设置为 closing
<任何其他输出> 状态或位置无变化

示例

在本节中,您将找到一些实际使用此覆盖的示例。

车库门

本示例将带有可控开关和位置传感器的车库门转换为一个覆盖。条件检查是可选的,但建议在使用相同的开关打开和关闭车库时使用。

cover:
  - platform: template
    covers:
      garage_door:
        device_class: garage
        friendly_name: "车库门"
        position_template: "{{ states('sensor.garage_door') }}"
        open_cover:
          - condition: state
            entity_id: sensor.garage_door
            state: "off"
          - action: switch.turn_on
            target:
              entity_id: switch.garage_door
        close_cover:
          - condition: state
            entity_id: sensor.garage_door
            state: "on"
          - action: switch.turn_off
            target:
              entity_id: switch.garage_door
        stop_cover:
          action: switch.turn_on
          target:
            entity_id: switch.garage_door
        icon_template: >-
          {% if states('sensor.garage_door')|float > 0 %}
            mdi:garage-open
          {% else %}
            mdi:garage
          {% endif %}

多个覆盖

本示例允许您一次控制两个或多个覆盖。

homeassistant:
  customize:
    cover_group:
      assumed_state: true

cover:
  - platform: template
    covers:
      cover_group:
        friendly_name: "覆盖组"
        open_cover:
          action: script.cover_group
          data:
            modus: "open"
        close_cover:
          action: script.cover_group
          data:
            modus: "close"
        stop_cover:
          action: script.cover_group
          data:
            modus: "stop"
        set_cover_position:
          action: script.cover_group_position
          data:
            position: "{{position}}"
        set_cover_tilt_position:
          action: script.cover_group_tilt_position
          data:
            tilt: "{{tilt}}"
        value_template: "{{is_state('sensor.cover_group', 'open')}}"
        icon_template: >-
          {% if is_state('sensor.cover_group', 'open') %}
            mdi:window-open
          {% else %}
            mdi:window-closed
          {% endif %}

sensor:
  - platform: template
    sensors:
      cover_group:
        value_template: >-
          {% if is_state('cover.bedroom', 'open') %}
            open
          {% elif is_state('cover.livingroom', 'open') %}
            open
          {% else %}
            closed
          {% endif %}

script:
  cover_group:
    sequence:
      - action: "cover.{{modus}}_cover"
        target:
          entity_id:
            - cover.bedroom
            - cover.livingroom
  cover_group_position:
    sequence:
      - action: cover.set_cover_position
        target:
          entity_id:
            - cover.bedroom
            - cover.livingroom
        data:
          position: "{{position}}"

automation:
  - alias: "晚上关闭覆盖"
    triggers:
      - trigger: sun
        event: sunset
        offset: "+00:30:00"
    actions:
      - action: cover.set_cover_position
        target:
          entity_id: cover.cover_group
        data:
          position: 25

改变图标

本示例展示了如何根据覆盖状态改变图标。

cover:
  - platform: template
    covers:
      cover_group:
        friendly_name: "覆盖组"
        open_cover:
          action: script.cover_group
          data:
            modus: "open"
        close_cover:
          action: script.cover_group
          data:
            modus: "close"
        stop_cover:
          action: script.cover_group
          data:
            modus: "stop"
        value_template: "{{is_state('sensor.cover_group', 'open')}}"
        icon_template: >-
          {% if is_state('sensor.cover_group', 'open') %}
            mdi:window-open
          {% else %}
            mdi:window-closed
          {% endif %}

改变实体图片

本示例展示了如何根据覆盖状态改变实体图片。

cover:
  - platform: template
    covers:
      cover_group:
        friendly_name: "覆盖组"
        open_cover:
          action: script.cover_group
          data:
            modus: "open"
        close_cover:
          action: script.cover_group
          data:
            modus: "close"
        stop_cover:
          action: script.cover_group
          data:
            modus: "stop"
        value_template: "{{is_state('sensor.cover_group', 'open')}}"
        entity_picture_template: >-
          {% if is_state('sensor.cover_group', 'open') %}
            /local/cover-open.png
          {% else %}
            /local/cover-closed.png
          {% endif %}