Variablen in templates

Tach, 1st post - sonst nur Mitleser.

Ich frage mich ob es eine Möglichkeit gibt, ähnlich wie in anderen Programmiersprachen wie bswp. PHP Variablen im Vorfeld zu bestimmen und diese dann in Templates zu benutzen.

Ich habe bspw. diesen Code hier:

type: custom:mushroom-template-card
primary: Terassentür
secondary: |-
  {% if is_state("sensor.kontakt_aq2", "Zu") %}
    Geschlossen
  {% else %}
    Seit {{ (as_timestamp(now()) - as_timestamp(states.binary_sensor.lumi_lumi_sensor_magnet_aq2_opening_2.last_changed)) | timestamp_custom ('%M') }} Minuten
  {% endif %}
icon: |-
  {% if is_state("sensor.kontakt_aq2", "Zu") %}
    mdi:door
  {% else %}
    mdi:door-open
  {% endif %}
icon_color: |-
  {% if is_state("sensor.kontakt_aq2", "Zu") %}
    grey
  {% else %}
    red
  {% endif %}
entity: sensor.kontakt_aq2
tap_action:
  action: none
hold_action:
  action: more-info
double_tap_action:
  action: none
multiline_secondary: false
card_mod:
  style: |
    ha-card {
      {% if is_state('sensor.kontakt_aq2', 'Zu') %}
      
      {% else %}
      --card-secondary-color: red;
      --card-primary-color: red;
      {% endif %};
    }

Ich frage hier also gleich 4 mal ab wie der Zustand von dem Türkontakt ist. Imho muss es doch irgendwie eine Möglichkeit, das zu vereinfachen.

{% if is_state("sensor.kontakt_aq2", "Zu") %} 
  $icon_color = 'green'
  $icon: 'mdi:door'
  $secondary: 'Geschlossen'
  usw...
{% else %}
  $icon_color = 'red'
  $icon: 'mdi:door-open'
  $secondary: 'Seit XY Minuten'
  usw...
{% endif %}

So irgendwie… Im eigentlichen Template werden halt die Variablen gesetzt und fertig. Geht das irgendwie?

Das geht mit ‘set’ und einem Variablennamen.

In deinem Beispiel:

{% set kontakt is_state('sensor.kontakt_aq2', 'Zu') %} 
{% if kontakt %} 
  $icon_color = 'green'
  $icon: 'mdi:door'
  $secondary: 'Geschlossen'
  usw...
{% else %}
  $icon_color = 'red'
  $icon: 'mdi:door-open'
  $secondary: 'Seit XY Minuten'
  usw...
{% endif %}

Bin mir nicht sicher, was genau Du meinst.

Wenn es drum geht wiederkehrende Template Inhalte zu verwenden, dann wäre das Stichwort „macro“ das richtige.

Siehe Kapitel „Reusing Templates“

Bsp. Siehe hier:

Gruß
Osorkon