Dlaczego Home Assistant odtwarza inny stan po ponownym uruchomieniu kontenera?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Restart kontenera Home Assistant może sprawić, że system przez chwilę będzie wyglądał inaczej, nawet gdy trwała konfiguracja pozostaje całkowicie nienaruszona. Powodem jest to, że działająca instancja zawiera zarówno trwały stan zapisany na dysku, jak i tymczasowy stan środowiska uruchomieniowego przechowywany w pamięci. Restart kontenera usuwa ten drugi i wymusza na integracjach jego odbudowanie.

Dlatego encja może przejść przez stan unknown lub unavailable, urządzenie MQTT może pojawić się ponownie zaraz po nadejściu zachowanych wiadomości, a zewnętrzna usługa może pozostać niedostępna do czasu pomyślnego ponowienia próby. Restart to zdarzenie rekonstrukcji stanu, a nie zwykłe wstrzymanie i wznowienie tego samego procesu działającego w pamięci.

Środowisko uruchomieniowe kontenera można zastąpić; /config to trwała granica

Home Assistant Container zwykle obsługuje się przez ponowne utworzenie kontenera na podstawie obrazu, przy zachowaniu zamontowanego katalogu konfiguracji. Aktualizacja obrazu, zmiana środowiska uruchomieniowego lub ponowne uruchomienie procesu nie powinny wymagać tworzenia całego gospodarstwa domowego od podstaw, jeśli ścieżka trwałego przechowywania pozostaje prawidłowo podłączona.

Obecny proces pracy z Home Assistant Container wyraźnie zakłada ponowne utworzenie kontenera przy zmianie wersji. Ten model działa, ponieważ zakłada się, że stan aplikacji przetrwa poza nietrwałym środowiskiem uruchomieniowym.

Wszystko, co istnieje wyłącznie w pamięci procesu, znika podczas restartu. Nowy proces musi ponownie odczytać konfigurację, rejestry, bazy danych i dane wejściowe integracji, zanim odtworzy ten sam bieżący widok.

Core uruchamia nową maszynę stanów środowiska

Przy każdym uruchomieniu Home Assistant tworzy nowy proces Core z nową pętlą zdarzeń, maszyną stanów, usługami, zegarami i obiektami środowiska uruchomieniowego integracji. Rejestr encji może identyfikować znane encje, ale bieżąca wartość fizycznego urządzenia nadal musi zostać przywrócona, pobrana lub zgłoszona.

Recorder również tworzy nowe uruchomienie rejestratora za każdym razem, gdy uruchamia się Home Assistant. Wiersze historyczne w bazie danych pozostają zachowane, ale bieżący proces działa w nowym przedziale środowiska uruchomieniowego, a nie jako kontynuacja poprzedniego.

To rozróżnienie ma znaczenie podczas porównywania logów lub znaczników czasu w bazie danych w okolicach restartu. Rekord historii potwierdza, co Home Assistant wcześniej zaobserwował, ale nie dowodzi automatycznie, że nowy proces ponownie ustanowił już bieżące połączenie z urządzeniem.

Integracje odbudowują stan środowiska uruchomieniowego z różną szybkością

Niektóre integracje natychmiast łączą się ponownie z lokalnym urządzeniem. Inne czekają na DNS, brokera, interfejs API w chmurze, most radiowy lub inny kontener. Dlatego ich encje stają się dostępne w różnym czasie, mimo że sam Home Assistant Core już działa.

Obecny model Home Assistant dotyczący błędów konfiguracji wymaga, aby tymczasowo niedostępne integracje przechodziły na ścieżkę ponawiania prób, aby mogły odzyskać działanie, gdy urządzenie lub usługa staną się osiągalne. Oznacza to, że widoczny stan po restarcie może zmieniać się przez kilka minut, bez wskazywania na zmianę trwałych danych.

Drugi restart, wykonany gdy wszystkie zależności są już rozgrzane, może wyglądać znacznie szybciej niż restart całego stosu, ponieważ sieć, broker, baza danych i urządzenia nie muszą ponownie osiągać spójności w tym samym czasie.

MQTT sprawia, że rekonstrukcja stanu jest szczególnie widoczna

MQTT jest dobrym przykładem, ponieważ broker może niezależnie od procesu Home Assistant przechowywać wiadomości wykrywania lub stanu. Gdy Home Assistant ponownie się łączy, zachowane dane mogą zostać odtworzone, a encje mogą szybko odzyskać ostatnią zgłoszoną wartość.

Dokumentacja integracji MQTT informuje, że wykryte encje są niedostępne po restarcie do czasu przetworzenia wykrywania, natomiast zachowane wiadomości wykrywania i zachowane wiadomości stanu mogą zostać odtworzone podczas odbudowy subskrypcji. Home Assistant wysyła również wiadomość Birth, której urządzenia mogą użyć do ponownej publikacji informacji o wykrywaniu i świeżego stanu.

Zachowana wartość nadal jest tylko ostatnim znanym raportem, a nie dowodem, że fizyczne urządzenie jest obecnie osiągalne. Tematy dostępności i świeże dane telemetryczne należy oceniać osobno.

Zachowanie podczas restartu zależy od miejsca przechowywania źródła prawdy

  • Trwała konfiguracja i rejestry: są ponownie odczytywane z trwałego magazynu Home Assistant.
  • Bieżący stan urządzenia: jest często ponownie pobierany lub zgłaszany przez integrację.
  • Stan MQTT: może zostać odbudowany z zachowanych wiadomości lub nowych publikacji.
  • Stan oparty na chmurze: zależy od łączności ze zdalnym interfejsem API i poprawności danych uwierzytelniających.
  • Stan historyczny: pozostaje w Recorder, ale nie jest tym samym co stan bieżący.
  • Czysto środowiskowe obiekty uruchomieniowe: są odtwarzane przez nowy proces Home Assistant.

Wyjaśnienie ZimaSpace dotyczące stanu MQTT po restarcie pokazuje jedną konkretną ścieżkę rekonstrukcji. Szersza zasada mówi, że zachowanie podczas restartu zależy od miejsca przechowywania źródła prawdy każdego komponentu.

FAQ

Czy restart kontenera Home Assistant usuwa historię?

Nie, o ile trwała konfiguracja i baza danych Recorder są prawidłowo zamontowane. Restart zastępuje proces środowiska uruchomieniowego, natomiast dane historyczne pozostają w trwałej bazie danych.

Dlaczego encja może natychmiast po restarcie pokazywać starą wartość?

Wartość może pochodzić z mechanizmu przywracania Home Assistant, pamięci podręcznej integracji, zachowanego stanu MQTT lub natychmiastowego odpytywania urządzenia. Przed uznaniem wyświetlanej wartości za świeży odczyt fizyczny sprawdź integrację i ścieżkę dostępności.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.