模板灯
template
平台创建灯光,结合了多种集成功能,并提供了运行脚本或调用动作的能力,应用于灯光的开、关和亮度命令。
要在您的安装中启用模板灯,请将以下内容添加到您的
configuration.yaml
configuration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中:
# 示例 configuration.yaml 条目
light:
- platform: template
lights:
theater_lights:
friendly_name: "影院灯光"
level_template: "{{ state_attr('sensor.theater_brightness', 'lux')|int }}"
value_template: "{{ state_attr('sensor.theater_brightness', 'lux')|int > 0 }}"
temperature_template: "{{states('input_number.temperature_input') | int}}"
hs_template: "({{states('input_number.h_input') | int}}, {{states('input_number.s_input') | int}})"
effect_list_template: "{{ state_attr('light.led_strip', 'effect_list') }}"
turn_on:
action: script.theater_lights_on
turn_off:
action: script.theater_lights_off
set_level:
action: script.theater_lights_level
data:
brightness: "{{ brightness }}"
set_temperature:
action: input_number.set_value
data:
value: "{{ color_temp }}"
entity_id: input_number.temperature_input
set_hs:
- action: input_number.set_value
data:
value: "{{ h }}"
entity_id: input_number.h_input
- action: input_number.set_value
data:
value: "{{ s }}"
entity_id: input_number.s_input
- action: light.turn_on
data:
entity_id:
- light.led_strip
transition: "{{ transition | float }}"
hs_color:
- "{{ hs[0] }}"
- "{{ hs[1] }}"
set_effect:
- action: light.turn_on
data:
entity_id:
- light.led_strip
effect: "{{ effect }}"
supports_transition_template: "{{ true }}"
Configuration Variables
您的灯列表。
定义一个模板以获取灯的状态。
定义一个模板以获取灯的亮度。
定义一个模板以获取灯的色温。
定义一个模板以获取灯的HS颜色。必须渲染一个元组(色调,饱和度)。
定义一个模板以获取灯的RGB颜色。必须渲染一个元组或列表(红色,绿色,蓝色)。
定义一个模板以获取灯的RGBW颜色。必须渲染一个元组或列表(红色,绿色,蓝色,白色)。
定义一个模板以获取灯的RGBWW颜色。必须渲染一个元组或列表(红色,绿色,蓝色,冷白色,暖白色)。
定义一个模板以获取灯是否支持过渡。应返回布尔值(真/假)。如果此值为 True
,在开/关调用中的过渡参数将作为命名参数 transition
传递给任一脚本。
定义一个模板以获取支持的效果列表。必须渲染一个列表
定义一个模板以获取灯的效果。
定义一个模板以获取灯的最小微米值。
定义一个模板以获取灯的最大微米值。
定义一个图标或图片的模板,例如,显示不同状态的不同图标。
定义一个模板以获取实体的 available
状态。如果模板要么无法渲染,要么返回 True
、"1"
、"true"
、"yes"
、"on"
、"enable"
或非零数字,实体将是 available
。如果模板返回任何其他值,实体将是 unavailable
。如果未配置,实体将始终是 available
。 请注意,字符串比较不区分大小写; "TrUe"
和 "yEs"
是允许的。
定义在打开灯时要执行的操作。可能接收变量 brightness
和/或 transition
。
定义在关闭灯时要执行的操作。可能接收变量 transition
。
定义在灯接收到亮度命令时要执行的操作。仅当 turn_on
调用仅包含亮度,且可选过渡时,脚本才会被调用。接收变量 brightness
和可选的 transition
。
定义在灯接收到色温命令时要执行的操作。接收变量 color_temp
。也可能接收变量 brightness
和/或 transition
。
定义在灯接收到hs颜色命令时要执行的操作。可用变量: hs
作为元组,h
和 s
定义在灯接收到RGB颜色命令时要执行的操作。可用变量: rgb
作为元组,r
、g
和 b
。
定义在灯接收到RGBW颜色命令时要执行的操作。可用变量: rgbw
作为元组,rgb
作为元组,r
、g
、b
和 w
。
定义在灯接收到RGBWW颜色命令时要执行的操作。可用变量: rgbww
作为元组,rgb
作为元组,r
、g
、b
、cw
和 ww
。
定义在灯接收到效果命令时要执行的操作。接收变量 effect
。也可能接收变量 brightness
和/或 transition
。
模板和动作变量
基于状态的模板实体在其模板和动作中有特殊的模板变量 this
可用。this
变量帮助 自我引用 实体的状态和属性在模板和动作中。
注意事项
如果您使用的一个平台的状态需要额外的时间来加载,模板灯可能在启动期间会获得 unknown
状态。这会导致在平台加载完成之前,您的日志文件中出现错误消息。
如果您在模板中使用 is_state()
函数,可以避免此情况。
例如,您可以将
{{ states.switch.source.state == 'on' }}
替换成返回 true
/false
并且永远不会给出未知结果的等效内容:
{{ is_state('switch.source', 'on') }}
过渡没有自己的脚本,而是会作为命名参数 transition
被传递给 turn_on
、turn_off
、brightness
、color_temp
、effect
、hs_color
、rgb_color
、rgbw_color
或 rgbww_color
脚本。
如果在调用中也有相应参数,则亮度将作为命名参数 brightness
被传递到 turn_on
、color_temp
、effect
、hs_color
、rgb_color
、rgbw_color
或 rgbww_color
脚本。在这种情况下,将不会调用亮度脚本(set_level
)。
如果仅将亮度传递给 light.turn_on
操作,则会调用 set_level
脚本。
示例
在本节中,您将找到一些实际使用此灯的示例。
影院音量控制
此示例显示一种实际作为家庭影院音量的灯光。该集成功能使您能够提供想要发送给消费者的任何负载,包括您可能需要进行的任何比例转换; 媒体播放器集成 需要的浮点百分比值范围是 0.0
到 1.0
。
light:
- platform: template
lights:
theater_volume:
friendly_name: "接收器音量"
value_template: >-
{% if is_state('media_player.receiver', 'on') %}
{% if state_attr('media_player.receiver', 'is_volume_muted') %}
off
{% else %}
on
{% endif %}
{% else %}
off
{% endif %}
turn_on:
action: media_player.volume_mute
target:
entity_id: media_player.receiver
data:
is_volume_muted: false
turn_off:
action: media_player.volume_mute
target:
entity_id: media_player.receiver
data:
is_volume_muted: true
set_level:
action: media_player.volume_set
target:
entity_id: media_player.receiver
data:
volume_level: "{{ (brightness / 255 * 100)|int / 100 }}"
level_template: >-
{% if is_state('media_player.receiver', 'on') %}
{{ (state_attr('media_player.receiver', 'volume_level')|float * 255)|int }}
{% else %}
0
{% endif %}
更改图标
此示例演示了如何根据灯光状态更改图标。
light:
- platform: template
lights:
theater_volume:
friendly_name: "接收器音量"
value_template: >-
{% if is_state('media_player.receiver', 'on') %}
{% if state_attr('media_player.receiver', 'is_volume_muted') %}
off
{% else %}
on
{% endif %}
{% else %}
off
{% endif %}
icon_template: >-
{% if is_state('media_player.receiver', 'on') %}
{% if state_attr('media_player.receiver', 'is_volume_muted') %}
mdi:lightbulb-off
{% else %}
mdi:lightbulb-on
{% endif %}
{% else %}
mdi:lightbulb-off
{% endif %}
turn_on:
action: media_player.volume_mute
target:
entity_id: media_player.receiver
data:
is_volume_muted: false
turn_off:
action: media_player.volume_mute
target:
entity_id: media_player.receiver
data:
is_volume_muted: true
更改实体图片
此示例演示了如何根据灯光状态更改实体图片。
light:
- platform: template
lights:
theater_volume:
friendly_name: "接收器音量"
value_template: >-
{% if is_state('media_player.receiver', 'on') %}
{% if state_attr('media_player.receiver', 'is_volume_muted') %}
off
{% else %}
on
{% endif %}
{% else %}
off
{% endif %}
icon_template: >-
{% if is_state('media_player.receiver', 'on') %}
{% if state_attr('media_player.receiver', 'is_volume_muted') %}
/local/lightbulb-off.png
{% else %}
/local/lightbulb-on.png
{% endif %}
{% else %}
/local/lightbulb-off.png
{% endif %}
turn_on:
action: media_player.volume_mute
target:
entity_id: media_player.receiver
data:
is_volume_muted: false
turn_off:
action: media_player.volume_mute
target:
entity_id: media_player.receiver
data:
is_volume_muted: true
为多段WLED灯创建全局灯光实体
此示例展示了如何将来自同一WLED控制器的2个RGBW段组合成一个可用的灯光。
light:
- platform: template
lights:
wled_global:
unique_id: 28208f257b54c44e50deb2d618d44710
friendly_name: "多段WLED控制"
value_template: "{{ states('light.wled_master') }}"
level_template: "{{ state_attr('light.wled_master', 'brightness')|d(0,true)|int }}"
rgbw_template: (
{{ (state_attr('light.wled_segment_0', 'rgbw_color')[0]|d(0) + state_attr('light.wled_segment_1', 'rgbw_color')[0]|d(0))/2 }},
{{ (state_attr('light.wled_segment_0', 'rgbw_color')[1]|d(0) + state_attr('light.wled_segment_1', 'rgbw_color')[1]|d(0))/2 }},
{{ (state_attr('light.wled_segment_0', 'rgbw_color')[2]|d(0) + state_attr('light.wled_segment_1', 'rgbw_color')[2]|d(0))/2 }},
{{ (state_attr('light.wled_segment_0', 'rgbw_color')[3]|d(0) + state_attr('light.wled_segment_1', 'rgbw_color')[3]|d(0))/2 }}
)
effect_list_template: "{{ state_attr('light.wled_segment_0', 'effect_list') }}"
effect_template: "{{ state_attr('light.wled_segment_0', 'effect') if state_attr('light.wled_segment_0', 'effect') == state_attr('light.wled_segment_1', 'effect') else none }}"
availability_template: "{{ not is_state('light.wled_master', 'unknown') }}"
turn_on:
action: light.turn_on
entity_id: light.wled_segment_0, light.wled_segment_1, light.wled_master
turn_off:
action: light.turn_off
entity_id: light.wled_master
set_level:
action: light.turn_on
entity_id: light.wled_master
data:
brightness: "{{ brightness }}"
set_rgbw:
action: light.turn_on
entity_id: light.wled_segment_0, light.wled_segment_1
data:
rgbw_color:
- "{{ r }}"
- "{{ g }}"
- "{{ b }}"
- "{{ w }}"
effect: "Solid"
set_effect:
action: light.turn_on
entity_id: light.wled_segment_0, light.wled_segment_1
data:
effect: "{{ effect }}"