Wenn du Home Assistant nutzt, sammelt die Komponente recorder kontinuierlich Zustände, Ereignisse und History in einer Datenbank. Viele Nutzer wechseln von SQLite zu MariaDB/MySQL, um größere Datenmengen besser zu handhaben.
Mit der Zeit wächst die Datenbank stark an. Große DB-Dateien führen zu langsameren Backups, höherem Speicherbedarf und möglichen Leistungseinbußen. Daher ist es sinnvoll, die gespeicherten Daten regelmäßig zu bereinigen — also alte Daten zu löschen und nur neuere History zu behalten.
Die „einfache“ Lösung aus dem Community-Thread
Im Thread „Purge MariaDB database – recorder.purge simple enough?“ teilt ein Nutzer eine Automation, die automatisch die DB bereinigen soll, sobald sie eine bestimmte Größe erreicht:
alias: 'Purge MariaDB Database'
description: When it reaches 3GB, perform purge and keep last 7 days after purge.
trigger:
- platform: numeric_state
entity_id: sensor.homeassistant_mariadb_size
above: '3000'
condition:
- condition: time
before: '06:00:00'
after: '01:00:00'
action:
- service: recorder.purge
data:
keep_days: 7
mode: single
Der Gedanke: Sobald die DB etwa 3 GB überschreitet, wird nachts automatisch alles gelöscht, was älter als 7 Tage ist. Später stellte der Nutzer jedoch fest, dass die Automation nie auslöste, weil die DB den Grenzwert nie erreicht hat. Deshalb wurde auf eine zeitgesteuerte Bereinigung umgestellt.
Probleme beim einfachen Ansatz
- Triggern per DB-Größe funktioniert oft nur einmal. Danach bleibt die DB groß.
- Bei MariaDB/MySQL verkleinert sich die Datei nach
recorder.purgeoft nicht automatisch, auch wenn alte Daten gelöscht werden. - Manchmal ist ein manuelles SQL-Optimieren oder Repacking notwendig.
Empfohlene Vorgehensweise
- Zeitbasierte Purge-Automation statt Trigger auf DB-Größe (z. B. täglich um 03:00 Uhr).
- Purge mit Repack, um Speicherplatz wirklich freizugeben.
- Nur relevante Domains/Entities aufzeichnen, um Datenmenge zu begrenzen.
- Monitoring der Datenbankgröße zur Kontrolle.
- Fallback: manuelles Aufräumen oder Neuaufbau bei Problemen.
Beispielkonfiguration
Recorder-Konfiguration (configuration.yaml):
recorder:
db_url: mysql://user:pass@IP_oder_Hostname/homeassistant?charset=utf8mb4
purge_keep_days: 14
auto_purge: false
include:
domains:
- sensor
- switch
- light
- media_player
exclude:
domains:
- automation
- weather
- sun
Automation für tägliche Bereinigung (automations.yaml):
alias: 'Daily purge Home Assistant DB'
trigger:
- platform: time
at: '03:00:00'
action:
- service: recorder.purge
data:
keep_days: 14
repack: true
mode: single
Fazit
Die Idee „purge when DB > X GB“ klingt attraktiv, ist aber unzuverlässig. Eine zeitbasierte Bereinigung mit recorder.purge + repack + Filterung ist die sichere Methode, um die DB-Größe überschaubar zu halten und die Performance von Home Assistant stabil zu halten.
Weitere Infos im Original-Thread: community.home-assistant.io