Runtime-status versus persistente status in Home Assistant: wat moet een herstart overleven?

Eva Wong is de Technisch Schrijver en en vaste knutselaar bij ZimaSpace. Een levenslange geek met een passie voor homelabs en open-source software, zij is gespecialiseerd in het vertalen van complexe technische concepten naar toegankelijke, praktische handleidingen. Eva gelooft dat zelf-hosting leuk moet zijn, niet intimiderend. Met haar tutorials stelt ze de community in staat om hardware-setup te ontrafelen, van het bouwen van hun eerste NAS tot het beheersen van Docker-containers.

De “state” van Home Assistant is niet één ding. Het actieve proces heeft een State Machine in het geheugen die weergeeft wat entiteiten nu rapporteren, terwijl persistente configuratie en registers aangeven wat er na een herstart zou moeten bestaan. Recorder bewaart historische waarnemingen, en bepaalde entiteitsplatforms kunnen waarden specifiek opslaan zodat ze later kunnen worden hersteld.

Een betrouwbare implementatie probeert daarom niet elk tijdelijk object in het geheugen te serialiseren. In plaats daarvan bewaart deze de duurzame bronnen van waarheid en laat hij het nieuwe proces de actieve status opnieuw opbouwen vanuit integraties, registers, herstelde waarden en nieuwe apparaatrapportages.

De State Machine is een runtimeweergave van de huidige wereld

Home Assistant Core bewaart de actuele entiteitsstatussen in zijn State Machine en genereert gebeurtenissen wanneer die statussen veranderen. Deze actuele weergave hoort bij het actieve Core-proces.

De architectuurdocumentatie van Core beschrijft de State Machine als het onderdeel dat actuele statussen bijhoudt en state_changed-gebeurtenissen activeert. De Event Bus, Service Registry en Timer zijn runtimeonderdelen eromheen.

Na een herstart wordt de State Machine opnieuw gevuld. Een apparaat dat nog geen verbinding heeft gemaakt, kan daardoor niet beschikbaar zijn, terwijl de oude waarnemingen veilig in Recorder opgeslagen blijven.

Entiteitsregisters bewaren identiteit, niet de actuele apparaatwaarheid

Home Assistant moet dezelfde entiteit na herstarts kunnen herkennen, zodat aanpassingen door gebruikers, entiteits-ID's, namen, ruimtes en andere instellingen niet telkens verdwijnen wanneer een integratie opnieuw verbinding maakt.

Het entiteitsregister bestaat omdat Home Assistant een duurzame entiteitsidentiteit over herstarts heen nodig heeft om aanpassingen te behouden en bekende entiteiten te volgen. Een vermelding in dat register betekent niet dat de huidige sensorwaarde na het opstarten automatisch actueel is.

Zie identiteit en actuele waarde als afzonderlijke records: het register beantwoordt de vraag “welke entiteit is dit?”, terwijl de integratie antwoordt op “wat rapporteert deze nu?”

Sommige entiteitswaarden worden bewust opgeslagen voor herstel

Bepaalde entiteiten, vooral helpers en stateful software-entiteiten, hebben er baat bij dat hun vorige waarde wordt hersteld voordat er een nieuwe externe waarneming beschikbaar is. Home Assistant heeft hiervoor een speciaal persistent statuscheckpoint.

De actuele actie voor het opslaan van persistente statussen legt uit dat sommige entiteiten na een herstart hun laatste waarde herstellen en dat Home Assistant deze waarden normaal gesproken bij het opstarten, elke 15 minuten en bij het afsluiten opslaat.

Dit is selectieve persistentie. Het moet niet worden verward met het voor altijd als gezaghebbend beschouwen van elke fysieke apparaatstatus. Een herstelde waarde kan tijdens het opstarten nuttig zijn, maar een integratie moet alsnog naar de actuele apparaatwaarheid convergeren zodra die beschikbaar is.

-15% OFF
Single board computer zimaboard2

Recorder bewaart waarnemingen, niet het actieve proces

Recorder slaat statuswijzigingen en gebeurtenissen op voor historische weergaven, analyses en statistieken. Deze database kan vele herstarts van Home Assistant overleven, terwijl de runtime-State Machine telkens opnieuw wordt aangemaakt.

Een geschiedenisquery die antwoord geeft op de vraag “wat was de temperatuur om 15.00 uur?” hoort bij historische persistentie. Een live automatisering die vraagt “staat de deur nu open?” is afhankelijk van de actuele runtimestatus en het integratiepad.

Dit onderscheid verklaart waarom het verwijderen of beschadigen van Recorder de geschiedenis kan verwijderen zonder noodzakelijkerwijs automatiseringen, gebruikers en integratieconfiguratie te wissen, terwijl het verlies van de configuratiemap identiteit en configuratie kan vernietigen, zelfs als er nog een oude geschiedenisdatabase bestaat.

De implementatie moet de bestanden bewaren die deze lagen opnieuw opbouwen

Een containerimplementatie van Home Assistant voegt nog een grens toe: de runtime-image kan worden vervangen, terwijl de configuratiekoppeling en externe afhankelijkheden buiten de image moeten blijven bestaan. De koppeling moet de Home Assistant-configuratie, registeropslag, verwijzingen naar geheimen en de database behouden als Recorder lokaal wordt gebruikt.

Het ZimaSpace-artikel over persistente gegevensrollen in Home Assistant behandelt de reikwijdte van herstel. Het onderscheid tussen runtime en persistentie verklaart waarom deze bestanden belangrijk zijn: ze vormen de invoer waarmee het volgende proces het huishouden opnieuw opbouwt.

Gebruik de persistentielaag die bij de rol van de status past

Statusrol Waar deze zich bevindt Wat er na een herstart gebeurt
Actuele entiteitsstatus Runtime-State Machine Opnieuw opgebouwd vanuit integraties/herstel
Entiteitsidentiteit/aanpassingen Persistent register/configuratie Opnieuw geladen
Geselecteerde herstelbare waarden Persistent statuscheckpoint Hersteld totdat ze worden vernieuwd
Geschiedenis/statistieken Recorder-database Blijft historische data
Integratieverbindingen/runtimeobjecten Procesgeheugen Opnieuw aangemaakt en verbonden
Container-image/runtime Vervangbare implementatielaag Kan opnieuw worden aangemaakt rond persistente data

De veilige regel is om de identiteit, configuratie, herstelgegevens en status te bewaren die Home Assistant bewust als duurzaam behandelt. Laat tijdelijke runtimestatus opnieuw worden opgebouwd. Dat levert een duidelijker herstartmodel op dan ervan uitgaan dat elke waarde in het geheugen ongewijzigd moet blijven bestaan.

Tech & AI HUB

Meer om te lezen

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.