logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

p.kaczmarek2 21 Cze 2025 12:40 1065 3

TL;DR

  • Home Assistant Template Editor w Developer Tools pokazuje, jak używać Jinja2 do tworzenia, testowania i debugowania szablonów dla encji, automatyzacji i komunikatów.
  • Edytor ma dwie kolumny: kod po lewej i żywy podgląd po prawej, więc każda zmiana od razu pokazuje wynik bez zapisywania.
  • Przykłady obejmują 14 zastosowań, od states('sensor.temperature') i state_attr() po pętle, makra, filtr selectattr oraz strftime('%A').
  • Pokazuje też operacje matematyczne, łączenie tekstu, losowanie z listy oraz sumę i średnią, choć Jinja2 na początku może wydawać się nieintuicyjna.
Wygenerowane przez model językowy.
📢 Słuchaj (AI):
  • Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Interfejs graficzny Home Assistant opiera się o potężny język szablonów Jinja2. Jinja2 używany jest do przetwarzania danych z czujników, tworzenia warunków w automatyzacjach czy dynamicznego formatowania komunikatów. W celu ułatwienia pracy z Jinja2 Home Assistant oferuje wygodne narzędzie Template Editor w którym można żywo podglądać i testować działanie szablonów. Tutaj krótko przedstawię właśnie te narzędzie a potem pokażę kilkanaście przykładów na co pozwalają szablony.

    Template Editor (edytor szablonów) jest dostępny w zakładce Developer Tools (Narzędzia deweloperskie) w menu Template (szablon):
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Po jego otwarciu witają nas dwie kolumny - kod źródłowy szablonu oraz jego podgląd na żywo w HA:
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Podgląd aktualizuje się sam - nie trzeba nic zapisywać, co wpiszemy po lewej, to otrzymamy po prawej.

    1. Odczyt wartości encji
    Zacznijmy od najprostszej rzeczy, czyli pobrania wartości jakiegoś sensora. Taki sensor oczywiście musi być już wcześniej sparowany z HA, np. poprzez Hass Discovery lub przez Zigbee.
    Przykład:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Ten zapis zwróci aktualną wartość sensora sensor.temperature. Jeśli encja nie istnieje albo coś poszło nie tak, to nie pokaże błędu – tylko zwróci 'unknown'.
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Tak można dobrać się do wielu wartości - przykładowo RSSI z OBK:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    W wywołaniu states można określić też obecność jednostki oraz zaokrąglania:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    To zwróci temperaturę z °C.
    Poniższy kod z kolei ją zaokrągli:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    2. Atrybuty encji
    Czasem jednak sama wartość encji to za mało, np. w weather przyda się wilgotność czy stan zachmurzenia. To już nie states(), lecz state_attr():
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Rezultat:
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    W celu debugowania można podejrzeć też cała encję dom:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

    3. Warunki i logika if
    Tu zaczyna się zabawa. Jinja2 pozwala normalnie używać if, else, elif, jak w prostym skrypcie. Na próbę na razie wpisałem wartość na sztywno:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    |float zamienia tekstową wartość encji na liczbę. W przeciwnym razie program będzie próbował porównywać napisy...
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    To samo, ale na przykładzie temperatury ze stanu urządzenia:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Taki szablon sam aktualizuje wyświetlany tekst, gdy coś się zmieni. Nie trzeba nic więcej dodawać.

    4. Moment ostatniej zmiany encji
    Czasami chcemy sprawdzić, kiedy dana encja ostatni raz zmieniła swój stan – np. kiedy zostały otwarte drzwi. Do tego służy właściwość last_changed.
    Najprościej można wyciągnąć surowy timestamp:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Jeśli zamiast liczby w sekundach wolimy coś bardziej czytelnego – pełna data i czas:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Lub z własnym formatem:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

    5. Liczenie czasu
    Analogicznie można policzyć ile czasu temu wydarzyło się dane zdarzenie - po prostu odejmujemy timestampy. Używany now() i as_timestamp():
    Kod: text
    Zaloguj się, aby zobaczyć kod

    To zwraca ile minut temu był ruch, zaokrąglone do jednego miejsca po przecinku.
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

    6. Pętle – for i in
    Jinja2 pozwala też przelecieć się po liście, np. po encjach danego typu. Taki szablon wypisuje wszystkie światła i ich stany:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Jeśli chcesz tylko te, które są włączone – da się dodać warunek w tej samej pętli:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    To przydatne np. w powiadomieniach, automatyzacjach albo do debugowania stanu systemu bez przeklikiwania się przez interfejs.

    7. Operacje matematyczne
    W Jinja2 można wykonywać różne operacje matematyczne bezpośrednio w szablonach. Przykładowo, jeśli chcesz przeliczyć temperaturę z Celsjusza na Fahrenheita, wystarczy dodać prostą formułę:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Wynik zostanie zaokrąglony do jednego miejsca po przecinku dzięki filtrze round().
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

    8. Operacje na tekście
    Można też używać filtrów do manipulacji tekstem, np. zmiana wielkości liter:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    To przydatne do standaryzacji tekstów w komunikatach lub wyświetlaniu ich w określonym formacie.
    Często trzeba łączyć wartości z różnych encji lub dodać własne komunikaty. Jinja2 pozwala to zrobić poprzez operator ~:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

    9. Obsługa list i filtrowanie danych
    Jinja2 umożliwia zaawansowaną pracę z listami. Przykładowo, jeśli chcesz zebrać nazwy wszystkich włączonych świateł w jednej linijce oddzielonej przecinkami, możesz użyć takiego szablonu:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    To połączenie filtrów: selectattr wybiera elementy o podanym atrybucie, map pobiera wybrany atrybut (tu nazwę), a join scala listę w jeden tekst.

    10. Sprawdzanie dostępności encji
    Aby upewnić się, że encja istnieje przed jej użyciem:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Ten szablon sprawdza, czy encja sensor.temperature jest dostępna i nie zwraca wartości 'unknown'.
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

    11. Wyświetlanie pełnej nazwy dnia tygodnia
    Aby uzyskać pełną nazwę dnia tygodnia:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Funkcja strftime('%A') zwraca pełną nazwę dnia tygodnia, np. "niedziela".


    12. Makra (do wielokrotnego użytku)
    Można też zdefiniować makro którego potem będzie dało się używać wielokrotnie:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Rezultat:
    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

    13. Losowy wybór z listy
    Wybierz losowo jedną wartość z listy:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template

    14. Suma i średnia z listy
    W Jinja też można utworzyć listę i ją zsumować:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    Analogiczne - średnia:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Jak tworzyć i testować szablony do Home Assistant? Jinja2, Developer Tools i Template
    To na razie tyle przykładów ode mnie. Po więcej informacji zapraszam do dokumentacji HA w języku angielskim: https://www.home-assistant.io/docs/configuration/templating/

    Podsumowując, Jinja2 jest wszechstronnym i użytecznym językiem szablonów w HA. Jej składnia może na początku wydawać się niezbyt intuicyjna, ale mam nadzieję, że pokazane tu przykłady pomogą Wam z nią wystartować. Czy korzystacie z własnych szablonów Jinja2 w swoim HA, a jeśli tak to do czego?

    W kolejnej części postaram się pokazać praktyczne przykłady szablonów Jinja2 w Home Assistant, razem z urządzeniami i z tym jak i gdzie ich użyłem.

    Fajne? Ranking DIY
    Pomogłem? Kup mi kawę.
    O autorze
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    Inżynier programista z wieloletnim doświadczeniem embedded i full stack developer.
    Specjalizuje się w: embedded, Full-Stack Developer
    p.kaczmarek2 napisał 14624 postów o ocenie 12643, pomógł 655 razy. Jest z nami od 2014 roku.
  • #2 21786693
    zglogo
    Poziom 2  
    Posty: 2
    W programowaniu doszedłem do emerytury - teraz raczkuję od kilkunastu dni w HA.
    Powiem tak: w tym programistycznym bagnie yamlowo-pythono-jinjowym nareszcie trafiam na TEN PRZEWODNIK po skryptologii - co to znaczy mieć i wiedzę i pokorę i SZACUNEK dla Kolegów.
    WIELKI SZACUN dla Autora!
  • #3 21786899
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14624
    Pomógł: 655
    Ocena: 12643
    Dzięki, czy możesz doradzić, jaki kolejny temat z HA mógłbym przedstawić i omówić? Co jest w obrębie zainteresowań, przydatności? Szykuję materiał o button-card z HACS a tak to nie wiem, tych pluginów są setki.
    Pomogłem? Kup mi kawę.
  • #4 21786939
    zglogo
    Poziom 2  
    Posty: 2
    Dziękuję za kontynuację. W tym momencie rozkminiam temat: "a couple/several events within time window" (formułuję temat w/g rezultatów różnych prób googlowania".
    W tym momencie utknąłem na rozgryzaniu gotowca:
    value_template: '{{ (states.binary_sensor.relay_i1.last_changed
    | as_timestamp() > now() | as_timestamp() - 20) and (states.binary_sensor.relay_i2.last_changed
    | as_timestamp() > now() | as_timestamp() - 20) }}'
    A więc prosta droga do Twojego materiału oraz - innych na www.smarthomejunkie.net.
    Czyli (1) "pipes" w konstrukcjach jinja oraz (2) automatyzacja kilku wyzwalaczy w zadanym przedziale czasu (kilku-kilkunastu minut).
    Przed trzema laty przed długim i dość dalekim wyjazdem dość szybko odstawiłem HA i OpenHUB na bok i napisałem własną (High Relability) aplikację (Java) do obsługi urządzenia typu relay - głównego komponentu mojego monitoringu posesji i domu. Obecnie Proxmox pozwolił mi błyskawicznie ogarnąć aktualny stan OpenHAB i HA - niestety - OH przegrywa - podczas gdy Ilość i jakość dostępnych na HA integracji jest więcej niż zadowalająca. Odstawiam Javę na bok - muszę na stare lata posmakować Pytona z przyległościami.
    Pozdrawiam serdecznie.
📢 Słuchaj (AI):
REKLAMA