„Stan” w Home Assistant nie oznacza jednej rzeczy. Uruchomiony proces ma działającą w pamięci maszynę stanów, która odzwierciedla bieżące raporty encji, podczas gdy trwała konfiguracja i rejestry określają, co powinno istnieć po ponownym uruchomieniu. Rejestrator przechowuje dane historyczne, a wybrane platformy encji mogą zapisywać wartości specjalnie po to, aby można je było później przywrócić.
Niezawodne wdrożenie nie próbuje więc serializować każdego tymczasowego obiektu znajdującego się w pamięci. Zachowuje trwałe źródła prawdy i pozwala nowemu procesowi odbudować bieżący stan na podstawie integracji, rejestrów, przywróconych wartości oraz aktualnych raportów urządzeń.
Maszyna stanów to widok bieżącego świata dostępny w czasie działania
Home Assistant Core przechowuje bieżące stany encji w swojej maszynie stanów i emituje zdarzenia, gdy te stany się zmieniają. Ten bieżący widok należy do uruchomionego procesu Core.
Dokumentacja architektury Core opisuje maszynę stanów jako komponent, który śledzi bieżące stany i wywołuje zdarzenia state_changed. Wokół niej działają komponenty czasu wykonania, takie jak magistrala zdarzeń, rejestr usług i zegar.
Po ponownym uruchomieniu maszyna stanów jest ponownie wypełniana. Dlatego urządzenie, które jeszcze się nie połączyło, może być niedostępne, nawet jeśli jego wcześniejsze obserwacje są bezpiecznie przechowywane w Rejestratorze.
Rejestry encji przechowują tożsamość, a nie bieżący stan urządzenia
Home Assistant musi rozpoznawać tę samą encję po ponownym uruchomieniu, aby dostosowania użytkownika, identyfikatory encji, nazwy, obszary i inne ustawienia nie znikały za każdym razem, gdy integracja ponownie się łączy.
Rejestr encji istnieje, ponieważ Home Assistant potrzebuje trwałej tożsamości encji między ponownymi uruchomieniami, aby zachowywać dostosowania i śledzić znane encje. Wpis w rejestrze nie oznacza jednak, że bieżący odczyt czujnika jest automatycznie aktualny po uruchomieniu.
Tożsamość i bieżącą wartość należy traktować jako oddzielne rekordy: rejestr odpowiada na pytanie „która to encja?”, a integracja na pytanie „co raportuje teraz?”.
Niektóre wartości encji są celowo zapisywane w celu przywrócenia
Niektóre encje — zwłaszcza pomocniki i stanowe encje programowe — korzystają z przywrócenia poprzedniej wartości, zanim pojawi się nowa obserwacja zewnętrzna. Home Assistant ma dedykowany trwały punkt kontrolny stanu dla tych encji.
Jest to wybiórcza trwałość. Nie należy mylić jej z traktowaniem stanu każdego fizycznego urządzenia jako niezmiennie nadrzędnego źródła prawdy. Przywrócona wartość może być przydatna podczas uruchamiania, ale po udostępnieniu aktualnych danych integracja nadal powinna osiągnąć zgodność z rzeczywistym stanem urządzenia.
Rejestrator zachowuje obserwacje historyczne, a nie uruchomiony proces
Rejestrator przechowuje zmiany stanów i zdarzenia na potrzeby widoków historycznych, analiz oraz statystyk. Ta baza danych może przetrwać wiele ponownych uruchomień Home Assistant, podczas gdy maszyna stanów czasu wykonania jest za każdym razem tworzona od nowa.
Zapytanie do historii odpowiadające na pytanie „jaka była temperatura o 15:00?” dotyczy trwałości danych historycznych. Bieżąca automatyzacja pytająca „czy drzwi są teraz otwarte?” zależy od aktualnego stanu czasu wykonania i ścieżki integracji.
To rozróżnienie wyjaśnia, dlaczego usunięcie lub uszkodzenie Rejestratora może usunąć historię, ale nie musi wymazać automatyzacji, użytkowników ani konfiguracji integracji, podczas gdy utrata katalogu konfiguracji może zniszczyć tożsamość i konfigurację, nawet jeśli nadal istnieje stara baza danych historii.
Wdrożenie musi zachowywać pliki odtwarzające te warstwy
Konteneryzacja Home Assistant dodaje jeszcze jedną granicę: obraz czasu wykonania można zastąpić, ale podłączony katalog konfiguracji i zewnętrzne zależności muszą przetrwać poza nim. Podłączony katalog powinien zachowywać konfigurację Home Assistant, dane rejestrów, odwołania do sekretów oraz bazę danych, jeśli Rejestrator korzysta z lokalnej bazy.
Artykuł ZimaSpace o rolach trwałych danych Home Assistant omawia zakres odtwarzania. Rozróżnienie między czasem wykonania a trwałością wyjaśnia, dlaczego te pliki są ważne: to dane wejściowe, na podstawie których kolejny proces odtwarza gospodarstwo domowe.
Wybierz warstwę trwałości odpowiednią do roli stanu
| Rola stanu | Miejsce przechowywania | Co dzieje się po ponownym uruchomieniu |
|---|---|---|
| Bieżący stan encji | Maszyna stanów czasu wykonania | Odbudowywany na podstawie integracji/przywracania |
| Tożsamość i dostosowanie encji | Trwały rejestr/konfiguracja | Wczytywane ponownie |
| Wybrane wartości możliwe do przywrócenia | Trwały punkt kontrolny stanu | Przywracane do czasu odświeżenia |
| Historia/statystyki | Baza danych Rejestratora | Pozostają danymi historycznymi |
| Połączenia integracji/obiekty czasu wykonania | Pamięć procesu | Tworzone ponownie i ponownie łączone |
| Obraz kontenera/czas wykonania | Wymienialna warstwa wdrożenia | Może zostać odtworzony wokół trwałych danych |
Bezpieczna zasada mówi, aby zachowywać tożsamość, konfigurację, dane potrzebne do odtwarzania oraz stan, który Home Assistant celowo traktuje jako trwały. Niech tymczasowy stan czasu wykonania zostanie odbudowany. Zapewnia to przejrzystszy model ponownego uruchamiania niż założenie, że każda wartość w pamięci powinna przetrwać bez zmian.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Jak Home Assistant uwierzytelnia sesje lokalne i zdalne?
Lokalne i zdalne sesje Home Assistant korzystają z tego samego modelu tożsamości po stronie serwera; zdalny dostęp zmienia trasę i granicę TLS, ale nie...

Dlaczego zapytania do historii Home Assistant mogą zwalniać w miarę przyrostu danych rejestratora?
Wzrost liczby rekordów może zwiększyć koszt zapytań do historii, gdy żądany zakres obejmuje więcej wierszy, rośnie liczba chybień pamięci podręcznej lub operacje na pamięci...

Dlaczego Home Assistant odtwarza inny stan po ponownym uruchomieniu kontenera?
Ponowne uruchomienie kontenera nie oznacza utraty stanu: Home Assistant odtwarza stan środowiska wykonawczego na podstawie trwałej konfiguracji, integracji, rejestrów i źródeł zewnętrznych.

