HA Backup Monitor

PBS und Synology Hyper Backup auf einen Blick: Ein Python-Skript auf der Synology fragt beide APIs ab und publiziert den Status via MQTT an Home Assistant.

Wer mehrere Backup-Schichten betreibt, kennt das Problem: Man muss sich in PBS, DSM und andere Oberflächen einloggen, um zu prüfen ob die nächtlichen Backups erfolgreich durchgelaufen sind. Der HA Backup Monitor löst das — alle Jobs auf einen Blick direkt in Home Assistant.

HA Backup Monitor Karte in Home Assistant — Tabelle mit PBS- und Hyper-Backup-Jobs
Die fertige Karte in Home Assistant: PBS-VMs und Hyper-Backup-Jobs auf einen Blick

Zwei Backup-Schichten, eine Übersicht

Die Heiminfrastruktur sichert sich auf zwei unabhängigen Wegen:

SchichtToolWas wird gesichertZiel
VM-BackupsProxmox Backup Server (PBS)VMs und Container (~120 GB)Synology NAS
NAS-BackupsSynology Hyper BackupNAS-DatenHetzner B2 / Synology C2

Bisher: manuelle Kontrolle durch Einloggen in PBS-Weboberfläche oder DSM. Jetzt: ein MQTT-Topic, eine HA-Karte, fertig.

Architektur

Ein Python-Skript läuft stündlich via DSM Task Scheduler auf der Synology. Es fragt beide APIs ab, baut eine HTML-Tabelle und publiziert alles als einzigen JSON-Payload an MQTT:

Synology NAS
  ├── DSM WebAPI (localhost:5000)   → Hyper Backup Tasks + Versionen + Größen
  └── PBS Docker (localhost:8007)   → Backup-Tasks + Snapshot-Größen
        └── Python-Skript (stündlich)
              └── paho-mqtt → Mosquitto in HA
                    └── sensor.backup_status → Template-Sensoren → Lovelace-Karte

Die Karte in Home Assistant besteht nur aus einem Markdown-Block:

type: markdown
content: "{ state_attr('sensor.backup_status', 'table') }"

Die HTML-Tabelle wird vollständig im Skript vorberechnet und als Attribut mitpubliziert — kein Jinja2-For-Loop, kein Markdown/HTML-Konflikt.

Technische Stolpersteine

PBS: Session-Auth statt API-Token

Der PBS-API-Token gibt auf dem Node-Endpoint einen 403 zurück wenn er von der Synology (localhost) aus aufgerufen wird. Session-Auth mit Username/Passwort funktioniert dagegen problemlos — und wird nur lokal verwendet, verlässt die Synology also nie.

share:rsync — API-Limitation

Hyper-Backup-Tasks vom Typ share:rsync liefern über die DSM WebAPI dauerhaft nur Minimal-Felder (timestamp, version_id) — kein Status, keine Dauer, keine Größe. Das ist eine Synology-API-Limitation, nicht behebbar ohne Job-Umbau. Diese Tasks werden als angezeigt und zählen nicht als Fehler.

Schriftgröße in der HA Markdown-Karte

Home Assistants Markdown-Karte entfernt alle style-Attribute (DOMPurify). font-size im <table style="..."> hat keine Wirkung. Lösung: verschachtelte <small>-Tags direkt im Zellinhalt — konfigurierbar über TABLE_SMALL_DEPTH im Skript (Standard: 2 Ebenen ≈ 69%, passt auf Mobile).

Status-Icons

IconBedeutung
Backup erfolgreich abgeschlossen
Backup fehlgeschlagen
Backup läuft gerade
Kein Status verfügbar (share:rsync — API-Limitation)

Konfiguration

Das Skript hat einen kompakten Konfigurationsblock oben:

DSM_USER  = "..."      # DSM-User mit Hyper-Backup-Lesezugriff
DSM_PASS  = "..."
PBS_USER  = "admin@pbs"
PBS_PASS  = "..."
PBS_NODE  = "..."      # Node-ID aus PBS-UI
MQTT_HOST = "..."      # Home-Assistant-IP
MQTT_USER = "..."
MQTT_PASS = "..."

LOOKBACK_DAYS    = 3   # wie viele Tage zurück PBS-Tasks suchen
DAILY_CUTOFF     = 7   # Hyper-Tasks: ignorieren wenn letzter Run älter als X Tage
TABLE_SMALL_DEPTH = 2  # Schriftgrösse: Anzahl <small>-Ebenen
DEBUG_FILE       = ""  # "" = kein Debug, sonst Pfad zur JSON-Datei

Der vollständige Code und die HA-Konfigurationsdateien sind auf GitHub verfügbar:

github.com/piep-projects/haBackupMonitor

Haftungsausschluss