Przydatne szablony jinja2 w HA

Przydatne szablony do wyświetlania różnego typu informacji które mogą się przydać.
Zachęcam do dodawania swoich ciekawych użytecznych szablonów które można wykorzystać w powiadomieniach itp. Pomyślałem że zgromadzenie ich w jednym temacie nie jednemu początkującemu i nie tylko może się przydać. Zacznę może ja :stuck_out_tongue:

Informacja kiedy będzie kolejne wydarzenie w kalendarzu. calendar.urodziny (zamień na swoją encje kalendarza)

{% set now = utcnow() %}
{% set calendar_event = state_attr('calendar.urodziny', 'start_time') %} 
{% if calendar_event %}
  {% set event_time = as_datetime(calendar_event).astimezone(now.tzinfo) %}
  {% set time_left = event_time - now %}
  Czas do najbliższego wydarzenia w kalendarzu: {{ time_left.days }} dni, {{ time_left.seconds // 3600 }} godzin, {{ (time_left.seconds % 3600) // 60 }} minut.
{% else %}
  Brak nadchodzącego wydarzenia.
{% endif %}

Ilość dni do Nowego Roku

{% set new_year = now().replace(month=1, day=1, year=now().year + 1).date() %}
{% set days_left = (new_year - now().date()).days %}{{ days_left }}

Kierunek wiatru (u mnie pobiera to z integracji wbudowanej weather.home i atrybutu wind_bearing

{% set winbearing = (state_attr('weather.home', 'wind_bearing') | float / 45) | int | round %}
{% set winddir = ['Północny', 'Północno Wschodni', 'Wschodni', 'Południowo Wschodni', 'Południowy', 'Południowo Zachodni', 'Zachodni', 'Północno Zachodni'] %}
{{ winddir[winbearing % winddir | length] }}

Ilość włączonych świateł i jakie.

{% set lights_on = states.light | selectattr('state', 'equalto', 'on') | list %}
Obecnie włączonych świateł: {{ lights_on | length }}
{% if lights_on | length > 0 %}
    Światła, które są włączone:
    {% for light in lights_on %}
      - {{ light.name }} {% endfor %}
{% else %}
    Brak włączonych świateł.
{% endif %}

Procentowo ilość włączonych i wyłączonych świateł .

{% set lights = states.light %}
{% set total_lights = lights | selectattr('state', 'in', ['on', 'off']) | list %}
{% set on_lights = lights | selectattr('state', 'equalto', 'on') | list %}
{% set off_lights = lights | selectattr('state', 'equalto', 'off') | list %}

{% set on_percentage = (on_lights | length / total_lights | length * 100) | round(2) %}
{% set off_percentage = (off_lights | length / total_lights | length * 100) | round(2) %}

Włączonych świateł : {{ on_percentage }}%
Wyłączonych świateł: {{ off_percentage }}%

Ile dziś zostało uruchomionych automatyzacji.

{% set today = now().strftime('%Y-%m-%d') %}
{% set automations_today = states.automation | selectattr('attributes.last_triggered', 'defined') | selectattr('attributes.last_triggered', 'search', today) | list | length %}
Dziś uruchomiono {{ automations_today }} automatyzacji.

Procent urządzeń o stanie niedostępnym:

{% set unavailable_entities = states | selectattr('state', 'equalto', 'unavailable') | list %}
{% set total_entities = states | list %}
{% if total_entities %}
    Niedostępne: {{ (unavailable_entities | length / total_entities | length * 100) | round(1) }}%
{% else %}
    Brak danych o urządzeniach.
{% endif %}

Średnia temperatura w domu z wszystkich czujników

{% set temp_sensors = states.sensor | selectattr('attributes.device_class', 'equalto', 'temperature') | map(attribute='state') | map('float', default=0) | list %}
{% if temp_sensors %}
    Średnia temperatura: {{ (temp_sensors | sum / temp_sensors | length) | round(1) }} °C
{% else %}
    Brak czujników temperatury.
{% endif %}

Edit.

Pozostały czas do zamknięcia / otwarcia rolet (warunek że zamykają się o zachodzie i otwierają o wschodzie jak u mnie / do zamiany encja rolety lub encja grupy rolet jak w moim przypadku cover.wszystkie_rolety.

{% set sunrise = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set sunset = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set now = as_timestamp(now()) %}

{% if is_state('cover.wszystkie_rolety', 'open') %}
    {% set time_until_event = sunset - now %}
    {% set event_type = 'zamknięcia rolet' %}
{% else %}
    {% set time_until_event = sunrise - now %}
    {% set event_type = 'otwarcia rolet' %}
{% endif %}

{% if time_until_event > 0 %}
Czas do {{ event_type }} : {{ (time_until_event // 3600) | int }} godzin i {{ ((time_until_event % 3600) // 60) | int }} minut{% else %}{% endif %}

Czas zachodu - wschodu słońca.

{% set sunrise = as_datetime(state_attr('sun.sun', 'next_rising')) | as_local %}
{% set sunset = as_datetime(state_attr('sun.sun', 'next_setting')) | as_local %}

Wschód słońca: {{ sunrise.strftime('%H:%M') }}
Zachód słońca: {{ sunset.strftime('%H:%M') }}

Szablon nasłuchujący czy wszystkie okna są zamknięte ,jeśli nie wymienia które.

{% set open_windows = states.binary_sensor | selectattr('attributes.device_class', 'equalto', 'window') | selectattr('state', 'equalto', 'on') | map(attribute='name') | list %}
{% if open_windows %}
    Otwarte okna: {{ open_windows | join(', ') }}
{% else %}
    Wszystkie okna są zamknięte.
{% endif %}

6 polubień

Trzeba wiedzieć, że ta średnia to także z tych, które podają temperaturę np. procesora, (46’C), airly (-1;C), … itd można to zresztą sprawdzić …


{% set temp_sensors = states.sensor | selectattr('attributes.device_class', 'equalto', 'temperature') | list %}
{% if temp_sensors %}
    {% for sensor in temp_sensors %}
        - {{ sensor.name }}: {{ sensor.state }} °C
    {% endfor %}
    Średnia temperatura: {{ (temp_sensors | map(attribute='state') | map('float', default=0) | sum / temp_sensors | length) | round(1) }} °C
{% else %}
    Brak czujników temperatury.
{% endif %}