Niedawno byłem u znajomego i przy okazji temat zszedł na Home Assistant oraz ESPHome. Od słowa do słowa wyszło, że gdzieś tam z czymś jest problem. Poprosiłem, by odpalił logi w ESPHome, co wydawało się oczywiste w tej sytuacji. Kolega więc dokonał  szybkiej zmiany w pliku YAML (zmiana poziomu logowania z WARN na DEBUG) pierwszego urządzenia z ESPHome i przystąpił do kompilacji zmienionego kodu, by następnie wgrać je do urządzenia, za pomocą mechanizmu OTA. Niby nic nadzwyczajnego, pewnie wiele osób tak robi, ale w tym momencie musiałem zadać pytanie: czemu tak sobie utrudnia życie?! Zwłaszcza że chyba każdy użytkownik ESPHome wie, że prędzej czy później, na każdym urządzeniu będzie trzeba zajrzeć w logi. Nawet jeśli ktoś nie aktualizuje… ;-)

Zmiana „w locie” poziomu logowania w ESPHome

W przypadku ESPHome mamy różne poziomy logowania, które możemy zdefiniować. W przypadku projektów, nad którymi pracujemy, pewnie będzie to DEBUG, a może nawet VERBOSE lub VERY_VERBOSE, gdy DEBUG nic nie pokazuje, a problem jednak gdzieś z czymś występuje.

W przypadku projektów gotowych najczęściej ustawia się mniej szczegółowe logowanie, np. WARN, czy nawet ERROR, m.in. by oszczędzać pamięć…

Służy do tego komponent logger w ESPHome:


logger:
  level: DEBUG

W tej sytuacji każda zmiana poziomu logowania oznacza ponowną kompilację oprogramowania i wgrywanie do urządzenia.

Dla jasności – nie uważam, by to była zła metoda, bo sam dawno, dawno temu tak robiłem. Po prostu uważam, że lepiej/wygodniej przygotować sobie odpowiedni mechanizm, który pozwala zmienić poziom logowania w locie, bez konieczności kompilowania za każdym razem oprogramowania. Zwłaszcza że w ESPHome są wbudowane mechanizmy, z których można w tym celu skorzystać.

Na początek ustawiamy największy zakres poziomu logowania, z jakiego planujemy korzystać. W moim przypadku jest to zazwyczaj VERBOSE lub VERY_VERBOSE:


logger:
  level: VERY_VERBOSE
  initial_level: DEBUG

Od razu ustawiamy też startowy poziom np. na DEBUG, bo nie ma sensu, przy każdym uruchomieniu urządzenia z ESPHome generować aż tak szczegółowego logowania, jak VERBOSE lub VERY_VERBOSE.

W kolejnym kroku definiujemy komponent „select”, za pomocą którego będziemy mogli wybrać aktualny poziom logowania. Czy to z poziomu Home Assistant, czy strony WWW służącej do bezpośredniej kontroli nad urządzeniem z ESPHome (jeśli aktywna):


select:
  - platform: logger
    name: "Logger select"

To zamyka nam pierwszą część tematu, czyli logowanie mamy ustawione na VERY_VERBOSE, ale startujemy z logowaniem na poziomie DEBUG, a do tego możemy wybrać poziom logowania w trakcie pracy urządzenia:

Jeśli to urządzenie testowe, możemy tak zostawić.

Automatyczna zmiana poziomu logowania

W przypadku urządzenia gotowego, proponuję jeszcze jeden krok, a mianowicie automatyzację, która po uruchomieniu urządzenia i np. połączeniu z Home Assistant zmieni poziom logowania na jeszcze mniej szczegółowy, np. WARN lub ERROR:

Powyżej moja przykładowa automatyzacja startowa dla każdego ESPHome łączącego się z Home Assisatnt (konkretnie jej fragment, związany z tematem artykułu), która po podłączeniu urządzenia z ESPHome do Home Assistant po 5 sekundach ustawia poziom logowania na WARN.

Można to zrobić bezpośrednio w ESPHome, ale z racji tego, że u mnie i tak każde urządzenie z ESPHome raczej jest połączone z Home Assistant – a przynajmniej te, z których oglądam logi za pomocą serwera ESPHome, do tego każde ma i tak swoją automatyzację startową, to tak jest mi wygodniej.

Podsumowanie, czyli czemu tak, a nie inaczej

Na koniec może ktoś zapytać, czemu tak, że mam 3 poziomy logów w konfiguracji? A no dlatego, że z poziomu „select” nie możemy wybrać szerszego zakresu logów niż zdefiniowany jako „level”, więc mam tam VERBOSE lub VERY_VERBOSE, bo choć najczęściej do analizy DEBUG wystarcza, to nie zawsze.

Następnie DEBUG ustawiam jako poziom startowy za pomocą „initial_level”, bo akurat przy starcie chcę móc zobaczyć, co się dzieje. A standardowo przy każdym uruchomieniu urządzenie z ESPHome zaczyna od poziomu ustawionego w „initial_level” (lub „level”, jeśli „initial_level” nie jest ustawione), olewając wybór w „select”, więc jakbym dał np. WARN, to bym częściowo był ślepy, przynajmniej do momentu, aż zadziała automatyzacja ustawiająca pożądany poziom logowania.

A po połączeniu z Home Assistant odpala się automatyzacja startowa, która ustawia wybrany poziom logowania. Zazwyczaj, o ile nie ma problemów, będzie to u mnie WARN. A gdy zajdzie potrzeba, to za pomocą modułu w Home Assistant mogę wybrać inny poziom, np. gdy potrzebna jest jakaś analiza…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk