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… ;-)
Spis treści w artykule
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…
- Zmiana „w locie” poziomu logowania w ESPHome za pomocą komponentu „select” (nie tylko z poziomu Home Assistant) - 1970-01-01
- Gdy chcesz wkleić hasło wygenerowane przez menedżer haseł, ale w KSeF uznali, że wygodniej i bezpieczniej będzie, jak je wpiszesz ręcznie - 1970-01-01
- DC-Unlocker, czyli prosty sposób na odblokowanie routera Huawei E5373 (MiFi Router), by działał bez baterii - 1970-01-01







