模板覆盖
template
平台可以创建结合集成的覆盖,并提供
根据开、关、停止、位置和倾斜命令为每个覆盖运行脚本或调用动作的能力。
配置
要在您的安装中启用模板覆盖,
请将以下内容添加到您的 configuration.yaml
configuration.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
您的覆盖列表。
定义一个模板以获取覆盖的状态。模板的有效输出值为 open
、opening
、closing
和 closed
,这些值直接映射到相应的状态。此外,true
被视为 open
的同义词,false
被视为 closed
的同义词。如果同时指定了 value_template
和 [position_template
],则仅 opening
和 closing
状态由 value_template
设置。如果模板产生 None
值,状态将被设置为 unknown
。
定义一个模板以获取覆盖的位置。合法值为 0
(关闭)和 100
(打开)之间的数字。如果模板产生 None
值,当前的位置将被设置为 unknown
。
定义一个模板以指定使用哪个图标。
定义覆盖的实体图片模板。
定义一个模板以获取实体的 available
状态。如果模板未能渲染或返回 True
、"1"
、"true"
、"yes"
、"on"
、"enable"
或非零数字,则该实体将是 available
。如果模板返回其他任何值,则实体将是 unavailable
。如果未配置,实体将始终是 available
。请注意,字符串比较不区分大小写;"TrUe"
和 "yEs"
是允许的。
设置 设备类别,更改显示在前端的设备状态和图标。
定义打开覆盖的动作。如果指定了 open_cover
,则也必须指定 close_cover
。必须指定 open_cover
和 set_cover_position
中的至少一个。
定义关闭覆盖的动作。
定义停止覆盖的动作。
定义设置覆盖位置的动作(在 0
和 100
之间)。变量 position
将包含实体的设置位置。
定义设置覆盖倾斜度的动作(在 0
和 100
之间)。变量 tilt
将包含实体的设置倾斜度。
强制覆盖位置使用 乐观模式。
强制覆盖倾斜位置使用 乐观模式。
定义一个模板以获取覆盖的倾斜状态。合法值为 0
(关闭)和 100
(打开)之间的数字。如果模板产生 None
值,当前倾斜状态将被设置为 unknown
。
模板和动作变量
基于状态的模板实体在其模板和动作中有一个特殊的模板变量 this
可用。this
变量有助于在模板和动作中 自引用 实体的状态和属性。
注意事项
如果您使用的平台的状态加载时间较长,则
模板覆盖在启动期间可能会得到 unknown
状态。这会导致您的日志文件中出现错误
消息,直到该平台加载完成。
如果您在模板中使用 is_state()
函数,可以避免这种情况。
例如,您将替换
{{ states.cover.source.state == 'open' }}
为这个等效的返回 true
/false
而且永远不会给出未知
结果:
{{ is_state('cover.source', 'open') }}
乐观模式
在乐观模式下,覆盖位置状态在内部维护。如果未指定 value_template
或 position_template
,则自动启用此模式。请注意,这在没有某种反馈机制的情况下不太可靠,因为否则无法知道覆盖是否正常移动。可以通过使用 optimistic
属性强制覆盖进入乐观模式。
对于 tilt_position
,当未指定 tilt_template
或使用 tilt_optimistic
属性时,启用等效模式。
结合 value_template 和 position_template
如果同时指定了 value_template
和 position_template
,则仅 opening
和 closing
状态直接从 value_template
设置,open
和 closed
状态将从覆盖位置导出。
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 %}