Helfer / Blaupause für zwei zu kombinierende Sensoren

Ich möchte mich bei folgenden Benutzern für Ihre tolle und hilfreiche Unterstützung bedanken. Mit Eurer Hilfe habe ich jetzt eine prima Lösung, um einen Fensterstatus komplett abzubilden - vielen lieben Dank :smiling_face_with_three_hearts:

Die Lösung sieht folgendermaßen aus:
Das Makro entities.jinja muss unter /config/custom_templates abgelegt werden. Hierbei ist wichtig, dass man die Farben als rgb-Wert übergibt, damit diese mit Home Assistent deckungsgleich sind. Würde man den Namen verwenden, wäre der Farbton immer eine Nuance dunkler. Die rgb-Codes findet man hier bei Home Assistant.

#window_entity
{% macro window_entity(window_handle, contact_sensor) %}
{% if states(window_handle) == "closed" and states(contact_sensor) == "off" %}
Geschlossen
{% elif states(window_handle) == "tilted" and states(contact_sensor) == "off" %}
Angelehnt
{% elif states(window_handle) == "open" and states(contact_sensor) == "off" %}
Angelehnt
{% elif states(window_handle) == "closed" and states(contact_sensor) == "on" %}
Sabotage
{% elif states(window_handle) == "tilted" and states(contact_sensor) == "on" %}
Gekippt
{% elif states(window_handle) == "open" and states(contact_sensor) == "on" %}
Offen
{% else %}
Unbekannt
{% endif %}
{% endmacro %}

#window_icon
{% macro window_icon(window_sensor_icon) %}
{% if states(window_sensor_icon) == "Geschlossen" %}
phu:lift-in-window-closed
{% elif states(window_sensor_icon) == "Angelehnt" %}
phu:lift-in-window-closed
{% elif states(window_sensor_icon) == "Sabotage" %}
mdi:alert
{% elif states(window_sensor_icon) == "Gekippt" %}
phu:lift-in-window-open1
{% elif states(window_sensor_icon) == "Offen" %}
phu:lift-in-window-open2
{% else %}
mdi:alert-box
{% endif %}
{% endmacro %}

#window_icon_color
{% macro window_icon_color(window_sensor_icon_color) %}
{% if states(window_sensor_icon_color) == "Geschlossen" %}
--tile-color: rgb(158, 158, 158) !important;
{% elif states(window_sensor_icon_color) == "Angelehnt" %}
--tile-color: rgb(255, 87, 34) !important;
{% elif states(window_sensor_icon_color) == "Sabotage" %}
--tile-color: rgb(244, 67, 54) !important;
{% elif states(window_sensor_icon_color) == "Gekippt" %}
--tile-color: rgb(33, 150, 243) !important;
{% elif states(window_sensor_icon_color) == "Offen" %}
--tile-color: rgb(0, 188, 212) !important;
{% else %}
--tile-color: rgb(233, 30, 99) !important;
{% endif %}
{% endmacro %}

Das Template kann entweder direkt in die configuration.yaml eingetragen, oder aber via /config/packages als eigene Datei (z. B. templates.yaml) ausgelagert werden. Für jeden Fenstersensor, jede Entität, muss ein eigener Eintrag erstellt werden.

template:
  - sensor:
      - name: "Bad Fensterstatus links"
        unique_id: "bad_fensterstatus_links"
        state: >-
          {% from 'entities.jinja' import window_entity %}
          {{ window_entity('sensor.bad_fenstergriff_links', 'binary_sensor.bad_fenster_links') }}
        icon: >-
          {% from 'entities.jinja' import window_icon %}
          {{ window_icon('sensor.bad_fensterstatus_links') }}

In der lovelace yaml wird der Fenstersensor, die Entität, dann wie folgt abgebildet.

type: tile
entity: sensor.bad_fensterstatus_links
name: Fenster
card_mod:
  style: |
    ha-tile-icon {
      {% from 'entities.jinja' import window_icon_color %}
      {{window_icon_color('sensor.bad_fensterstatus_links') }}
    }