Baza danych Home Assistant – Recorder, SQLite i MariaDB
Home Assistant nie tylko pokazuje aktualny stan urządzeń. Zapisuje również historię zmian, dzięki czemu można później sprawdzić wcześniejsze stany encji, temperaturę, działanie urządzeń czy dane prezentowane na wykresach.
Za tę część systemu odpowiada przede wszystkim Recorder. W niewielkiej instalacji baza danych może przez długi czas pozostawać czymś, o czym użytkownik praktycznie nie musi myśleć. Wraz z rozbudową systemu liczba zapisów może jednak wyraźnie wzrosnąć.
Nie chodzi przy tym wyłącznie o liczbę urządzeń. Kilka bardzo często aktualizujących się sensorów może generować więcej zapisów niż wiele urządzeń, których stan zmienia się tylko kilka razy dziennie.
W tym poradniku wyjaśniam, czym jest Recorder, jak działa domyślna baza SQLite, co wpływa na ilość zapisywanych danych oraz kiedy można rozważyć przejście na MariaDB.
Czym jest Recorder w Home Assistant?
Recorder jest częścią Home Assistant odpowiedzialną za zapisywanie stanów encji i zdarzeń do bazy danych.
Gdy urządzenie lub integracja przekazuje nowy stan, informacja może zostać zapisana przez Recorder. Z danych znajdujących się w bazie korzystają między innymi Historia, Aktywność, wykresy na dashboardach i statystyki.
Przykładowo czujnik temperatury może zmienić wartość z 21,4°C na 21,5°C. Dla użytkownika jest to niewielka zmiana, ale dla Recordera oznacza kolejny stan, który może zostać zapisany.
Jeżeli podobnych encji jest dużo albo aktualizują się bardzo często, liczba operacji zapisu rośnie.
Liczba urządzeń to nie wszystko
Duża liczba urządzeń może zwiększać ilość danych, ale nie istnieje jedna granica, po której baza automatycznie staje się problemem.
Znaczenie ma przede wszystkim częstotliwość zmian.
Dużo danych mogą generować na przykład:
- sensory energii i chwilowego poboru mocy,
- często aktualizowane pomiary temperatury i wilgotności,
- sensory techniczne i diagnostyczne,
- dane sieciowe,
- urządzenia raportujące stan bardzo często,
- integracje udostępniające wiele dynamicznych encji.
Sto encji zmieniających stan sporadycznie może więc generować mniej zapisów niż znacznie mniejsza liczba sensorów aktualizujących się bardzo często.
Przy analizie obciążenia Recordera warto patrzeć nie tylko na liczbę urządzeń, lecz również na to, które encje najczęściej zapisują nowe dane.
SQLite – domyślna baza Home Assistant
Home Assistant domyślnie korzysta z SQLite. Nie wymaga ona osobnego serwera ani dodatkowej konfiguracji. Standardowa baza znajduje się w katalogu konfiguracji Home Assistant i jest zapisywana w pliku home-assistant_v2.db.
SQLite jest obecnie domyślnym i rekomendowanym silnikiem bazy Recordera, a Home Assistant określa go również jako najlepiej przetestowane rozwiązanie, pod które nowsze wersje systemu są mocno zoptymalizowane.
Jeżeli Recorder działa prawidłowo, historia jest kompletna, a baza nie powoduje problemów, nie ma potrzeby zmieniać SQLite tylko dlatego, że istnieje MariaDB.
Kiedy warto zainteresować się bazą danych?
Nie każdy problem ze stabilnością Home Assistant ma związek z bazą danych.
Recorder warto jednak sprawdzić, gdy pojawiają się:
- błędy Recordera w logach,
- brakujące fragmenty historii,
- problemy z zapisywaniem stanów,
- problemy podczas korzystania z historii,
- szybko rosnący rozmiar bazy,
- mała ilość wolnego miejsca,
- błędy związane z plikiem SQLite.
Przy SQLite znaczenie może mieć również sam nośnik. Home Assistant wskazuje awarię pamięci flash, nieprawidłowe zasilanie i nieczyste wyłączenie systemu jako możliwe przyczyny uszkodzeń bazy.
Przy podobnych objawach warto więc ustalić, czy problem rzeczywiście znajduje się w bazie, czy jego źródłem jest nośnik, zasilanie, brak miejsca albo inny element instalacji.
Przykład z mojego własnego systemu
W moim przypadku problemy zaczęły być wyraźnie widoczne wraz z rozbudową Home Assistant i zwiększeniem liczby urządzeń oraz zapisywanych danych.
Home Assistant pozornie działał, ale zdarzały się zaniki, a Recorder nie pracował prawidłowo. Nie wyglądało to jak pojedynczy problem jednej automatyzacji czy konkretnego urządzenia.
Po przejściu z SQLite na MariaDB problemy ustąpiły. Od tego czasu MariaDB działa w moim systemie stabilnie od około roku, również po wielu aktualizacjach Home Assistant.
Nie oznacza to, że MariaDB rozwiąże każdy problem z niestabilnością. To doświadczenie z konkretnej, rozbudowanej instalacji. W innym systemie podobne objawy mogą mieć inne źródło.
Recorder nie musi zapisywać wszystkiego
Home Assistant pozwala określić, które encje, domeny i zdarzenia mają trafiać do Recordera.
Służą do tego ustawienia include i exclude. Odpowiednie wykluczenie danych, których historia nie jest potrzebna, może zmniejszyć liczbę zapisów i ograniczyć rozmiar bazy.
Ma to szczególne znaczenie przy encjach technicznych, które często zmieniają stan, ale których wcześniejszych wartości użytkownik nigdy nie sprawdza.
Jeżeli sensor aktualizuje się bardzo często, warto zadać sobie pytanie, czy pełna historia tej konkretnej encji rzeczywiście jest potrzebna.
Przed wykluczeniem trzeba jednak sprawdzić, czy dane nie są wykorzystywane później przez historię, diagnostykę lub inne funkcje systemu.
Historia i statystyki długoterminowe to nie dokładnie to samo
purge_keep_days dotyczy szczegółowej historii przechowywanej przez Recorder. Domyślna wartość wynosi obecnie 10 dni.
Home Assistant posiada jednak również statystyki długoterminowe dla odpowiednich sensorów. Dane krótkoterminowe są zapisywane w większej szczegółowości, natomiast statystyki długoterminowe przechowują godzinowe podsumowania i nie są automatycznie usuwane w taki sam sposób jak szczegółowe stany.
Dlatego ustawienie 10 dni historii nie oznacza automatycznie, że po dziesięciu dniach znikną wszystkie starsze dane ze wszystkich wykresów. Dla sensorów obsługujących statystyki długoterminowe Home Assistant może korzystać ze zgromadzonych danych zagregowanych.
Jak długo Recorder przechowuje szczegółową historię?
Parametr purge_keep_days określa liczbę dni szczegółowej historii pozostawianej w bazie po czyszczeniu.
Domyślna wartość wynosi 10 dni. auto_purge jest domyślnie włączone, a Recorder okresowo usuwa starsze dane. Obecna konfiguracja posiada również mechanizm auto_repack, który okresowo pomaga odzyskiwać miejsce zajmowane wcześniej przez usunięte rekordy.
Dłuższa retencja oznacza większą ilość szczegółowych danych do przechowywania.
Nie zawsze ma sens przechowywanie pełnej historii każdej encji przez bardzo długi czas. Warto dopasować ją do tego, jakie dane są później faktycznie potrzebne.
Jak często dane są zatwierdzane w bazie?
Recorder korzysta z parametru commit_interval.
Domyślna wartość wynosi obecnie 5 sekund. Zwiększenie jej ogranicza częstotliwość operacji zapisu na dysku, ale powoduje również większe opóźnienie fizycznego zatwierdzenia danych w bazie. Home Assistant wskazuje tę możliwość szczególnie w kontekście instalacji korzystających z pamięci flash i kart SD.
Nie ma jednak potrzeby zmieniać commit_interval, jeżeli nie rozwiązujemy konkretnego problemu. Jest to parametr Recordera, a nie uniwersalny sposób na przyspieszenie całego Home Assistant.
Nośnik danych ma znaczenie
Recorder wykonuje regularne operacje zapisu.
Jeżeli Home Assistant działa na wolnym albo zużytym nośniku, baza może stać się jednym z elementów wpływających na działanie systemu. Oficjalna dokumentacja zwraca szczególną uwagę na karty SD, ponieważ intensywne zapisy mogą wpływać zarówno na czas reakcji systemu, jak i żywotność nośnika.
Przy problemach warto sprawdzić:
- ilość wolnego miejsca,
- stan nośnika,
- ewentualne błędy systemu plików,
- stabilność zasilania,
- czy system nie jest regularnie wyłączany bez prawidłowego zamknięcia.
Zmiana bazy nie zastąpi naprawy problemu z dyskiem, zasilaniem albo brakiem miejsca.
Czym jest MariaDB w Home Assistant?
MariaDB jest jednym z silników baz danych obsługiwanych przez Recorder obok SQLite, MySQL i PostgreSQL.
W Home Assistant OS dostępna jest oficjalna aplikacja MariaDB. Można ją zainstalować przez Settings → Apps → Install app, przygotować bazę i użytkownika, a następnie skonfigurować Recorder tak, aby zapisywał dane w MariaDB zamiast w domyślnym pliku SQLite.
MariaDB działa wtedy jako osobna usługa bazodanowa, z którą łączy się Recorder.
MariaDB w codziennym działaniu
Po prawidłowej konfiguracji MariaDB może po prostu działać w tle razem z Home Assistant.
W moim systemie pracuje w ten sposób od około roku. W tym czasie Home Assistant był wielokrotnie aktualizowany, a sama baza nie wymagała ode mnie bieżącej obsługi.
W praktyce po jej uruchomieniu korzystam z Home Assistant normalnie i nie muszę zajmować się bazą przy każdej aktualizacji systemu.
Warto uwzględnić ją w kopiach zapasowych, tak jak pozostałe ważne elementy instalacji.
Kiedy można rozważyć MariaDB?
Nie ma jednej liczby urządzeń, po której należy zmienić SQLite na MariaDB.
MariaDB można rozważyć wtedy, gdy istnieje konkretny powód wynikający z zachowania danej instalacji, na przykład pojawiają się problemy związane z Recorderem, historia nie działa prawidłowo albo system generuje bardzo dużą liczbę zapisów.
Przed zmianą warto sprawdzić:
- logi Recordera,
- ilość wolnego miejsca,
- stan nośnika,
- rozmiar i zachowanie obecnej bazy,
- często aktualizujące się encje,
- konfigurację include i exclude,
- długość przechowywanej szczegółowej historii.
SQLite pozostaje domyślną i rekomendowaną bazą Home Assistant. MariaDB jest dodatkową, obsługiwaną możliwością, która może dobrze pasować do konkretnej instalacji.
Jak wygląda przejście na MariaDB?
W Home Assistant OS podstawowy proces wygląda następująco:
- wykonaj aktualną kopię zapasową Home Assistant;
- przejdź do Settings → Apps → Install app;
- zainstaluj oficjalną aplikację MariaDB;
- przygotuj bazę, użytkownika i silne hasło;
- uruchom MariaDB i sprawdź jej log;
- skonfiguruj Recorder w Home Assistant tak, aby korzystał z przygotowanej bazy MariaDB;
- uruchom ponownie Home Assistant;
- sprawdź logi Recordera;
- sprawdź, czy nowe stany pojawiają się w Historii;
- sprawdź wykresy i pozostałe elementy korzystające z zapisanych danych.
Oficjalna aplikacja MariaDB przewiduje konfigurację bazy, użytkowników i uprawnień, a dokumentacja pokazuje połączenie jej z Recorderem przez db_url.
Co dzieje się ze starą historią?
To ważna rzecz przed zmianą.
Home Assistant oficjalnie ostrzega, że zmiana bazy używanej przez Recorder może spowodować utratę istniejącej historii. Migracja dotychczasowych danych pomiędzy silnikami baz danych nie jest oficjalnie wspierana.
Dlatego przed zmianą warto wykonać kopię zapasową i zakładać, że nowa baza może rozpocząć zapisywanie historii od momentu przełączenia Recordera.
Baza danych czy zupełnie inny problem?
Jeżeli Home Assistant zachowuje się niestabilnie, warto najpierw ustalić charakter problemu.
Jeżeli urządzenia tracą komunikację, źródłem może być Zigbee, Wi-Fi albo konkretna integracja.
Jeżeli automatyzacja nie wykonuje działania, problem może znajdować się w wyzwalaczu, warunku, akcji albo urządzeniu.
Jeżeli natomiast pojawiają się błędy Recordera, braki w historii, problemy z zapisywaniem stanów, szybko rosnąca baza albo problemy z nośnikiem, wtedy baza danych jest jednym z elementów, które warto sprawdzić.
Integracje Home Assistant Automatyzacje Home AssistantSQLite czy MariaDB – co wybrać?
Jeżeli Home Assistant działa prawidłowo na SQLite, nie ma potrzeby zmieniać bazy tylko dlatego, że MariaDB jest dostępna.
Jeżeli natomiast przy rozbudowanym systemie pojawiają się problemy związane z Recorderem, historią albo dużą liczbą zapisów, warto najpierw ustalić ich źródło. Czasem wystarczy ograniczenie niepotrzebnych danych lub poprawa warstwy sprzętowej, a czasem sensownym rozwiązaniem może być przejście na MariaDB.
W moim systemie przejście na MariaDB rozwiązało problemy występujące wcześniej przy SQLite i od około roku ta konfiguracja działa stabilnie.
Nie oznacza to, że identyczny efekt wystąpi w każdej instalacji. Najważniejsze jest ustalenie, co faktycznie dzieje się w konkretnym systemie i dopiero na tej podstawie dobranie rozwiązania.
Baza danych działa w tle, dopóki nie zaczyna mieć znaczenia
W wielu instalacjach Home Assistant może przez lata działać na domyślnym SQLite bez potrzeby zajmowania się bazą danych.
Przy bardziej rozbudowanym systemie warto jednak wiedzieć, czym jest Recorder, które encje generują dużo zapisów, jak długo przechowywana jest szczegółowa historia i na jakim nośniku znajdują się dane.
SQLite pozostaje domyślnym i rekomendowanym rozwiązaniem Home Assistant. MariaDB jest obsługiwaną alternatywą, którą można rozważyć wtedy, gdy przemawia za tym zachowanie konkretnego systemu.
W moim przypadku przejście na MariaDB rozwiązało problemy z Recorderem, a od około roku baza działa stabilnie również po kolejnych aktualizacjach Home Assistant.
Potrzebujesz pomocy z bazą danych Home Assistant?
Jeśli Recorder działa nieprawidłowo, historia ma braki, baza szybko rośnie albo zastanawiasz się nad przejściem z SQLite na MariaDB, mogę pomóc sprawdzić obecną konfigurację, znaleźć możliwe źródło problemu i dobrać odpowiednie rozwiązanie.
Skontaktuj się ze mną.Wstępna ocena zgłoszenia jest bezpłatna i bez zobowiązań. → kliknij tutaj