Om mig Kontakt

Home Assistant-database – Recorder, SQLite og MariaDB

Home Assistant viser ikke kun enhedernes aktuelle tilstand. Systemet gemmer også en historik over ændringer, så man senere kan kontrollere tidligere tilstande for entiteter, temperaturer, enheders drift og data, der vises i grafer.

Recorder er den del af systemet, der primært står for dette. I en mindre installation kan databasen i lang tid være noget, brugeren næsten ikke behøver at tænke på. Efterhånden som systemet udvides, kan antallet af registreringer dog stige markant.

Det handler ikke kun om antallet af enheder. Nogle få sensorer, der opdateres meget ofte, kan generere flere registreringer end mange enheder, hvis tilstand kun ændres nogle få gange om dagen.

I denne guide forklarer jeg, hvad Recorder er, hvordan standarddatabasen SQLite fungerer, hvad der påvirker mængden af gemte data, og hvornår det kan være relevant at overveje at skifte til MariaDB.

Hvad er Recorder i Home Assistant?

Recorder er den del af Home Assistant, der gemmer entiteters tilstande og hændelser i en database.

Når en enhed eller integration sender en ny tilstand, kan Recorder gemme informationen. Dataene i databasen bruges blandt andet af Historik, Aktivitet, grafer på dashboards og statistik.

En temperatursensor kan for eksempel ændre værdien fra 21,4°C til 21,5°C. For brugeren er det en lille ændring, men for Recorder er det endnu en tilstand, der kan blive gemt.

Hvis der er mange lignende entiteter, eller hvis de opdateres meget ofte, stiger antallet af skriveoperationer.

Antallet af enheder er ikke det eneste, der betyder noget

Et stort antal enheder kan øge datamængden, men der findes ikke én bestemt grænse, hvor databasen automatisk bliver et problem.

Det er især hyppigheden af ændringer, der har betydning.

Store datamængder kan for eksempel komme fra:

  • sensorer for energi og aktuelt effektforbrug,
  • hyppigt opdaterede målinger af temperatur og luftfugtighed,
  • tekniske sensorer og diagnosesensorer,
  • netværksdata,
  • enheder, der rapporterer deres tilstand meget ofte,
  • integrationer, der opretter mange dynamiske entiteter.

Hundrede entiteter, der kun sjældent ændrer tilstand, kan derfor generere færre registreringer end et langt mindre antal sensorer, der opdateres meget ofte.

Når Recorders belastning analyseres, er det værd at se både på antallet af enheder og på, hvilke entiteter der oftest gemmer nye data.

SQLite – standarddatabasen i Home Assistant

Home Assistant bruger SQLite som standard. Den kræver ikke en separat server eller yderligere konfiguration. Standarddatabasen ligger i Home Assistants konfigurationsmappe og gemmes i filen home-assistant_v2.db.

SQLite er i øjeblikket den standarddatabase og anbefalede databasemotor for Recorder. Home Assistant beskriver den også som den bedst testede løsning, som nyere versioner af systemet er stærkt optimeret til.

Hvis Recorder fungerer korrekt, historikken er komplet, og databasen ikke giver problemer, er der ingen grund til at skifte SQLite ud, blot fordi MariaDB findes.

Hvornår bør man undersøge databasen?

Ikke alle stabilitetsproblemer i Home Assistant har forbindelse til databasen.

Recorder bør dog undersøges, hvis der opstår:

  • fejl fra Recorder i loggen,
  • manglende perioder i historikken,
  • problemer med at gemme tilstande,
  • problemer ved brug af historikken,
  • en database, der vokser hurtigt,
  • meget lidt ledig lagerplads,
  • fejl relateret til SQLite-filen.

Ved SQLite kan selve lagermediet også have betydning. Home Assistant nævner defekt flashlager, utilstrækkelig strømforsyning og ukorrekt nedlukning af systemet som mulige årsager til en beskadiget database.

Ved sådanne symptomer bør man derfor fastslå, om problemet faktisk ligger i databasen, eller om årsagen er lagermediet, strømforsyningen, manglende plads eller en anden del af installationen.

Et eksempel fra mit eget system

I mit tilfælde blev problemerne tydelige, efterhånden som jeg udvidede Home Assistant og øgede antallet af enheder og mængden af gemte data.

Home Assistant så ud til at fungere, men der opstod afbrydelser, og Recorder arbejdede ikke korrekt. Det lignede ikke et enkelt problem med én automatisering eller en bestemt enhed.

Efter skiftet fra SQLite til MariaDB forsvandt problemerne. Siden da har MariaDB kørt stabilt i mit system i omkring et år, også efter mange opdateringer af Home Assistant.

Det betyder ikke, at MariaDB løser alle stabilitetsproblemer. Det er min erfaring fra én konkret og omfattende installation. Lignende symptomer i et andet system kan have en anden årsag.

Recorder behøver ikke at gemme alt

Home Assistant gør det muligt at angive, hvilke entiteter, domæner og hændelser Recorder skal gemme.

Det styres med indstillingerne include og exclude. Hvis data, hvis historik ikke er nødvendig, udelukkes på en passende måde, kan antallet af registreringer og databasens størrelse reduceres.

Det er især relevant for tekniske entiteter, som ofte ændrer tilstand, men hvis tidligere værdier brugeren aldrig undersøger.

Hvis en sensor opdateres meget ofte, er det værd at overveje, om den fulde historik for netop denne entitet virkelig er nødvendig.

Før den udelukkes, skal man dog kontrollere, om dataene senere bruges af historik, diagnostik eller andre funktioner i systemet.

Historik og langtidsstatistik er ikke helt det samme

purge_keep_days gælder den detaljerede historik, som Recorder gemmer. Standardværdien er i øjeblikket 10 dage.

Home Assistant har dog også langtidsstatistik for relevante sensorer. Korttidsdata gemmes mere detaljeret, mens langtidsstatistik gemmer opsummeringer pr. time og ikke automatisk slettes på samme måde som de detaljerede tilstande.

En indstilling på 10 dages historik betyder derfor ikke automatisk, at alle ældre data forsvinder fra alle grafer efter ti dage. For sensorer, der understøtter langtidsstatistik, kan Home Assistant bruge de indsamlede, aggregerede data.

Hvor længe gemmer Recorder den detaljerede historik?

Parameteren purge_keep_days angiver, hvor mange dages detaljeret historik der efter en oprydning skal blive i databasen.

Standardværdien er 10 dage. auto_purge er aktiveret som standard, og Recorder fjerner regelmæssigt ældre data. Den nuværende konfiguration har også mekanismen auto_repack, der med jævne mellemrum hjælper med at frigøre plads, som tidligere blev brugt af slettede poster.

Længere opbevaring betyder, at en større mængde detaljerede data skal gemmes.

Det giver ikke altid mening at gemme den fulde historik for alle entiteter i meget lang tid. Perioden bør tilpasses de data, der faktisk bliver brug for senere.

Hvor ofte bliver data skrevet permanent til databasen?

Recorder bruger parameteren commit_interval.

Standardværdien er i øjeblikket 5 sekunder. Hvis den øges, reduceres antallet af skriveoperationer på disken, men der opstår også en længere forsinkelse, før data fysisk skrives til databasen. Home Assistant nævner især denne mulighed i forbindelse med installationer, der bruger flashlager og SD-kort.

Der er dog ingen grund til at ændre commit_interval, medmindre man forsøger at løse et konkret problem. Det er en Recorder-parameter og ikke en universel metode til at gøre hele Home Assistant hurtigere.

Lagermediet har betydning

Recorder udfører regelmæssige skriveoperationer.

Hvis Home Assistant kører på et langsomt eller slidt lagermedie, kan databasen blive en af de faktorer, der påvirker systemets drift. Den officielle dokumentation fremhæver især SD-kort, fordi intensive skriveoperationer kan påvirke både systemets reaktionstid og lagermediets levetid.

Ved problemer bør man kontrollere:

  • mængden af ledig plads,
  • lagermediets tilstand,
  • eventuelle fejl i filsystemet,
  • strømforsyningens stabilitet,
  • om systemet regelmæssigt slukkes uden korrekt nedlukning.

Et databaseskift erstatter ikke en løsning på problemer med disk, strømforsyning eller manglende plads.

Hvad er MariaDB i Home Assistant?

MariaDB er en af de databasemotorer, som Recorder understøtter, sammen med SQLite, MySQL og PostgreSQL.

I Home Assistant OS findes der en officiel MariaDB-app. Den kan installeres via Settings → Apps → Install app. Derefter oprettes en database og en bruger, og Recorder konfigureres til at gemme data i MariaDB i stedet for i standardfilen fra SQLite.

MariaDB kører derefter som en separat databasetjeneste, som Recorder opretter forbindelse til.

MariaDB i den daglige drift

Efter korrekt konfiguration kan MariaDB blot køre i baggrunden sammen med Home Assistant.

I mit system har den fungeret på denne måde i omkring et år. I den periode er Home Assistant blevet opdateret mange gange, og selve databasen har ikke krævet løbende vedligeholdelse fra min side.

I praksis bruger jeg Home Assistant normalt efter opsætningen og behøver ikke at arbejde med databasen ved hver opdatering af systemet.

Den bør medtages i sikkerhedskopier på samme måde som installationens øvrige vigtige dele.

Hvornår kan MariaDB overvejes?

Der findes ikke ét bestemt antal enheder, hvor SQLite bør udskiftes med MariaDB.

MariaDB kan overvejes, når der er en konkret grund, som viser sig i den pågældende installation, for eksempel problemer med Recorder, en historik der ikke fungerer korrekt, eller et system der genererer et meget stort antal registreringer.

Før et skift bør man kontrollere:

  • Recorder-loggen,
  • mængden af ledig plads,
  • lagermediets tilstand,
  • den nuværende databases størrelse og funktion,
  • entiteter der opdateres ofte,
  • konfigurationen af include og exclude,
  • opbevaringsperioden for den detaljerede historik.

SQLite er fortsat Home Assistants standarddatabase og anbefalede database. MariaDB er en ekstra understøttet mulighed, der kan passe godt til en bestemt installation.

Hvordan foregår et skift til MariaDB?

I Home Assistant OS ser den grundlæggende proces sådan ud:

  1. opret en aktuel sikkerhedskopi af Home Assistant;
  2. gå til Settings → Apps → Install app;
  3. installer den officielle MariaDB-app;
  4. opret databasen, brugeren og en stærk adgangskode;
  5. start MariaDB, og kontroller dens log;
  6. konfigurer Recorder i Home Assistant til at bruge den oprettede MariaDB-database;
  7. genstart Home Assistant;
  8. kontroller Recorder-loggen;
  9. kontroller, at nye tilstande vises i Historik;
  10. kontroller grafer og andre elementer, der bruger de gemte data.

Den officielle MariaDB-app understøtter konfiguration af database, brugere og rettigheder, og dokumentationen viser forbindelsen til Recorder via db_url.

Hvad sker der med den gamle historik?

Det er vigtigt at forstå før et skift.

Home Assistant advarer officielt om, at et skift af den database, Recorder bruger, kan medføre tab af den eksisterende historik. Migrering af eksisterende data mellem forskellige databasemotorer understøttes ikke officielt.

Før skiftet bør man derfor oprette en sikkerhedskopi og regne med, at den nye database kan begynde at gemme historik fra det tidspunkt, hvor Recorder skifter database.

Er det databasen eller et helt andet problem?

Hvis Home Assistant fungerer ustabilt, bør man først fastslå problemets karakter.

Hvis enheder mister forbindelsen, kan årsagen være Zigbee, Wi-Fi eller en bestemt integration.

Hvis en automatisering ikke udfører en handling, kan problemet ligge i udløseren, betingelsen, handlingen eller enheden.

Hvis der derimod opstår Recorder-fejl, huller i historikken, problemer med at gemme tilstande, hurtig vækst i databasen eller problemer med lagermediet, er databasen et af de elementer, der bør undersøges.

Home Assistant-integrationer Home Assistant-automatiseringer

SQLite eller MariaDB – hvad skal man vælge?

Hvis Home Assistant fungerer korrekt med SQLite, er der ingen grund til at ændre databasen, blot fordi MariaDB er tilgængelig.

Hvis der i et omfattende system opstår problemer med Recorder, historikken eller et stort antal skriveoperationer, bør årsagen først fastslås. Nogle gange er det tilstrækkeligt at begrænse unødvendige data eller forbedre hardwaren, mens et skift til MariaDB i andre tilfælde kan være en fornuftig løsning.

I mit system løste skiftet til MariaDB de problemer, der tidligere opstod med SQLite, og denne konfiguration har fungeret stabilt i omkring et år.

Det betyder ikke, at resultatet bliver det samme i alle installationer. Det vigtigste er at finde ud af, hvad der faktisk sker i det konkrete system, og først derefter vælge en løsning.

Databasen arbejder i baggrunden, indtil den begynder at få betydning

I mange installationer kan Home Assistant køre på standarddatabasen SQLite i årevis, uden at databasen kræver opmærksomhed.

I et mere omfattende system er det dog nyttigt at vide, hvad Recorder er, hvilke entiteter der genererer mange registreringer, hvor længe den detaljerede historik opbevares, og hvilket lagermedie dataene ligger på.

SQLite er fortsat Home Assistants standardløsning og anbefalede løsning. MariaDB er et understøttet alternativ, som kan overvejes, når det konkrete systems funktion giver en grund til det.

I mit tilfælde løste skiftet til MariaDB problemerne med Recorder, og databasen har fungeret stabilt i omkring et år, også efter senere opdateringer af Home Assistant.

Har du brug for hjælp til databasen i Home Assistant?

Hvis Recorder ikke fungerer korrekt, historikken har huller, databasen vokser hurtigt, eller du overvejer at skifte fra SQLite til MariaDB, kan jeg hjælpe med at gennemgå den nuværende konfiguration, finde mulige årsager og vælge en passende løsning.

Kontakt mig.Den indledende vurdering af din henvendelse er gratis og uforpligtende. → klik her