模板灯

template 平台创建灯光,结合了多种集成功能,并提供了运行脚本或调用动作的能力,应用于灯光的开、关和亮度命令。

要在您的安装中启用模板灯,请将以下内容添加到您的 configuration.yamlconfiguration.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

lights map Required

您的灯列表。

friendly_name string (Optional)

在前端使用的名称。

unique_id string (Optional)

唯一标识此灯的ID。将其设置为唯一值以允许通过UI进行自定义。

value_template template (Optional, default: optimistic)

定义一个模板以获取灯的状态。

level_template template (Optional, default: optimistic)

定义一个模板以获取灯的亮度。

temperature_template template (Optional, default: optimistic)

定义一个模板以获取灯的色温。

hs_template template (Optional, default: optimistic)

定义一个模板以获取灯的HS颜色。必须渲染一个元组(色调,饱和度)。

rgb_template template (Optional, default: optimistic)

定义一个模板以获取灯的RGB颜色。必须渲染一个元组或列表(红色,绿色,蓝色)。

rgbw_template template (Optional, default: optimistic)

定义一个模板以获取灯的RGBW颜色。必须渲染一个元组或列表(红色,绿色,蓝色,白色)。

rgbww_template template (Optional, default: optimistic)

定义一个模板以获取灯的RGBWW颜色。必须渲染一个元组或列表(红色,绿色,蓝色,冷白色,暖白色)。

supports_transition_template template (Optional, default: false)

定义一个模板以获取灯是否支持过渡。应返回布尔值(真/假)。如果此值为 True,在开/关调用中的过渡参数将作为命名参数 transition 传递给任一脚本。

effect_list_template template (Inclusive, default: optimistic)

定义一个模板以获取支持的效果列表。必须渲染一个列表

effect_template template (Inclusive, default: optimistic)

定义一个模板以获取灯的效果。

min_mireds_template template (Optional, default: optimistic)

定义一个模板以获取灯的最小微米值。

max_mireds_template template (Optional, default: optimistic)

定义一个模板以获取灯的最大微米值。

icon_template template (Optional)

定义一个图标或图片的模板,例如,显示不同状态的不同图标。

availability_template template (Optional, default: true)

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

turn_on action Required

定义在打开灯时要执行的操作。可能接收变量 brightness 和/或 transition

turn_off action Required

定义在关闭灯时要执行的操作。可能接收变量 transition

set_level action (Optional)

定义在灯接收到亮度命令时要执行的操作。仅当 turn_on 调用仅包含亮度,且可选过渡时,脚本才会被调用。接收变量 brightness 和可选的 transition

set_temperature action (Optional)

定义在灯接收到色温命令时要执行的操作。接收变量 color_temp。也可能接收变量 brightness 和/或 transition

set_hs action (Optional)

定义在灯接收到hs颜色命令时要执行的操作。可用变量: hs 作为元组,hs

set_rgb action (Optional)

定义在灯接收到RGB颜色命令时要执行的操作。可用变量: rgb 作为元组,rgb

set_rgbw action (Optional)

定义在灯接收到RGBW颜色命令时要执行的操作。可用变量: rgbw 作为元组,rgb 作为元组,rgbw

set_rgbww action (Optional)

定义在灯接收到RGBWW颜色命令时要执行的操作。可用变量: rgbww 作为元组,rgb 作为元组,rgbcwww

set_effect action (Inclusive)

定义在灯接收到效果命令时要执行的操作。接收变量 effect。也可能接收变量 brightness 和/或 transition

模板和动作变量

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

注意事项

如果您使用的一个平台的状态需要额外的时间来加载,模板灯可能在启动期间会获得 unknown 状态。这会导致在平台加载完成之前,您的日志文件中出现错误消息。 如果您在模板中使用 is_state() 函数,可以避免此情况。 例如,您可以将 {{ states.switch.source.state == 'on' }} 替换成返回 true/false 并且永远不会给出未知结果的等效内容: {{ is_state('switch.source', 'on') }} 过渡没有自己的脚本,而是会作为命名参数 transition 被传递给 turn_onturn_offbrightnesscolor_tempeffecths_colorrgb_colorrgbw_colorrgbww_color 脚本。 如果在调用中也有相应参数,则亮度将作为命名参数 brightness 被传递到 turn_oncolor_tempeffecths_colorrgb_colorrgbw_colorrgbww_color 脚本。在这种情况下,将不会调用亮度脚本(set_level)。 如果仅将亮度传递给 light.turn_on 操作,则会调用 set_level 脚本。

示例

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

影院音量控制

此示例显示一种实际作为家庭影院音量的灯光。该集成功能使您能够提供想要发送给消费者的任何负载,包括您可能需要进行的任何比例转换; 媒体播放器集成 需要的浮点百分比值范围是 0.01.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 }}"