Ältere Dateien in Home Assistant automatisch löschen

Home Assistant erlaubt es uns ja eigentlich alles beliebige mit dem Smarthome umzusetzen. So kann Home Assistant auch als Überwachungs-Zentrale der heimischen Kameras dienen und im Verdachtsfall Fotos oder Videos der Kameras speichern und sogar verschicken.

Wie so etwas funktioniert (also konkret eine automatische Benachrichtigung per Telegram sofern niemand zu Hause ist, sobald eine der Kameras eine Bewegung erkannt hat mit entsprechendem Bilder der Kamera) habe ich vor einigen Tagen in dem Beitrag Kamera Snapshot erstellen und über Telegram verschicken (mit Home Assistant) in 2 Schritten bereits beschrieben.

Was ich in diesem Beitrag aber „vergessen“ habe, ist eine Funktion umzusetzen, so dass die erstellten Snapshots (also Bilder der Kameras) auch irgendwann wieder automatisch gelöscht werden. Setzt man so eine Automatisierung nicht um, hat man sonst als Konsequenz eine sich immer mehr füllende SD-Karte. Und das manuelle Löschen der Bilder ist für mich keine Option!

Ältere Dateien automatisch löschen in Home Assistant

Da die von mir im folgenden beschriebene Automatisierung aber nicht nur für meinen konkret beschriebenen Anwendungsfall hilfreich sein kann, sondern es natürlich auch andere Szenarien geben kann, bei denen das automatische Löschen veralteter Dateien hilfreich oder sinnvoll sein kann, beschreibe ich das Vorgehen separat anstelle meinen Post über das automatische Versenden der Snapshots nur zu aktualisieren!

Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:

Follow Home Assistant
( 424 Followers )
X

Follow Home Assistant

E-mail : *
* Ich stimme der Datenschutzerklärung zu!

Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!

Voraussetzung für das Löschen nicht mehr benötigter Dateien

Sobald man ein System befähigt automatisch Dateien zu löschen, sollte man sich sehr genau überlegen, wie man so etwas am besten umsetzt. Denn anderenfalls macht man einen Fehler, der zur Folge hat, dass das System deutlich mehr Dateien löscht, als es dies eigentlich tun sollte.

Welche Dateien sollen gelöscht werden dürfen?

In meinem konkreten Fall ist diese Frage sehr einfach zu beantworten: Home Assistant erstellt automatisch Snapshots meiner Kameras. Diese sollen zukünftig automatisch gelöscht werden.

Letztlich habe ich nun schon einen Dateitypen (also Bilder) beschrieben, die gelöscht werden sollen. Alternativ kann ich dies jedoch auch über eine andere Bedingung erfüllt/umgesetzt werden: Nur Dateien in einem bestimmten Ordner sollen gelöscht werden dürfen.

Da meine Automatisierung zum Erstellen der Snapshots der Kameras die Snapshots in einem explizit hierfür angelegte Ordner/Verzeichnis speichert, reduziert diese Einschränkung auf ein konkretes Verzeichnis die Gefahr des ungewollten Löschens anderer Dateien natürlich deutlich!

Diese Einschränkung halte ich für deutlich sicherer und sinnvoller, weshalb ich in der Umsetzung auch diese Lösung zeigen werde!

Wann sollen die Dateien in Home Assistant automatisch gelöscht werden?

Gelöschte Dateien sollte man grundsätzlich als „verloren“ ansehen. Natürlich gibt es Möglichkeiten auch solche Dateien wieder herzustellen – ich verfolge aber lieber den Ansatz „besser safe than sorry“ und mache mir lieber vor dem Löschen ein paar Gedanken, ob ich das Löschen wirklich ausführen möchte 😉

Ich für mich habe festgelegt, dass ich die Snapshots nach 6 Tagen löschen möchte. Also Snapshots, die älter als 6 Tage alt sind, sollen automatisch gelöscht werden!

Ebenso möchte ich, dass das Löschen täglich erfolgt. Also jeden Tag sollen alle Snapshots gelöscht werden, die älter als 6 Tage sind.

Etwas abstrakter formuliert, kann ich mein Vorhaben nun wie folgt beschreiben:

Jeden Tag sollen alle Dateien in einem konkreten Verzeichnis gelöscht werden, die älter als 6 Tage sind!

Ich betone dies noch einmal explizit, weil ich keine Überprüfung auf Dateityp oder ähnliches mache!

Home Assitant Automation zum automatischen Löschen von Dateien

Um eine solche Automation umzusetzen, benötigen wir zwei Code-Schnippsel!

Da Home Assistant selbst keine Funktion an Bopard hat, welche das Löschen von Dateien ermöglicht, bedienen wir uns eines Shell-Commands. Diesen kannst du beispielsweise in deiner configuration.yaml einfach ergänzen und musst hierbei nur darauf achten, dass die Verzeichnis-Angabe zu deinem Vorhaben passt:

shell_command:
  delete_unify_images: find /config/www/cam_captures -mtime +6 -exec rm -fr {} +

Wir erstellen einen Shell-Command namens „delete_unify_images“, der alle Dateien in dem Verzeichnis „/config/www/cam_captures“ löscht, wenn diese älter als 6 Tage („+6“) sind. Verzeichnis und Alter musst du deinem Bedarf entsprechend anpassen!

Der Shell-Command steht erst nach einem manuellen Neustart von Home Assistant zur Verfügung! Also, bitte einmal Neustarten! 😉

Danach musst du nur noch deine eigentliche Automation erstellen. Bei mir sieht diese wie folgt aus:

- id: "Delete old Unify images"
  alias: Delete of unifiy Images
  trigger:
    - platform: time
      at: '00:47:00'
  action:
  - service: shell_command.delete_unify_images
    data: {}

Täglich um 00:47 Uhr rufe ich den zuvor erstellten Shell-Command auf. Warum 00:47? Keine Ahnung! 🙂

Beziehungsweise ein klein wenig schon: Ich erstelle nachts ja auch täglich automatisch Backups. Und damit die Backups mit der Dateilöschung nicht kollidieren, habe ich eine „komische“ Uhrzeit gewählt. Das kannst/musst du für deinen Fall aber selbst entscheiden 😉

Daniel Romney hat die wesentlichen Grundlagen zu dem Shell-Command bereits im November 2021 kundgetan – ohne seine Code-Zeilen, würde ich mit Sicherheit selbst noch nach einer Lösung suchen! 😉

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um den hass.io Home Assistant.

1 Gedanke zu „Ältere Dateien in Home Assistant automatisch löschen“

  1. Mein Ziel ist es, ältere Backup-Dateien zu löschen, ohne eine weitere Erweiterung.

    Dazu habe ich folgenden Eintrag in der configuration.yaml:
    #zum löschen alter Backup Dateien
    shell_command:
    delete_backups: find /backup/*.tar -mtime +30 -exec rm -fr {} +

    meine die Automatisierung dazu:
    alias: Lösche alte Backup-Versionen
    description: Lösche alte Backup-Versionen, die älter als 30 Tage sind
    trigger:
    – platform: time
    at: ’11:30:00′
    condition: []
    action:
    – service: shell_command.delete_backups
    data: {}
    mode: single

    Leider funktioniert das nicht, es kommt ein Fehler in der LOG-Datei und es wird nichts gelöscht:
    Error running command: `find /backup/*.tar -mtime +10 -exec rm -fr {} +`, return code: 1

    Habe dann versucht, im Terminal den Shell-Befehl Schrit für Schritt durchprobieren, zack – jetzt sind alle *.tar Dateien weg.

    Hat jemand eine Idee, woran es liegen könnte, bzw. wie der Shell Befehl richtig wäre?

    Antworten

Schreibe einen Kommentar