How to append additional entry to effect list

Hello together,

I have a light template and try to append an additional entry to the effect list. Strange wise it looks good to me on Entwicklerwerkzeuge > template but gives me an error at VS Code.

================================

My tries with Entwicklerwerkzeuge > Template

"{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'effect_list') | replace('None', 'none', 1) | replace(']', ', \'test\']', 1) }}"
"{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'effect_list') | replace('None', 'none', 1) ~ 'test' }}"
"{{ (state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'effect_list') | replace('None', 'none', 1)) + (['test'] | string) }}"

Results

"['none', 'candle', 'fire', 'prism', 'test']"
"['none', 'candle', 'fire', 'prism']test"
"['none', 'candle', 'fire', 'prism']['test']"

Because of that I assumed the first one is what I need, but VS Code gives me the following error

================================

My template light, where I try to extend the effect list…

- platform: template
  lights:
    schlafzimmerdeckenbeleuchtung:
      friendly_name: Schlafzimmerdeckenbeleuchtung
      unique_id: schlafzimmerdeckenbeleuchtung
      value_template: >
        {% if is_state('switch.schlafzimmerdeckenbeleuchtung', 'on') and is_state('light.hue_schlafzimmerdeckenbeleuchtung', 'on') %}
          on
        {% else %}
          off
        {% endif %}
      level_template: "{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'brightness') | int }}"
      temperature_template: "{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'color_temp') | int}}"
      rgb_template: "{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'rgb_color') }}"
      effect_list_template: "{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'effect_list') | replace('None', 'none', 1)}}" #None ist gleich null, ersetzen, damit "kein" Effekt eingestellt werden kann
      effect_template: "{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'effect') if state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'effect') != 'None' else 'none' }}" #None ist gleich null, ersetzen, damit "kein" Effekt eingestellt werden kann
      turn_off:
        - action: switch.turn_off
          entity_id: switch.schlafzimmerdeckenbeleuchtung
      turn_on:
        - action: switch.turn_on
          entity_id: switch.schlafzimmerdeckenbeleuchtung
        - delay:
            milliseconds: >
              {% if is_state('switch.schlafzimmerdeckenbeleuchtung', 'off') %}
                500
              {% else %}
                0
              {% endif %}
        - action: light.turn_on
          entity_id: light.hue_schlafzimmerdeckenbeleuchtung
      set_level:
        - action: switch.turn_on
          entity_id: switch.schlafzimmerdeckenbeleuchtung
        - delay:
            milliseconds: >
              {% if is_state('switch.schlafzimmerdeckenbeleuchtung', 'off') %}
                500
              {% else %}
                0
              {% endif %}
        - action: light.turn_on
          entity_id: light.hue_schlafzimmerdeckenbeleuchtung
          data:
            brightness: "{{ brightness }}"
      set_temperature:
        - action: switch.turn_on
          entity_id: switch.schlafzimmerdeckenbeleuchtung
        - delay:
            milliseconds: >
              {% if is_state('switch.schlafzimmerdeckenbeleuchtung', 'off') %}
                500
              {% else %}
                0
              {% endif %}
        - action: light.turn_on
          entity_id: light.hue_schlafzimmerdeckenbeleuchtung
          data:
            color_temp: "{{ color_temp }}"
      set_rgb:
        - action: switch.turn_on
          entity_id: switch.schlafzimmerdeckenbeleuchtung
        - delay:
            milliseconds: >
              {% if is_state('switch.schlafzimmerdeckenbeleuchtung', 'off') %}
                500
              {% else %}
                0
              {% endif %}
        - action: light.turn_on
          entity_id: light.hue_schlafzimmerdeckenbeleuchtung
          data:
            rgb_color:
              - "{{ r }}"
              - "{{ g }}"
              - "{{ b }}"
            effect: "Solid"
      set_effect:
        - action: switch.turn_on
          entity_id: switch.schlafzimmerdeckenbeleuchtung
        - delay:
            milliseconds: >
              {% if is_state('switch.schlafzimmerdeckenbeleuchtung', 'off') %}
                500
              {% else %}
                0
              {% endif %}
        - action: light.turn_on

An effect_list is, just as its name implies, a list. replace is a filter/function which operates on strings.

{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'effect_list')
| reject('==', 'None') | list + ['test'] }}

@Mayhem_SWE : I was aware of that, just had the trouble to find the proper solution. Your code works, many many thanks!!

Ohh and if you want to remove/reject several potentially existing items, you can use the in test and provide a list of strings:

{{ state_attr('light.hue_schlafzimmerdeckenbeleuchtung', 'effect_list')
| reject('in', ['None', '...', '...']) | list + ['test'] }}

Or the match filter and provide a regular expression as your second argument, etc.

1 Like