Hallo,
aktuell verwende ich fhem auf einem rasp. pi 3.
Nun möchte ich ein automatiesiertes backup täglich erstellen welches ein backup im cloudspeicher bei box.com ablegt.
Hierfür habe ich das backup.sh script aus folgendem link verwendet:
http://www.meintechblog.de/2015/05/fhem-howto-automatisches-backup-auf-externem-nas/ (http://www.meintechblog.de/2015/05/fhem-howto-automatisches-backup-auf-externem-nas/)
Das script welches in ../../opt/fhem/FHEM/ agelegt ist sieht wie folgt aus:
#!/bin/bash
myTelnetPW="MEINPASS2"
mountIp="192.168.178.1"
mountDir="fritz.nas/Online-Speicher/FHEM_Backup"
mountUser="FHEMNAS"
mountPass="MEINPASS1"
mountSubDir="rpi/fhem"
localMountPoint="/Q/backup"
#optional
backupsMax="0"
localBackupDir="/backup"
pushoverUser=""
pushoverToken=""
###################################
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup info backup starting now"
if [ ! -e "$localBackupDir" ]
then
echo "$localBackupDir wird erstellt"
mkdir -p "$localBackupDir"
else
echo "$localBackupDir bereits vorhanden"
fi
tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" &>/dev/null
if ! ping -c 1 $mountIp
then
echo "$mountIp nicht erreichbar, stop"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "set FHEM.Backup error"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup info $mountIp not found"
exit
else
echo "$mountIp erreichbar"
fi
localIp=$(hostname -I|sed 's/\([0-9.]*\).*/\1/')
if [ ! -e "$localMountPoint" ]
then
echo "$localMountPoint wird erstellt"
mkdir -p "$localMountPoint"
else
echo "$localMountPoint bereits vorhanden"
fi
if [ "$(ls -A $localMountPoint)" ]
then
echo "$localMountPoint nicht leer, kein Mounten notwendig"
else
echo "$localMountPoint leer, Mounten starten"
vorhanden="0"
while read line
do
mountComplete="//$mountIp/$mountDir $localMountPoint cifs username=$mountUser,password=$mountPass,iocharset=utf8,sec=ntlm 0 0"
echo "mountComplete: $mountComplete"
if [ `echo "$line" | grep -c "$mountComplete"` != 0 ]
then
echo "/etc/fstab: Eintrag bereits vorhanden: $mountComplete"
vorhanden="1"
break
fi
done < "/etc/fstab"
if [ "$vorhanden" != "1" ]
then
echo "/etc/fstab: Eintrag wird ergänzt: $mountComplete"
echo "$mountComplete" >> "/etc/fstab"
fi
echo "Mounts werden aktualisiert"
mount -a
sleep 3
fi
if [ "$(ls -A $localMountPoint)" ]
then
if [ ! -e "$localMountPoint/$mountSubDir/$localIp" ]
then
mkdir -p "$localMountPoint/$mountSubDir/$localIp"
else
echo "$localMountPoint/$mountSubDir/$localIp existiert bereits"
fi
find "$localBackupDir" -name '*fhem_backup.tar.gz' | while read file
do
fileSize="0"
fileSizeMB=$(du -h $file)
fileSizeMB=${fileSizeMB%%M*}
filename=${file##*/}
echo "$filename ($fileSizeMB MB) wird in den Backupordner verschoben"
if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]]
then
curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=Backup mit $fileSizeMB MB wird erstellt" https://api.pushover.net/1/messages.json
fi
#mv "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
rm "$file"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "set FHEM.Backup off"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup backup $filename"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup backupMB $fileSizeMB"
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup info backup done"
done
else
echo "Mounten hat anscheinend nicht geklappt, skip."
exit
fi
#Löschen alter Backups
if [[ "$backupsMax" != "" && "$backupsMax" != "0" ]]
then
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup backupFilesMax $backupsMax"
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
backupsDelete=$(($backupsCurrent-$backupsMax))
if [ "$backupsDelete" -gt "0" ]
then
echo "$backupsCurrent Backups vorhanden - nur $backupsMax aktuelle Backups werden vorgehalten - $backupsDelete Backups werden gelöscht"
ls -d "/$localMountPoint/$mountSubDir/$localIp/"* | grep "_fhem_backup.tar.gz" | head -$backupsDelete | xargs rm
else
echo "$backupsCurrent Backups vorhanden - bis $backupsMax aktuelle Backups werden vorgehalten"
fi
else
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup backupFilesMax no limit"
fi
backupsCurrent=`ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"`
perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup backupFiles $backupsCurrent"
echo "Mount wieder unmounten"
umount "$localMountPoint"
Online box.com Speicher ist per Fritzbox eingebunden.
Wenn ich jetzt per ssh per sudo bash backup.sh ausführe erhalte ich folgende Meldung:
/backup bereits vorhanden
PING 192.168.178.1 (192.168.178.1) 56(84) bytes of data.
64 bytes from 192.168.178.1: icmp_seq=1 ttl=64 time=15.3 ms
--- 192.168.178.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 15.367/15.367/15.367/0.000 ms
192.168.178.1 erreichbar
/Q/backup bereits vorhanden
/Q/backup leer, Mounten starten
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
mountComplete: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
/etc/fstab: Eintrag bereits vorhanden: //192.168.178.1/fritz.nas/Online-Speicher/FHEM_Backup /Q/backup cifs username=FHEMNAS,password=MEINPASS1,iocharset=utf8,sec=ntlm 0 0
Mounts werden aktualisiert
Mounten hat anscheinend nicht geklappt, skip.
Wäre wirklich super wenn mir hier jemand weiterhelfen könnte. Vielen Dank.
Kamilo
OK habs. Hatte einen fehler in der fstab.
Würde nun aber weiter gerne meine alexa installation ins backup mit aufnehmen.
wie mache ich das? kann mir das jemand sagen? danke
Einfach in die Zeile tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" &>/dev/null
hinter /opt/fhem noch den Pfad zur Alexa-Installation eingeben.
muss dich dasmit einem leerzeichen anfügen oder einem bestimmten symbol
beispielpfad ../../opt/alexa-fhem
tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem /opt/alexa-fhem" &>/dev/null
Ich bitte nochmals kurz um Info. Kann mir jemand kurz konkret zu meinem Beispiel sagen wie ich dir Code Zeile erweitern muss. Vielen Dank
Gesendet von meinem SM-A310F mit Tapatalk
Hallo Kamilo,
Du hättest es auch einfach ausprobieren können. ;)
Es sollte eigentlich wie von Dir schon geschrieben funktionieren, wobei die Pfade, die Du sichern willst meines Wissens nach nicht unbedingt in Anführungszeichen gesetzt werden müssen, wenn sie keine Sonder- oder Leerzeichen enthalten.
Danke für die Info :)
Hallo,
perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup starting now"
das Backup funktioniert, jedoch fehlen mir im Dummy "FHEM.Backup" die Readings.
Meine vermutung geht dahin, das mein Telnet Port mit SSL und Passwort geschützt ist und somit ein Rückschreiben der Readings verhindert.
Kann SSL und das passwort in dem backup.sh Skript hinzugefügt werden?
Auch wenn es in diesem Thread off topic ist, könnte es prinzipiell so in der Art funktionieren, mit dem Passwort bin ich unsicher.
(echo password ; sleep 2 ; setreading trallala ; sleep 2) | openssl s_client -connect host:port
Völlig ungetestet und ob das letzte sleep heutzutage noch benötigt wird, habe ich auch nicht getestet, vor gefühlten 15 Jahren hätte openssl die Verbindung sonst zu früh geschlossen.
Einfacher wäre es aber einen zusätzlichen telnet Port zu öffnen, der nur Verbindungen von localhost zulässt und kein ssl und pwd verwendet.
Ich habe hier: http://s6z.de/cms/index.php/homeautomation/fhem/34-fhem-befehle-auf-der-shell-ausfuehren folgendes gefunden.
Nach dem Umstieg auf Raspberry Pi habe ich festgestellt, dass der Aufruf perl fhem.pl <Port> "<Befehl>" ohne Probleme funktioniert. Eine Passtowrtangabe ist bei lokalen Aufrufen nicht nötig, wenn das Password in fhem.cfg mit globalpassword (anstatt password) angegeben wird.
...
define tPort telnet 7072 global
attr tPort globalpassword <PASSWORD>
...
Grüße Jörg
Habs jetzt so gelöst.
Die Beckup.sh wurde um folgende Zeilen geändert:
mytelnetPW="Telnet Passwort"
perl /opt/fhem/fhem.pl 7072 $mytelnetPW "setreading FHEM.Backup info
dann klappt es!