Datenbank aufräumen

Hallo zusammen,

wie Ihr bereits wisst, lege ich Wert auf eine kleine Home Assistant Datenbank und in meiner recorder.yaml sind nur die Entitäten aufgenommen, von denen ich auch die Statistiken/Historie benötige.

Leider sind dort auch Entitäten mit enthalten, die ich nur kurz für Automationen benötige und dort z.B. Abfrage, wie der Wert gestern war und diesen Wert benötige ich dann Übermorgen nicht mehr und daher möchte ich solche Entitäten in der Datenbank auch entsprechend entfernen.
.
Mein Smarthome-Kumpel ChatGPT hat mir dafür eine ganz einfache Automation erstellt:

Bitte beachten!

Mindestens eine Entität muss jeweils! in der entsprechenden Kategorie angegeben werden, weil recorder.purge_entities gezielt nur die Recorder-Daten der genannten Entitäten löscht; ohne Entitäten ist das Ziel der Bereinigung nicht eindeutig und es besteht das Risiko einer fehlerhaften bzw. unerwünschten Datenbankbereinigung.

Automation:

alias: "System: Datenbank gezielte Aufbewahrung"
description: >-
  Löscht täglich um 06:00 Uhr alte Recorder-Daten ausgewählter Entitäten.
  Die Aufbewahrungsdauer wird je Kategorie festgelegt: 1 Tag, 7 Tage und
  1 Monat.

  Für recorder.purge_entities kann kein repack angegeben werden. Die Aktion
  löscht gezielt die Daten der angegebenen Entitäten, packt die Datenbank
  danach aber nicht neu.

  repack: true ist nur bei recorder.purge verfügbar. Dabei wird die gesamte
  Datenbank neu geschrieben, um freigewordenen Speicherplatz physisch
  zurückzugewinnen. Das ist eine deutlich schwerere Operation und kann
  während der Ausführung zu einer höheren System- und Datenbanklast führen.
  Deshalb wird die gezielte Entitäten-Bereinigung hier bewusst ohne repack
  verwendet.

  Mindestens eine Entität, Domain oder ein Entity-Pattern muss angegeben
  werden, damit eindeutig festgelegt ist, welche Recorder-Daten bereinigt
  werden sollen. Ohne Auswahl besteht das Risiko einer fehlerhaften bzw.
  unerwünschten Datenbankbereinigung.

triggers:
  - trigger: time
    at: "06:00:00"

conditions: []

actions:
  # Kategorie 1: Nur 1 Tag Historie behalten
  - action: recorder.purge_entities
    data:
      keep_days: 1
      entity_id:
        - sensor_1_tag

  # Kategorie 2: 7 Tage Historie behalten
  - action: recorder.purge_entities
    data:
      keep_days: 7
      entity_id:
        - sensor.sensor_7_tage

  # Kategorie 3: 1 Monat Historie behalten
  - action: recorder.purge_entities
    data:
      keep_days: 30
      entity_id:
        - sensor.sensor_30_tage

mode: single

Du kannst hier auch ganz einfach die Anzahl Tage in den Kategorien verändern oder eine Kategorie entfernen/hinzufügen.

VG Micha

Da „repack“ nur für die gesamte Datenbank möglich ist, kann optional noch eine extra Aktion am Ende für repack hinzugefügt werden.

action: recorder.purge
data:
  repack: true