Script-Time: Automatische Tasmota-Backups
Damit man es nie wieder vergisst ;-)
Neulich fielen mehrere meiner Tasmota Geräte aus. Und wie es in so einem Fall immer ist, bedauert man, keine Backups zu haben.
Das soll mir nicht noch einmal passieren. Also fix ein Tool gebastelt, das einmal im Monat aufgerufen wird.
Kurzer Test
So sollte es aussehen:
./check_tasmota_backups
Scanne Netzwerk nach Tasmota-Geräten...
🔍 Prüfe 192.168.1.42 auf Tasmota...
🚫 192.168.1.42 ist kein Tasmota-Gerät.
🔍 Prüfe 192.168.1.44 auf Tasmota...
🚫 192.168.1.44 ist kein Tasmota-Gerät.
🔍 Prüfe 192.168.1.80 auf Tasmota...
✅ Tasmota-Gerät gefunden: 192.168.1.80
🌐 Hostname gefunden: rolougwztuer.meister.world
📂 Backup erfolgreich: /mnt/Backups/tasmota_backups/tasmota_rolougwztuer.meister.world.dmp
🔍 Prüfe 192.168.1.81 auf Tasmota...
✅ Tasmota-Gerät gefunden: 192.168.1.81
🌐 Hostname gefunden: roloegbad.meister.world
📂 Backup erfolgreich: /mnt/Backups/tasmota_backups/tasmota_roloegbad.meister.world.dmp
🔍 Prüfe 192.168.1.82 auf Tasmota...
✅ Tasmota-Gerät gefunden: 192.168.1.82
🌐 Hostname gefunden: roloegtoilette.meister.world
📂 Backup erfolgreich: /mnt/Backups/tasmota_backups/tasmota_roloegtoilette.meister.world.dmp
🔍 Prüfe 192.168.1.83 auf Tasmota...
✅ Tasmota-Gerät gefunden: 192.168.1.83
🌐 Hostname gefunden: roloegku.meister.world
📂 Backup erfolgreich: /mnt/Backups/tasmota_backups/tasmota_roloegku.meister.world.dmp
...
Sieht gut aus. Nun kann es in die /etc/crontab
integriert werden.
Automatischer Start
Damit michael
jeden Monat um 8:30 die Backups anfertigt, füge ich der /etc/crontab
folgenden Eintrag hinzu:
30 8 1 * * michael nice -n 19 /usr/local/bin/check_tasmota_backups > /dev/null 2>&1
Jetzt sollte ich mich darum nicht mehr kümmern müssen 😀.
Voraussetzung
Damit das Script funktioniert, benötigt man nmap und decode-config. Python3 und curl ist in den meisten Linux-Distributionen bereits enthalten.
Das Script
#!/bin/bash
# Einstellungen
NETZWERK="192.168.1.0/24"
BACKUP_DIR="/mnt/Backups/tasmota_backups/tasmota_backups"
DECODE_SCRIPT="/opt/decode-config.py"
# Sicherstellen, dass das Backup-Verzeichnis existiert
mkdir -p "$BACKUP_DIR"
echo "Scanne Netzwerk nach Tasmota-Geräten..."
# Suche nach Geräten mit Port 80 offen
HOSTS=$(nmap -p 80 --open -oG - "$NETZWERK" | awk '/Up$/{print $2}')
if [[ -z "$HOSTS" ]]; then
echo "Keine Geräte mit Port 80 gefunden!"
exit 1
fi
# Backup der Tasmota-Geräte
for IP in $HOSTS; do
echo
echo "🔍 Prüfe $IP auf Tasmota..."
# Rufe die Webseite des Geräts ab und prüfe auf "Tasmota"
if curl -m 3 -s "http://$IP" | grep -qi "Tasmota"; then
echo "✅ Tasmota-Gerät gefunden: $IP"
# Hostnamen per DNS auflösen
HOSTNAME=$(nslookup "$IP" | awk -F'= ' '/name/ {print $2}' | sed 's/\.$//' )
# Falls kein Hostname gefunden wird, nutze die IP als Fallback
if [[ -z "$HOSTNAME" ]]; then
echo "⚠ Kein Hostname für $IP gefunden, verwende IP als Name."
HOSTNAME="$IP"
else
echo "🌐 Hostname gefunden: $HOSTNAME"
fi
BACKUP_FILE="$BACKUP_DIR/tasmota_${HOSTNAME}.dmp"
# Führe das Backup mit decode-config.py aus
python3 "$DECODE_SCRIPT" -t dmp -o "$BACKUP_FILE" -s "$IP" > /dev/null 2>&1
# Überprüfen, ob das Backup erfolgreich war
if [[ -s "$BACKUP_FILE" ]]; then
echo "📂 Backup erfolgreich: $BACKUP_FILE"
else
echo "⚠ Fehler: Kein gültiges Backup von $IP erhalten."
rm -f "$BACKUP_FILE"
fi
else
echo "🚫 $IP ist kein Tasmota-Gerät."
fi
done
echo "✅ Backup abgeschlossen. Dateien gespeichert in $BACKUP_DIR"
Fazit
Natürlich bemerkt man den Mangel erst, wenn es zu spät ist. Aber besser spät als nie. Diese Zeit hätte ich besser nutzen können...