Perché Home Assistant ricostruisce uno stato diverso dopo il riavvio del container?

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

Il riavvio di un container Home Assistant può far apparire il sistema temporaneamente diverso anche quando la configurazione persistente è perfettamente intatta. Il motivo è che un'istanza in esecuzione contiene sia stato persistente su disco sia stato runtime temporaneo in memoria. Il riavvio del container elimina quest'ultimo e chiede alle integrazioni di ricostruirlo.

Per questo un'entità può passare attraverso unknown o unavailable, un dispositivo MQTT può ricomparire non appena arrivano i messaggi conservati e un servizio esterno può rimanere assente finché il tentativo di riconnessione non va a buon fine. Il riavvio è un evento di ricostruzione dello stato, non una semplice pausa e ripresa dello stesso processo in memoria.

Il runtime del container è sostituibile; /config è il confine della persistenza

Home Assistant Container viene normalmente utilizzato ricreando l'immagine del container e mantenendo il volume di configurazione. L'aggiornamento dell'immagine, la modifica del runtime o il riavvio del processo non dovrebbero richiedere di ricostruire l'intera configurazione domestica da zero, se il percorso persistente rimane collegato correttamente.

Il flusso di lavoro attuale di Home Assistant Container ricrea esplicitamente il container quando si cambiano le versioni. Questo modello funziona perché lo stato dell'applicazione deve sopravvivere al di fuori del runtime temporaneo.

Tutto ciò che esiste solo nella memoria del processo scompare al riavvio. Il processo successivo deve rileggere configurazione, registri, database e input delle integrazioni prima di poter ricreare la stessa visualizzazione live.

Core avvia una nuova macchina a stati runtime

A ogni avvio, Home Assistant crea un nuovo processo Core con un nuovo event loop, una nuova macchina a stati, servizi, timer e oggetti runtime delle integrazioni. Il registro delle entità può identificare le entità conosciute, ma il valore corrente di un dispositivo fisico deve comunque essere ripristinato, recuperato o segnalato.

Recorder crea inoltre una nuova esecuzione di Recorder ogni volta che Home Assistant si avvia. Le righe storiche del database persistono, ma il processo corrente rappresenta un nuovo intervallo runtime, non la continuazione di quello precedente.

Questa distinzione è importante quando si confrontano i log o i timestamp del database intorno a un riavvio. Un record storico dimostra ciò che Home Assistant aveva osservato in precedenza; non dimostra automaticamente che il nuovo processo abbia già ristabilito la connessione live con il dispositivo.

Le integrazioni ripopolano lo stato runtime a velocità diverse

Alcune integrazioni si riconnettono immediatamente a un dispositivo locale. Altre attendono il DNS, un broker, un'API cloud, un bridge radio o un altro container. Di conseguenza, le relative entità diventano disponibili in momenti diversi, anche se Home Assistant Core è già in esecuzione.

L'attuale modello di Home Assistant per gli errori di configurazione richiede che le integrazioni temporaneamente non disponibili seguano un percorso di nuovo tentativo per poter recuperare quando il dispositivo o il servizio diventano raggiungibili. Ciò significa che lo stato visibile dopo un riavvio può evolvere per diversi minuti senza indicare che i dati persistenti siano cambiati.

Un secondo riavvio, eseguito quando tutte le dipendenze sono già operative, può sembrare molto più rapido di un riavvio completo dello stack, perché rete, broker, database e dispositivi non devono più sincronizzarsi contemporaneamente.

MQTT rende particolarmente evidente la ricostruzione dello stato

MQTT è un esempio utile perché il broker può conservare i messaggi di discovery o di stato indipendentemente dal processo di Home Assistant. Quando Home Assistant si riconnette, i dati conservati possono essere riprodotti e le entità possono recuperare rapidamente l'ultimo valore segnalato.

L'integrazione MQTT documenta che le entità scoperte non sono disponibili dopo un riavvio finché la discovery non viene elaborata, mentre i messaggi conservati di discovery e di stato possono essere riprodotti durante la ricostruzione delle sottoscrizioni. Home Assistant invia inoltre un messaggio Birth che i dispositivi possono utilizzare per ripubblicare la discovery e lo stato aggiornato.

Un valore conservato rappresenta comunque l'ultima segnalazione conosciuta, non la prova che il dispositivo fisico sia attualmente raggiungibile. I topic di disponibilità e la telemetria aggiornata devono essere valutati separatamente.

Il comportamento al riavvio dipende da dove si trova la fonte della verità

  • Configurazione persistente e registri: riletti dallo spazio di archiviazione persistente di Home Assistant.
  • Stato corrente del dispositivo: spesso recuperato o segnalato nuovamente da un'integrazione.
  • Stato MQTT: può essere ricostruito da messaggi conservati o da nuove pubblicazioni.
  • Stato basato sul cloud: dipende dalla connettività all'API remota e dalle credenziali.
  • Stato storico: rimane in Recorder, ma non coincide con lo stato live.
  • Oggetti esclusivamente runtime: vengono ricreati dal nuovo processo di Home Assistant.

La spiegazione di ZimaSpace sullo stato MQTT dopo un riavvio mostra uno specifico percorso di ricostruzione. La regola generale è che il comportamento al riavvio segue la posizione della fonte della verità di ciascun componente.

Domande frequenti

Il riavvio del container Home Assistant elimina la cronologia?

No, se la configurazione persistente e il database di Recorder sono montati correttamente. Il riavvio sostituisce il processo runtime; i dati storici rimangono nel database persistente.

Perché un'entità può mostrare immediatamente il valore precedente al riavvio?

Il valore può provenire da un meccanismo di ripristino di Home Assistant, dalla cache di un'integrazione, da uno stato MQTT conservato o da un'interrogazione immediata del dispositivo. Verifica l'integrazione e il percorso di disponibilità prima di considerare il valore visualizzato come una lettura fisica aggiornata.

Hub Tecnologico e AI

Altro da leggere

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.