meintechblog.de
31Mai/15224

FHEM HowTo – Automatisches Backup auf externem NAS

Wer laufend seine fhem.cfg verändert und dabei keine regelmäßigen Backups erstellt, läuft im Grunde ständig Gefahr die mühevoll zusammengestellte Konfiguration bei Problemen aufs Spiel zu setzen. Um diesen Umstand zu adressieren, wird nachfolgend eine Lösung vorgestellt, die sich selbstständig um regelmäßige Sicherungen von FHEM kümmert und das Backup gleich noch auf einem externen NAS speichert, um für noch mehr Sicherheit zu sorgen. Wie das funktioniert, wird in nachfolgender Anleitung Schritt für Schritt erklärt.

FHEM hat sich in den vergangen Jahren zu einer leistungsfähigen Smart-Home-Lösung entwickelt, die mittlerweile von einer großen Anzahl von Anwendern genutzt wird, die den Aufbau Ihres Connected Home selbst in die Hand nehmen möchten. Die Möglichkeiten verschiedenste Standards unter einem Dach zu vereinen, sind bereits vielfältig und entwickeln sich durch die lebendige Community täglich weiter. Jedoch gilt es erst einmal einige Hürden zu überwinden, um mit dem System dauerhaft glücklich zu sein.

Der (steinige) Weg zum zuverlässigen Dauerbetrieb

Als Hilfestellung bei der Ersteinrichtung von FHEM wurde auf den Tag genau vor zwei Jahren das HowTo FHEM-Server auf dem Raspberry Pi in einer Stunde einrichten veröffentlicht, das bereits vielen den Einstieg in die FHEM-Welt ermöglicht hat und mit monatlich im Schnitt über 10.000 Aufrufen seither unser erfolgreichste Blogpost ist.

Ist FHEM einmal installiert, ist gerade zu Beginn der Drang groß, eine Vielzahl von Gerätschaften anzulernen und die fhem.cfg mit eigenem Code zu füttern. Nicht nur beim wilden Herumprobieren und Austesten der Möglichkeiten kann es aber auch einmal vorkommen, dass das System plötzlich den Dienst verweigert, nicht mehr erreichbar ist und im schlimmsten Fall alle Daten im Nirvana landen. Um sich davor wirkungsvoll zu schützen, gilt es in regelmäßigen Abständen ein Backup des gesamten Systems zu erstellen, um im Fall der Fälle alle Informationen wieder zurückspielen zu können.

Das funktioniert "eigentlich" bereits mit der in FHEM integrierten Backupfunktion, welche im Blogpost FHEM-Server updaten beschrieben wird. "Eigentlich" deshalb, weil dabei die "fhem.cfg"und damit die wichtigste Datei überhaupt nur mit 0 Byte gesichert wird. Wie es mit etwas manuellem Einrichtungsaufwand dennoch klappt und wie das gesicherte Backup im selben Atemzug gleich noch auf einem im Netzwerk erreichbaren NAS gesichert werden kann, wird im Anschluss Schritt für Schritt erklärt.

Die Voraussetzungen für externe Backups

Nachfolgende Anleitung funktioniert reibungsfrei mit einer FHEM-Installation auf einem RPI (Affiliate-Link) und unter Ubuntu. Das lokal erstellte Backup landet dabei auf einem externen NAS, welches per CIFS gemountet wird. Das funktioniert gewöhnlich mit jedem NAS von QNAP (Affiliate-Link) und Synology (Affiliate-Link) standardmäßig und ohne jegliche Modifikation. Grundsätzlich sind natürlich auch andere Kombinationen und Freigabemethoden möglich, hier müssen dann aber evtl. Anpassungen an der nachfolgenden Anleitung vorgenommen werden. Vorab: Ich habe viel getestet und die nachfolgende Methode hat sich bei mir bisher als Einzige bewährt.

FHEM-Benutzer-Berechtigungen ändern

Für die Erstellung und den Transfer des zu erstellenden FHEM-Backups wird ein kleines bash-Script namens backup.sh genutzt, welches in FHEM eingebunden wird und später auch darüber getriggert werden kann,  um automatische und manuelle Backups anzustoßen. Damit aus FHEM heraus bash-Befehle mit der notwendigen Berechtigung ausgeführt werden können, muss jedoch erst einmal die Datei "/etc/sudoers" auf dem RPI bzw. unter Ubuntu angepasst werden.

Zu diesem Zweck erfolgt ein ssh-Login auf der FHEM-Installation per Terminal. An dieser Stelle muss natürlich jeder die IP-Adresse und den Benutzernamen (sofern notwendig) anpassen.

Als nächstes wird die Datei "/etc/sudoers" bearbeitet. Dies geschieht am besten nicht mit dem "nano"-Editor per "sudo nano /etc/sudoers", sondern über "visudo", da hier ein Prüfmechanismus eingebaut ist (Danke an Christian für den Hinweis):

Hier sucht man die Zeilen mit dem Inhalt:

# User privilege specification
%sudo ALL=(ALL:ALL) ALL

(unter Ubuntu lautet die Zeile: root ALL=(ALL:ALL) ALL)

und ergänzt direkt darunter den Inhalt:

Mit ctrl+o und Enter werden die Änderungen gespeichert und mit ctrl+x wird der Editor wieder verlassen.

Auf einem RPI sieht das Ganze dann so aus:

FHEM Anpassung etc sudoers_rpi

Unter Ubuntu so:

FHEM Anpassung etc sudoers_ubuntu

 

Update vom 02.06.2015: Wer dem fhem-User aus Sicherheitsgründen nur eigeschränkte Berechtigung geben möchte, nutzt stattdessen  "fhem ALL=(ALL) NOPASSWD:/opt/fhem/FHEM/backup.sh". Danke an Ronny für den Hinweis. Update Ende

Mit dieser Anpassung erhält der fhem-Benutzer nun die notwendige Berechtigung, die später benötigt wird, um aus FHEM heraus bash-Befehle auszuführen.

Damit die Änderungen aktiv werden, sollte ein Neustart ausgeführt werden.

Danach geht es nach erneutem ssh-Login im Terminal weiter...

Notwendiges Package "cifs-utils" installieren

Damit die künftig erstellten Backups per cifs-Freigabe auf dem NAS landen, muss das Paket "cifs-utils" auf dem FHEM-Server installiert werden, sofern es dort noch nicht vorhanden ist. Damit das auch dann klappt, wenn sich das System eventuell etwas dagegen sträubt, wird folgender Code genutzt:

Backup-Script backup.sh erstellen

Nun wird die später genutzte Datei namens "backup.sh" erzeugt und mit den notwendigen Berechtigungen zum Ausführen ausgestattet. Unter Ubuntu kann der letzte Teil ab "&& sudo chown -R fhem:root /opt/fhem/FHEM/backup.sh" einfach weggelassen werden.

Jetzt geht es in FHEM Oberfläche, in welcher die Datei mit dem notwendigen Backup-Code gefüttert wird. Dazu wird das Terminal verlassen und der Webbrowser zur Hand genommen. Die IP muss natürlich jeder selbst anpassen:

http://192.168.3.97:8083/fhem?cmd=style%20edit%20backup.sh

Nun wird der nachfolgende Backup-Code per Copy&Paste in den FHEM-Editor eingefügt:

Dabei muss jeder die Werte am Anfang des Scripts:

mountIp="192.168.3.10"
mountUser="admin"
mountPass="password"
mountDir="backup"
mountSubDir="rpi/fhem"

mit den Login-Daten des eigenen NAS anpassen. In diesem Beispiel wird vorausgesetzt, dass eine Freigabe namens "backup" auf dem NAS zur Verfügung steht, welche vom Benutzer "admin" per cifs (Windows Freigabe) zugegriffen werden kann.

Der Eintrag:

localMountPoint="/Q/backup"

ist das lokale Verzeichnis auf dem FHEM-System, welche auf die NAS-Freigabe verlinkt.

Wer eine Benachrichtigung per Pushover möchte, trägt seinen privaten Pushover-Benutzer und -Token einfach in den optionalen Parametern ein.

FHEM Backup Pushover Notifcation iPhone 6

Sind alle Anpassungen an der Datei "backup.sh" vorgenommen, kann diese in FHEM mit dem Button "Save backup.sh" (links oben) abgespeichert werden.

fhem.cfg anpassen

Zum Schluss wird noch ein kurzer Code in die fhem.cfg eingetragen, damit über den Dummy namens "FHEM.Backup" die Erstellung des Backups manuell über das FHEM-Interface gestartet werden kann.

FHEM Backup Dummy

Die letzte Zeile bewirkt dann schließlich, dass jeden morgen um sechs Uhr automatisch ein Backup angestoßen wird.

Durch die letzten Codezeilen des backup.sh-Scripts erhält der Dummy "FHEM.Backup" neben einem Statusupdate auch gleich noch einige Readings verpasst. Dazu gehören die Readings "filename", welches Auskunft über den erzeugten Backup-Dateinamen gibt und "backupMB", das die Größe des erzeugten Backups in MB ausgibt.

FHEM Backup Dummy Readings

Ist die "fhem.cfg" angepasst, ist ein Neustart von FHEM sinnvoll, der über den FHEM-Kommandozeilenbefehl "shutdown restart" (ohne Anführungszeichen) ausgeführt werden kann. FHEM ist dann nach einigen Sekunden wieder erreichbar.

Ab sofort sollten neue Backups automatisch auf dem gemounteten NAS landen, sobald der Dummy getriggert wird (entweder manuell oder aufgrund der täglichen Ausführung um 06:00 Uhr morgens). Bei obiger Konfiguration landen die Backupdateien dann im QNAP-Ordner "/Backup/rpi/fhem/192.168.3.97/".

FHEM Backup auf QNAP NAS

Wer Probleme hat und den Backup-Befehl manuell testen möchte, kann dies über nachfolgenden Terminalbefehl auf dem eingeloggten FHEM-Server:

Hier werden dann auch etwaige Status- bzw. Fehlermeldungen direkt vom Script in der Terminalzeile ausgegeben.

Update vom 27.01.1016: Da Felix berechtigterweise gefragt hat, wie er sein Backup wieder zurückspielen kann, werden die dafür notwendigen Schritte nachfolgend ergänzt:

Backup zurückspielen

Sofern man das erstellte Backup zurückspielen möchte, wird erneut ein Grundsystem auf dem RPI inkl. FHEM installiert, wie im Artikel FHEM-Server auf dem Raspberry Pi in einer Stunde einrichten erläutert.

Im Anschluss müssen wieder alle notwendigen Pakete, die bisher installiert wurden, per Terminal auf dem nun neuen System nachinstalliert werden. Also am besten direkt immer alles dokumentieren, was zusätzlich per Terminal installiert wird.

FHEM wird dann per Terminalbefehl gestoppt:

Dann wird das das Backupfile (hier: 160126_060205_fhem_backup.tar.gz) auf den RPI übertragen, z.B. in den Ordner "/tmp". Das funktioniert recht einfach bspw. per Filezilla, wobei die Verbindungsmethode SFTP (mit den SSH-Logindaten) für die Anmeldung genutzt werden kann.

Der Terminalbefehl für das Zurücksetzen (Entpacken der Backups) lautet dann:

Sofern es keine Fehler gab, kann das System durch ein abschließendes

neugestartet werden.

Aus meinem täglichen Leben

Gerade wenn man mit dem Terminal noch nicht so vertraut ist, gestaltet sich die oben beschriebene Vorgehensweise eventuell als etwas frickelig, einmal ordnungsgemäß eingerichtet, sollte man damit aber keine Probleme mehr haben. Dann wird immer automatisch ein brauchbares Backup der FHEM-Installation erstellt, welches im Bedarfsfall zurückgespielt werden kann, wie es im Artikel FHEM-Server updaten beschrieben wird. Auch zeigt die Vorgehensweise recht anschaulich, wie man über FHEM eigene bash-Scripte ausführen kann und aus dem Script heraus Parameter (state, readings) mit den entsprechenden Befehlen (z.B. perl /opt/fhem/fhem.pl 7072 "set FHEM.Backup off") zurück in FHEM schreiben kann. Dadurch eröffnen sich noch mehr Möglichkeiten, um eigene Ideen umsetzen zu können und das Smart Home noch ein Stückchen schlauer zu machen.

Wer beitragen kann obigen Code zu verbessern, darf seine Vorschläge gerne per Kommentar mitteilen. Mein Coding hat sich zwar die letzten Monate wieder etwas verbessert, perfekt ist es aber noch lange nicht.

Affiliate-Links

FHEM-Einsteiger? Unser E-Book hilft dir weiter. NEU: Teil 2 ist verfügbar!

Verpasse keine Inhalte mehr! Trag dich in unseren Newsletter ein und folge meintechblog auf Facebook oder Twitter.

Share Button
Jörg

Jörg

hat meintechblog.de ins Leben gerufen, um seine Technikbegeisterung und Erkenntnisse zu teilen. Er veröffentlicht regelmäßig Howtos in den Bereichen Smart Home und Home Entertainment. Mehr Infos
Jörg
Kommentare (224)
  1. Hallo Jörg,

    das ist eine Super Anleitung, die du uns hier zur Verfügung gestellt hast.
    Ich werde mal versuchen diese auf meinem Cubietruck umzusetzen.
    Sobald ich weitere Fragen habe, melde ich mich dann...
    Danke

    • Hoffe es klappt bei dir gleich auf Anhieb.
      Über eine Rückmeldung würde ich mich sehr freuen.

      Grüße
      Jörg

      PS: Ich hab den Code in der Zwischenzeit noch etwas angepasst, damit das Script automatisch stoppt sofern das NAS einmal nicht erreichbar ist.

    • Hab den Code nochmal etwas angepasst und die Reihenfolge einiger Abfragen angepasst, so dass das Script jetzt neue Sicherungen im lokalen Backup-Verzeichnis /backup auch dann erzeugt, wenn das NAS nicht im Netzwerk erreichbar ist (z.B. ausgeschaltet) und dann beim nächsten Backup-Durchlauf alle noch nicht übertragenen Sicherungen "nachträglich" mit auf das NAS schiebt, sobald es wieder erreichbar ist.
      Denke ich werde dem Dummy FHEM.Backup dann noch ein entsprechendes Reading verpassen, so dass man direkt in FHEM kontrollieren kann, ob die Sicherung auf das NAS übertragen werden konnte oder nicht.

    • Done... Das Reading "info" gibt jetzt Auskunft darüber, ob das Script gestartet wurde ("backup starting now"), ob das NAS unerreichbar ist ("192.168.3.10 not found") und ob alles ordnungsgemäß durchgelaufen ist ("backup done"). Wenn das NAS nicht erreichbar ist, erhält der Dummy "FHEM.Backup" zudem den Wert "error" verpasst.

  2. Hallo Jörg,
    meine FHEM Backups enthalten sowohl eine 0 Byte große ./fhem.cfg als auch eine 'normal große' fhem.cfg.

    Gruß,
    Stefan

    • Hi Stefan,
      je nach System-"Untergrund" funktioniert es bei mir auch, jedoch hatte ich gerade auf einem RPI mit wheezy laufend das Problem, dass die in FHEM integrierte Backup-Funktion die fhem.cfg-Datei nicht zuverlässig gesichert hatte, was ich leider erst gemerkt hatte, als ich auf das Backup angewiesen war.
      Nach kurzem Fluchen habe ich dann die hier vorgestellte Vorgehensweise erarbeitet, die bis jetzt auf jedem meiner Systeme - auch unter wheezy - bestens funktioniert.

      Grüße
      Jörg

  3. Hi Jörg, sehr cool, ich arbeite gerade die Anleitung ab.. dabei fiel mir auf, dass bei meinem FHEM auf einem Cubie die .sh Datei erst gespeichert werden konnte, nachdem ich
    sudo chown -R fhem:root /opt/fhem/FHEM/backup.sh
    ausgeführt hatte.
    Ich habe die Berechtigungen in Linux noch nicht wirklich verinnerlicht, glaube aber, dass man fhem ALL=(ALL) NOPASSWD: ALL eventuell noch auf das tatsächlich Auszuführende begrenzen sollte, oder nicht?

    Gruß
    Ronny

    • Hi Ronny,
      danke für die Rückmeldung. Ich habe leider keinen Cubietruck zum Testen, werde mein Howto aber gleich mal mit einem "frischen" RPI-Image testen und sehen, ob ich auf die das selbe Problem stoße.
      Mit Berechtigungen in Linux habe ich mich ehrlich gesagt auch noch nicht wirklich im Detail auseinandergesetzt. War erstmal froh, dass es mit dem Code lauffähig war. Hast du einen Vorschlag, wie man das "tatsächlich Auszuführende" sinnvoll begrenzen sollte?

      Grüße
      Jörg

    • Hey Jörg,

      bei mir funktioniert es jetzt einwandfrei mit:

      fhem ALL=(ALL) NOPASSWD:/opt/fhem/FHEM/backup.sh

      Dadurch sollte der fhem User nur das Script ausführen dürfen.

      Einzig, dass der Log jetzt etwas zugemüllt wird, ist noch ein kleiner Schönheitsfehler. Zumindest bei mir werden dort hunderte von fhem Dateien aufgelistet - also alles, was die Konsole sonst anzeigt.

    • Zu meiner letzten Satz: Ich experimentiere gerade mit

      tar -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" &>/dev/null

      Scheinbar funktioniert das - es werden die Dateien nicht mehr aufgelistet im Log. Für mich nun ideal, auch durch deine neue Löschmöglichkeit!

    • &>/dev/null

      funzt bei mir auch !!! sieht nun wieder schick aus - Danke

    • Danke Ronny,
      habe die Infos im Blogpost ergänzt.

  4. Ich weiß nicht, ob es am Cubietruck liegt - ich stolpere über mehrere Fehlermeldungen.
    Ich habe ein QNAP NAS samt Freigabe Backup für den User backup. Die Unterverzeichnisse Cubie/fhem habe ich erstellt.
    Hast du evtl. eine Idee?

    ~$ sudo /opt/fhem/FHEM/backup.sh
    E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
    curl: (7) couldn't connect to host
    NAS erreichbar
    cut: the delimiter must be a single character
    Try cut --help' for more information.
    /backup bereits vorhanden
    tar: Removing leading
    /' from member names
    /opt/fhem/
    /opt/fhem/demolog/
    /opt/fhem/demolog/garden.log
    /opt/fhem/demolog/LightScenes.save
    /opt/fhem/demolog/layout
    /opt/fhem/demolog/pictures-copyright.txt
    /opt/fhem/demolog/eventTypes.txt
    /opt/fhem/demolog/fhem.save
    /opt/fhem/demolog/predicted.log
    /opt/fhem/demolog/LightScenes.dd.save
    /opt/fhem/demolog/cellar.log
    /opt/fhem/demolog/dewpoint.log
    /opt/fhem/backup/
    ....
    /opt/fhem/contrib/ks300avg.pl
    /opt/fhem/contrib/97_GROUP.pm
    /opt/fhem/configDB.pm
    /Q/backup wird erstellt
    /Q/backup leer, Mounten starten
    mountComplete: //NAS/Backup /Q/backup cifs username=backup,password=*************,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //NAS/Backup /Q/backup cifs username=backup,password=*************,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag wird ergänzt: //NAS/Backup /Q/backup cifs username=backup,password=**************,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    mount: wrong fs type, bad option, bad superblock on //NAS/Backup,
    missing codepage or helper program, or other error
    (for several filesystems (e.g. nfs, cifs) you might
    need a /sbin/mount. helper program)
    In some cases useful info is found in syslog - try
    dmesg | tail or so

    Mounten hat anscheinend nicht geklappt, skip.

    • So,
      habe den Blogpost dank deines Hinweises mit der Berechtigung "sudo chown -R fhem:root /opt/fhem/FHEM/backup.sh" angepasst. Vielen Dank nochmal! Auch habe ich den Code der "backup.sh" modifiziert, so dass die Fehlermeldungen hoffentlich auch bei dir verschwinden sollten. Im Detail habe ich noch die Zeile "sudo dpkg --configure -a" eingefügt, da im deinem Fall wohl das notwendige Package "cifs-utils" nicht installiert werden konnte, die Abfrage verändert, ob das NAS im Netzwerk erreichbar ist "if ! ping -c 1 $mountIp" und die Ermittlung der eigenen IP-Adresse "localIp=$(ip a s|sed -ne '/127.0.0.1/!{s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p}')".

      Grüße und viel Erfolg damit
      Jörg

  5. Hey Jörg, danke für die schnelle Anpassung des Scripts - ich habe es gleich getestet. Irgendwo hakt es leider immer noch - kannst du da etwas erkennen?
    Evtl. hat moonsorrox das Script auf seinem Cubietruck schon getestet?

    ~$ sudo /opt/fhem/FHEM/backup.sh
    dpkg: dependency problems prevent configuration of locales:
    locales depends on libc-bin (>> 2.19); however:
    Version of libc-bin on system is 2.13-38+deb7u8.

    dpkg: error processing locales (--configure):
    dependency problems - leaving unconfigured
    Errors were encountered while processing:
    locales
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    You might want to run 'apt-get -f install' to correct these:
    The following packages have unmet dependencies:
    cifs-utils : Depends: libwbclient0 (>= 2:4.0.3+dfsg1) but 2:3.6.6-6+deb7u5 is to be installed
    locales : Depends: libc-bin (> 2.19) but 2.13-38+deb7u8 is to be installed
    E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
    /backup bereits vorhanden
    tar: Removing leading `/' from member names
    /opt/fhem/
    /opt/fhem/demolog/
    ...
    /opt/fhem/contrib/97_GROUP.pm
    /opt/fhem/configDB.pm
    PING NAS.fritz.box (192.168.2.2) 56(84) bytes of data.
    64 bytes from NAS.fritz.box (192.168.2.2): icmp_req=1 ttl=64 time=5.02 ms

    --- NAS.fritz.box ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 5.024/5.024/5.024/0.000 ms
    NAS erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //NAS/Backup /Q/backup cifs username=backup,password=****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //NAS/Backup /Q/backup cifs username=backup,password=****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //NAS/Backup /Q/backup cifs username=backup,password=****,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag bereits vorhanden: //NAS/Backup /Q/backup cifs username=backup,password=****,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    mount: wrong fs type, bad option, bad superblock on //NAS/Backup,
    missing codepage or helper program, or other error
    (for several filesystems (e.g. nfs, cifs) you might
    need a /sbin/mount. helper program)
    In some cases useful info is found in syslog - try
    dmesg | tail or so

    Mounten hat anscheinend nicht geklappt, skip.

  6. OK, ich habe mal das gemacht, was in der Konsole empfohlen wird:
    apt-get -f install
    Der erste Scriptstart danach hat dann zwar ein wenig gedauert, aber es tauchen nun keine Fehlermeldungen mehr auf!

    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //NAS/Backup /Q/backup cifs username=backup,password=****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //NAS/Backup /Q/backup cifs username=backup,password=****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //NAS/Backup /Q/backup cifs username=backup,password=****,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag bereits vorhanden: //NAS/Backup /Q/backup cifs username=backup,password=****,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    150531_185720_fhem_backup.tar.gz (215 MB) wird in den Backupordner verschoben
    150531_185351_fhem_backup.tar.gz (215 MB) wird in den Backupordner verschoben
    150531_211556_fhem_backup.tar.gz (215 MB) wird in den Backupordner verschoben

    Q ist (scheinbar) korrekt gemountet. Allerdings wird der Inhalt auf dem NAS nicht erstellt, d.h. der Ordner ist leer.

  7. Ich hoffe, ich spamme den guten Beitrag nicht all zu sehr zu...
    In der Konsole kann ich erkennen, dass in dem gemounteten Q die Files liegen:

    /Q/backup/cubie/fhem/192.168.2.10$ ls
    150531_185351_fhem_backup.tar.gz 150531_205905_fhem_backup.tar.gz
    150531_185720_fhem_backup.tar.gz 150531_211556_fhem_backup.tar.gz
    150531_203518_fhem_backup.tar.gz

    Da wird also eine IP verwendet. Diese wird mir im Windows Explorer allerdings nicht angezeigt. Wenn ich die direkt per Adresseingabe aufrufe, erscheinen die Backups.
    Also an sich funktioniert dann alles wunderbar! Aber aus welchem Grund wird das weitere Unterverzeichnis ($localIp) angelegt?

    Danke nochmal, Jörg, dass du hier allen dein Script zur Verfügung stellst!

    • Hi Ronny,
      ich habe den Blogpost nochmals angepasst und die notwendigen Schritte aus dem eigentlichen Script in den vorgelagerten Gliederungspunkt "Notwendiges Package "cifs-utils" installieren" ausgegliedert und entsprechend erweitert, so dass es universell (Ubuntu, RPI, Cubie) funktionieren sollte.
      Ich sichere mehrere FHEM-Server und durch "$localIp" landen die Sicherungen automatisch in separaten Unterordnern entsprechend den zugewiesenen IP-Adressen der FHEM-Server, was dann für Übersichtlichkeit sorgt.
      Wenn der Unterordner in deinem Fall nicht im Explorer angezeigt wird, liegt das evtl. an fehlenden Zugriffsrechten. Ich bin echt nicht der Zugriffsrechts-Profi und Linux-Experten werden sicherlich jaulend aufschreien, aber mit
      sudo chmod 777 -R /Q/backup/cubie/fhem
      sollte der Ordner auftauchen, da mit dem Befehl einfach jeder User Zugriff auf den Ordner und dessen Unterordner erhält.

      Grüße
      Jörg

      PS: Freut mich, dass es nach einigen Startschwierigkeiten jetzt auch bei dir klappt! Von deinem Input profitieren sicher auch andere Anwender!

  8. Hi @all,
    Das sieht richtig gut aus *freu ,werde ich die Tage einbauen und testen :-) danke !
    Wenn ich es richtig verstanden habe ,so sichert das Script täglich , das würde heißen es werden mitunter recht viele Sicherungen !
    Gibt es eine Möglichkeit ,eine Anzahl an Sicherungen im Script zu hinterlegen , z.b. 14 und dann wird ab der 15. Sicherung einfach die erste überschrieben ?
    So wäre das Fileaufkommen auf dem NAS kalkulierbarer ....

    • Hi Aladin,
      das hast du richtig verstanden. Dein Vorschlag mit dem Vorhalten nur einer bestimmten Anzahl aktueller Backups hat mir gut gefallen, so dass ich ihn spontan mal umgesetzt habe. In obigem Code kann nun der Parameter
      BackupsMax="0"
      angepasst werden. Wenn der Wert bspw. auf 10 gesetzt wird, werden automatisch alte Backups gelöscht, sofern im Ordner mehr als 10 Backup-Dateien vorhanden sind. Verbleibt der Wert auf 0 oder wird nicht gesetzt (BackupsMax=""), werden weiterhin beliebig viele Backups archiviert.
      Wer den Code selbst anpassen möchte, sollte äußerst vorsichtig damit umgehen, da gerade bei automatisierten Löschvorgängen jede Menge schief gehen kann und man im schlimmsten Fall alle Daten röstet. Da spreche ich aus eigener Erfahrung… ;)

      Grüße
      Jörg

    • @Jörg ,

      perfekt ! Vielen Dank :-)

  9. Danke Jörg........funktioniert perfekt auf meiner Zbox mit Ubuntu und einem Synology Nas!
    LG

  10. @Aladin212
    Auf einem Synology Nas kann mann im Aufgabenplaner folgendes Skript anlegen, welches dann Datein automatisch löscht, die älter als 7 Tage sind.
    find /PFAD/ZUM/VERZEICHNIS -atime +7 -type f -delete

    wobei -attime +7 für Dateien die älter sind als 7 Tage steht!
    Das ganze sollte sich bei Qnap auch umsetzen lassen.........

    Vie Erfolg

    LG

  11. @Marco, danke für Deine Antwort !
    Aufgabenplaner ? Im NAS ? Bei Knapp ist das ,glaub ich , die Crontab - wobei ich die noch nicht bearbeitet habe ....
    Aber ich versuche es mal in dieser Richtung , Danke !

  12. Hallo,

    der Befehl

    mv "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"

    erzeugt eine Fehlermeldung obwohl die Dateien verschoben werden, da mv versucht die Berechtigungen aus der Quelle zu setzen und das auf dem NAS nicht funktioniert.

    ich habe das etwas umgeschrieben:

    cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename" && rm "$file"

    damit läuft das script fehlerfrei durch.

    • Danke für den Hinweis. Denke deine Anpassung ist sinnvoll, habe obiges Script deshalb entsprechend angepasst.

      Grüße
      Jörg

  13. Also mein FHEM backup heißt git.
    Man sollte natürlich ein externes repository haben und regelmäßiges commit und push nicht vergessen.

  14. So , ich habe nun mal versucht einzubauen - sorry bekomme ich aber nicht hin :-(
    Wenn er das automatische Backup ausführt bekomme ich im Logfile :
    sudo: no tty present and no askpass program specified
    2015.06.01 16:42:03 3: FHEMBackupOn return value: -1

  15. Vielen Dank für die super Anleitung. Das Backup läuft bei mir, aber die Datei landet nicht auf meinem NAS (Synology) und ich finde sie auch auf dem RPI im backup-Verzeichnis nicht wieder. Wo könnte der Fehler liegen?
    Im logfile in FHEM steht:

    PING 192.168.178.37 (192.168.178.37) 56(84) bytes of data.
    64 bytes from 192.168.178.37: icmp_req=1 ttl=64 time=1.93 ms
    --- 192.168.178.37 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 1.938/1.938/1.938/0.000 ms
    192.168.178.37 erreichbar
    /Q/backup wird erstellt
    /Q/backup leer, Mounten starten
    mountComplete: //192.168.178.37/backup /Q/backup cifs username=admin,password=*****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.37/backup /Q/backup cifs username=admin,password=*****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.37/backup /Q/backup cifs username=admin,password=*****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.37/backup /Q/backup cifs username=admin,password=*****,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag wird ergänzt: //192.168.178.37/backup /Q/backup cifs
    username=admin,password=*****,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    Mounten hat anscheinend nicht geklappt, skip.

    Herzlichen Dank für jede Hilfe
    Martin

    • Hey Martin,

      mit ziemlicher Sicherheit liegt es an dem fehlenden oder falschen sudoers Eintrag. Schau mal oben.

    • Sorry, mein Kommentar galt Aladin212s Problem.

    • Danke , hatte es zwar richtig in die sudoers eingetragen , aber ich Depp hab keinen Neustart gemacht :-)
      Im Log das :
      sudo: no tty present and no askpass program specified
      ist nun weg :-)

    • Danke für den Hinweis mit dem Neustart. Dieser war bei mir zwar nicht notwendig (Ubuntu), hab es im Blogpost aber mal vermerkt, kann ja nicht schaden.

  16. Hallo Dabblo_LH,

    leg mal eine datei oder einen Ordner in dem Verzeichnis welches gemountet wird.

    hatte am Anfang auch das Problem, solang der Ordner leer war, wurde kein backup durchgeführt.

    • Das Problem hatte ich auch !
      Es musste etwas im Ordner sein , danke für diesen Tip !!!

    • Ok komisch,
      ich hatte das Problem nicht. Weiss spontan leider auch nicht wirklich, wie man das Problem gleich im Kern ersticken könnte, da es bei mir nicht auftritt.. Bin für jeden Hinweis dankbar, um den Code überarbeiten zu können.

      Grüße
      Jörg

    • @all
      Hat mich einiges an Zeit mit vielen Fehlversuchen gekostet bis ich hier runter gelesen hatte.
      Nachdem ich eine Datei in das Verzeichnis gelegt hatte funktionierte es einwandfrei. Wieso das so ist habe ich noch nicht herausgefunden.
      Danke für den Tip Aladin212.
      Ich sichere FHEM auf RPI2 nach Synology 211j.

  17. Hallo Jörg,

    was mir noch aufgefallen ist:

    sudo apt-get update && sudo dpkg --configure -a && apt-get -f install && sudo apt-get -y install cifs-utils

    fehlt nach dem zweiten && nicht ein sudo ?

    sudo apt-get update && sudo dpkg --configure -a && sudo apt-get -f install && sudo apt-get -y install cifs-utils

    musste das bei mir mit einbauen sonst kam beim installieren ein Fehler.
    hab dann jeden Befehl einzeln ausgeführt bis ich drauf kam ...

  18. Hallo Jörg,

    super! Aber:
    - ich möchte nicht in das backup.sh das admin-Passwort meines NAS reinschreiben, daher habe ich einen extra Nutzer auf meinem Synology-NAS angelegt, der sonst keine Rechte hat
    - das manuelle testen auf meinem Raspberry geht mit "sudo sh backup.sh"
    - es kommt nach dem Anlegen des Eintrags in /etc/fstab eine Fehlermeldung, da das "-e" bei mir mit in der fstab landete, dort sah die neue Zeile so aus: "-e //192.168. ..."; nach dem manuellen Entfernen des "-e " ging das mounten problemlos
    - die Backup-Files werden korrekt vom Raspi auf das NAS kopiert, aber es kommen noch zwei Fehlermeldungen "[[: not found":
    ---
    150602_003627_fhem_backup.tar.gz (667 MB) wird in den Backupordner verschoben
    backup.sh: 91: backup.sh: [[: not found
    backup.sh: 109: backup.sh: [[: not found

    • uff ... 667 MB ?
      Das ist aber heftig groß ! Du sicherst damit nur Fhem ?

      gruß

      Aladin212

    • Ja, ich habe auch bislang schon fhem per "backup" lokal gesichert. Nun hat das neue Script auch diese lokalen backups der letzten zwei Monate mit eingepackt. Ist ja gut, nun liegt alles sicher auf dem NAS und ich kann den Speicher des Raspi wieder freigeben.

    • Guter Hinweis, den ich in obigem Code jetzt auch umgesetzt habe.
      Man kann recht einfach nicht benötigte Verzeichnisse und Dateien ausklammern, die dann nicht gesichert werden.
      Bspw. kann man so das FHEM-interne Backupverzeichnis "/opt/fhem/backup" weglassen.

      Die Zeile

      tar -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem"

      lautet dann

      tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem"

      Wer noch mehr Verzeichnisse ausklammern möchte, kann dies einfach weiterführen, also z.B.

      tar --exclude=backup --exclude=demolog --exclude=log -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem"

      Grüße
      Jörg

    • Hi Hermann,
      danke für die Hinweise.

      Den "Fehler" mit der /etc/fstab hatte ich nicht, habe den Code aber mal angepasst (-e entfernt, da man den Parameter eigentlich gar nicht benötigt), so dass es jetzt besser klappen sollte.
      Dein Problem mit "[[: not found" kann ich leider nicht ganz nachvollziehen, anscheinend wird die Syntax der beiden betreffenden if-Abfragen nicht korrekt erkannt. Wie man das Problem löst, weiss ich spontan leider nicht, da es bei mir klappt und eigentlich auch so passen sollte. Da fehlt mir wohl das notwendige Hintergrundwissen.
      Welches System bzw. Plattform setzt du eigentlich als FHEM-Server ein?

      Grüße
      Jörg

    • Ich habe fhem auf dem Raspi 2 am Laufen (habe auch eine Kopie von fhem direkt auf dem Synology NAS, aber das tut hier nichts zur Sache und dient mir eher zum Testen).

    • Ok, nutzt du dann auch Wheezy, wie es im Blogpost FHEM-Server auf dem Raspberry Pi in einer Stunde einrichten beschreiben ist oder verwendest du eine andere Sofwarebasis?

    • Ja, wheezy. Habe es zwar damals nicht nach dieser Anleitung installiert, aber doch sehr ähnlich.

      Ich habe auch noch das Problem, dass die Readings von FHEM.Backup nicht gesetzt werden. Das Backup lief heute morgen um 6:00 problemlos durch. Das Reading steht auf "on" mit Zeitstempel 6:00, sonst kein Eintrag.

  19. Kurze Rückmeldung von mir, ich habe das Script getestet und es hat alles funktioniert.
    Hier mal die Meldungen die ich bekommen habe.

    root@cubie:~# /opt/fhem/FHEM/backup.sh
    /backup bereits vorhanden
    PING 10.0.0.44 (10.0.0.44) 56(84) bytes of data.
    64 bytes from 10.0.0.44: icmp_req=1 ttl=64 time=0.206 ms

    --- 10.0.0.44 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.206/0.206/0.206/0.000 ms
    10.0.0.44 erreichbar
    /Q/Sicherung bereits vorhanden
    /Q/Sicherung nicht leer, kein Mounten notwendig
    /Q/Sicherung/BackupFHEM_IP52/opt/fhem/10.0.0.52 existiert bereits
    150602_143804_fhem_backup.tar.gz (115 MB) wird in den Backupordner verschoben

    Mein System war ein Testsystem mit Debian wheezy.
    Ich setze grad ein neues auf mit jessie und werde es dann noch einmal probieren.
    Was bei mir nicht funktionierte war ein Update über Fhem, ich habe es nur auf der Terminal Ebene manuell gemacht.

    1x hatte ich ein Update gemacht da hat er mir zwei Dateien erstellt, warum auch immer und diese waren dann beschädigt...

    Muss das Update zwingend ein cifs sein, es geht doch auch nfs..!?

    Schön wäre es wenn es ein weiteres Script geben würde, welches das Backup wieder zurück spielt ;-))
    Evtl. ist hier jemand dieser Sache mächtig und kann das...! Dann braucht man es nicht per Hand machen, aber ist nicht unbedingt notwendig, war nur so ein Einfall.

    Vielen Dank

    • Hi,
      danke für die Rückmeldung.
      Was genau meinst du mit Update über FHEM? Also das Starten des Backups per "FHEM_Backup"-Dummy? Falls das nicht klappt, liegt das wohl an fehlenden Rechten des FHEM-Users und infolgedessen an einer falsch konfigurierten "/etc/sudoers". (Evtl. hilft auch einfach ein einfacher Systemneustart, sofern die Datei korrekt erweitert wurde…)
      Das NAS kann natürlich auch per nfs oder afp oder was auch immer gemountet werden, klar.
      Ein Zurückspielen des Backups per Script wäre in der Tat mehr als interessant. Wenn ich Zeit finde und ausgiebig testen kann, wird ein entsprechender Blogpost folgen.

      Grüße
      Jörg

  20. Hallo GrayDeath,
    herzlichen Dank für Deinen Tip, dass der Backup-Ordner nicht leer sein darf. Jetzt läuft alles perfekt.
    Viele Grüße
    Martin

    • kein Problem, gerne doch ;)

      hab auch lange gesucht und Fehlermeldungen studiert bis ich es raus hatte ...

      das ist das erste How-To mit "kleinen" Fehlern aber so langsam haben wir sie alle gefunden (und auch gemacht :) )

    • Je nach System muss der Code nunmal etwas angepasst bzw. verändert werden, damit er auf mehreren Plattformen zuverlässig funktioniert. Auch bin ich nicht DER Profi, was bash-Scripte angeht, deshalb vielen Dank für die Mithilfe!

  21. Hallo,

    ich habe ja schon einige Anleitungen von diesem Blog erfolgreich umgesetzt, nur jetzt hänge ich ein wenig. Bei dem Versuch das Backup auf mein Qnap Nas zu bekommen, kommt es zu einer Fehlermeldung wenn ich mit Putty den Befehl sudo /opt/Fhem/backup.sh absetze..

    Unable to find suitable address.
    Mounten hat anscheinend nicht geklappt, skip

    ich habe mich genau an die Anleitung gehalten? Was ist da los.

    Gruss Michael

    • Hallo,

      ich habe es jetzt doch noch zum laufen bekommen. Ich hatte ein Tippfehler versteckt.

      Gruss Michael

    • Ah ok, perfekt :)
      Bash-Scripts sind leider prädestiniert für solche Fehler...

    • Ja,
      ich seh schon. Das gestaltet sich wohl für viele Leser schwieriger als gedacht...

      Die angegebene IP-Adresse stimmt?
      Und was sagt die Konsole, wenn du einfach "ping" bzw. "ping IP.DEINES.NAS.SYSTEMS" (jeweils ohne Anführungszeichen) eingibst?

      Grüße
      Jörg

  22. Servus!

    Dankeschön für die tolle Anleitung.

    Habe das nun auch bei mir installiert und es läuft.

    Lediglich macht er bei mir immer zwei Backups wenn ich es auslöse. Verstehe nicht ganz warum.

    Ich würde später noch den Code so umstellen, dass ich, wenn es geht, die Pushover Nachricht über ein bereits definierte Pushover Instanz anspreche.

    Grüße

  23. Das Script hat auf meinen Cubitruck mit Ubuntu gut funktioniert.

    Ein Paar Sachen hab ich noch:
    1. Bei den zu installierenden Paketen noch fehlt ist curl und libcurl3.
    Sonst verschickt das Script ja keine Pushover
    2. Was mir nicht gefällt ist ,dass noch ein mal Ordner im Backupverzeichniss des NAS angelegt wird.
    3. Ich würde es bevorzugen, wenn man wählen konnte ob das Backup verschoben wird oder kopiert werden soll.
    So muss man immer erst das Backup vom NAS kopieren, wenn man mal wieder herstellen muss.
    4. Anzahl der aufzubewahrenden Backups.
    Vll gibt es ja hier ein Code Zeile welchen adaptiert werden können.
    5. Warum benutzt ihr nicht FHEM zum Versenden der Pushover Nachricht?

    Ansonsten ein Top Script

    • Hi Robert,
      danke für das Feedback.
      Zu deinen Punkten:
      1. Ich habe die Pakete im Blogpost soeben ergänzt. Wobei je nach Systemvoraussetzungen sicherlich noch mehr Pakete nachinstalliert werden müssen.
      2. Ändere den Code einfach ab. Statt
      cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
      einfach
      cp "$file" "$localMountPoint/$mountSubDir/$filename"
      3. Lösche einfach folgende Codezeile und das Backup bleibt lokal erhalten
      rm "$file"
      4. Diese Option ist bereits eingebaut:
      backupsMax="10"
      Jetzt werden 10 Backups vorgehalten.
      5. Habe die Pushover-Funktion beim Testen einfach mal ins Script eingebaut, hier kann aber natürlich auch direkt FHEM genutzt werden, klar.

      Grüße
      Jörg

    • Hallo Jörg,

      hab mal noch ein wenig rum gebastelt.
      Ich finde es auch gut, wenn man ein wenig mehr Status Informationen zum Backup bekommt.

      Also Backup kann nicht erstellt werden und dass das Backup erfolgreich erstellt wurde.
      Habs noch nicht getestet:

      #!/bin/bash

      mountIp="192.168.1.3"
      mountDir="_backup"
      mountUser="usr-backup"
      mountPass="jxd9pLvXBJ"
      mountSubDir="4_fhem/2_fhem"
      localMountPoint="/media/backup-server1"

      #optional
      backupsMax="0"
      localBackupDir="/backup"
      pushoverUser="unGEioQEgimhLxYzWu96L6JYGr9gR5"
      pushoverToken="aG6eaexWM5ZCQBgCmaiXiCc9tETsjV"
      ###################################

      perl /opt/fhem/fhem.pl 7072 "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 "set FHEM.Backup error"
      perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info $mountIp not found"
      curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=ACHTUNG: Backup konnte nicht erstellt werden Mount nicht erreichbar" https://api.pushover.net/1/messages.json
      exit
      else
      echo "$mountIp erreichbar"
      fi

      localIp=$(ip a s|sed -ne '/127.0.0.1/!{s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p}')

      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"
      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 "set FHEM.Backup off"
      perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backup $filename"
      perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupMB $fileSizeMB"
      perl /opt/fhem/fhem.pl 7072 "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 "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 "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 "setreading FHEM.Backup backupFiles $backupsCurrent"
      curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=Backup mit $fileSizeMB MB wurde erfolgreich erstellt und verschoben" https://api.pushover.net/1/messages.json

      Kann also nicht sagen ob es so geht wie ich es mir vorstelle. Werde ich aber gleich sehen, Backup läuft gerade.

  24. Auf einem Cubietruck funktioniert das Script auch, jedoch werden dabei 9 Dateien gleicher Grösse (20.395 kB) abgespeichert. Ist das so richtig ?

    Ich glaube nicht

    • Bei jedem Ausführen des Scripts werden 9 Backup-Dateien erstellt? *grübel*

    • Es wurden nur beim ersten Lauf soviel Backupdateien erzeugt. Da war das Verzeichnis noch leer. Jetzt läuft alles richtig und es wird nur ein Backup erzeugt.

      Wo kann ich denn die Anzahl der gespeicherten Backups einstellen ?

  25. Hallo Jörg,

    vielen Dank für die tolle Anleitung! Ich bin inzwischen ein regelmäßiger Deines Blogs geworden.
    Vermutlich wirst Du mich steinigen, wenn ich frage, ob man das relativ einfach statt auf NAS auch auf ein Backup in der Cloud wie z.B. GoogleDrive oder HiDrive umbauen kann. Mir fehlt dazu die Erfahrung, aber mit ein paar Denkanstößen bekomme ich es vielleicht hin.

    Beste Grüße
    Klaus

  26. Super, danke für diese ausführliche Anleitung.

  27. Hallo Jörg,

    Erstmal Danke an Dich und deine Kollegen dass es diesen Blog gibt! Das ist für mich, und viele andere sicher schon zum Plicht-Blog geworden wenn es um FHEM geht.

    Ich habe schon so einiges aus Eurem Blog umgesetzt. So auch dieses Backup Script

    Hier noch ein paar Tipps meinerseits:

    1) Wenn der telnet Zugang ein Passwort braucht...
    > Dazu habe ich einfach eine weitere mytelnetPW=geheim Variable in den Anfang eingefügt, und dann beim perl Aufruf "perl /opt/fhem/fhem.pl 7072 $mytelnetPW" eingefügt.

    2) Für die, die kein CIFS machen möchten, oder kein PW hinterlegen wollen...
    Man kann das Script auch einfach auf NFS umstellen. Dazu ist dann kein PW nötig. man muss den "mount" ein wenig anpassen, und natürlich im NAS den NFS export halt auch freigeben.

    3) wer kein Pushover hat, aber WhatsApp, kann seit neuestem mit "yowsup-cli" und einem Modul das im FHEM Forum gerade frisch rauskommt, oder rausgekommen ist, den curl Aufruf um pushover zu verschicken auch auf WhatsApp umbauen.
    schaut bei mir so aus:
    #if [[ "$pushoverToken" != "" && "pushoverUser" = "" ]]
    if [[ "$sendWhatsApp" = "yes" ]]
    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
    perl /opt/fhem/fhem.pl 7072 $mytelnetPW "set WhatsApp send 4917xxxxxxxxx Backup $fileSizeMB MB wird erstellt"

    (ich habe auch noch eine Variable eingebaut um WhatsApp ein und auszuschalten (sendWhatsApp)

    4)
    Den "sed" um die ip zu ermitteln habe ich bei mir auch etwas anders gemacht. Allerdings schon als die erste Version rauskam.
    Hier mein Aufruf: localIp=$(ifconfig eth0 | grep -i "inet ad" | cut -d ':' -f 2 | cut -d ' ' -f 1)

    Beste Grüße

    Holger

    • Hi Holger,
      danke für das Lob und das Teilen deiner Tipps. Hoffe es ist auch künftig etwas Interessantes für dich dabei!

      Grüße
      Jörg

    • Hallo Holger,

      vielen Dank für den Tipp mit dem telnet Passwort.
      Ich war schon kurz vorm Verzweifeln!!

      Jetzt ist alles schön :-)

      @Jörg
      Super Feature und 5* für die Beschreibung!

      LG
      Hermann

    • Vielen Dank! :)

  28. Super Beitrag! Auch gleich umgesetzt auf meiner OMV !

    Problem! Er hat nur initial ein Backup gemacht. Macht aber nun nicht täglich/scheduled eines?

  29. vielen dank für die anleitung. funzt super!

  30. Hallo zusammen,

    hab das script noch etwas bzgl Pushover angepasst.

    Es besteht die Möglichkeit ein bereits definiertes Pushover device zu nutzen oder wie gehabt per curl-Aufruf.
    Des weiteren kann man sich im iO-Fall und/oder niO-Fall per Pushover benachrichtigen lassen.

    #!/bin/bash

    mountIp="192.168.0.45"
    mountDir="raspberry"
    mountUser="pi-fhem"
    mountPass="pi-fhem-jhjvgjhbkjlhfc"
    mountSubDir="backup/fhem"
    localMountPoint="/Q/backup"

    #optional
    backupsMax="0"
    localBackupDir="/backup"
    #Meldungen bei Erfolgreichem und/oder nicht Erfolgreichem Backup
    backup_msg_iO=""
    backup_msg_niO="1"
    #Mit bereits definiertem Pushover Devive
    pushoverDevice="myPushover"
    #Ohne definiertem Pushover Device
    pushoverUser=""
    pushoverToken=""
    ###################################

    perl /opt/fhem/fhem.pl 7072 "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 "set FHEM.Backup error"
    perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info $mountIp not found"
    exit
    else
    echo "$mountIp erreichbar"
    fi

    localIp=$(ip a s|sed -ne '/127.0.0.1/!{s/^[ \t]*inet[ \t]*\([0-9.]\+\)\/.*$/\1/p}')

    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"
    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"

    #Pushover wenn Backup ausgeführt wurde
    if [ "backup_msg_iO" != "" ]
    then
    #Mit definiertem Pushover Device
    if [ "pushoverDevice" != "" ]
    then
    perl /opt/fhem/fhem.pl 7072 "set $pushoverDevice msg 'FHEM $localIp' 'Backup mit $fileSizeMB MB wird erstellt'"
    fi
    #Mit Web Aufruf
    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
    fi
    #mv "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
    cp "$file" "$localMountPoint/$mountSubDir/$localIp/$filename"
    rm "$file"
    perl /opt/fhem/fhem.pl 7072 "set FHEM.Backup off"
    perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backup $filename"
    perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup backupMB $fileSizeMB"
    perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup done"
    done
    else
    if [ "$backup_msg_niO" != "" ]
    then
    #Mit definiertem Pushover Device
    if [ "pushoverDevice" != "" ]
    then
    perl /opt/fhem/fhem.pl 7072 "set $pushoverDevice msg 'FHEM $localIp' 'ACHTUNG: Backup konnte NICHT erstellt werden'"
    fi
    #Mit Web aufruf
    if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]]
    then
    curl -s -F "token=$pushoverToken" -F "user=$pushoverUser" -F "title=FHEM $localIp" -F "message=ACHTUNG: Backup konnte NICHT erstellt werden" https://api.pushover.net/1/messages.json
    fi
    fi
    echo "Mounten hat anscheinend nicht geklappt, skip."
    exit
    fi

    #Löschen alter Backups
    if [[ "$backupsMax" != "" && "$backupsMax" != "0" ]]
    then
    perl /opt/fhem/fhem.pl 7072 "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 "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 "setreading FHEM.Backup backupFiles $backupsCurrent"

  31. Hallo Jörg,

    nach einer Neuinstallation habe ich das Problem, dass die Freigabe trotz dem fstab Eintrag nach einem Neustart nicht mehr automatisch gemountet wird:

    # UNCONFIGURED FSTAB FOR BASE SYSTEM
    /dev/sda1 / ext4 defaults,noatime,nodiratime,data=writeback,commit=600,errors=remount-ro 0 0
    /dev/nand1 /boot vfat defaults 0 0
    //192.200.100.81/FHEMbackup /Q/backup cifs username=administrator,password=cotton,iocharset=utf8,sec=ntlm 0 0

    ein mount -l zeigt dann:

    /dev/root on / type ext4 (rw,relatime,data=ordered)
    devtmpfs on /dev type devtmpfs (rw,relatime,size=1023356k,nr_inodes=181951,mode=755)
    tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=131072k,mode=755)
    tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
    proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
    sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
    /dev/sdb1 on /media/usb0 type vfat (rw,nodev,noexec,noatime,nodiratime,sync,gid=100,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro) [ABORGLOG]
    tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=131072k)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
    /dev/nand1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro)
    tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime,size=1048576k)
    /dev/root on /var/log.hdd type ext4 (rw,relatime,data=ordered)
    ramlog-tmpfs on /var/log type tmpfs (rw,relatime,size=524288k)

    nach einem mount -a ist die Freigabe dann gemountet:

    /dev/root on / type ext4 (rw,relatime,data=ordered)
    devtmpfs on /dev type devtmpfs (rw,relatime,size=1023356k,nr_inodes=181951,mode=755)
    tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=131072k,mode=755)
    tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
    proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
    sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
    /dev/sdb1 on /media/usb0 type vfat (rw,nodev,noexec,noatime,nodiratime,sync,gid=100,fmask=0000,dmask=0000,allow_utime=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro) [ABORGLOG]
    tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=131072k)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
    /dev/nand1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=ascii,shortname=mixed,errors=remount-ro)
    tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime,size=1048576k)
    /dev/root on /var/log.hdd type ext4 (rw,relatime,data=ordered)
    ramlog-tmpfs on /var/log type tmpfs (rw,relatime,size=524288k)
    //192.200.100.81/FHEMbackup on /Q/backup type cifs (rw,relatime,sec=ntlm,unc=\\192.200.100.81\FHEMbackup,username=administrator,uid=0,noforceuid,gid=0,noforcegid,addr=192.200.100.81,file_mode=0755,dir_mode=0755,nounix,serverino,rsize=61440,wsize=65536,actimeo=1)

    Hast Du eine Erklärung dafür ?

  32. Klasse Artikel! In 20 minuten war alles eingerichtet, inkl. Pushover. Vielen Dank und viele Grüße, Peter

  33. Hallo Jörg,
    super Feature, dass auf meinem RPI super läuft - da kann man doch glatt etwas ruhiger schlafen ;-)

    Ich finde in meiner log-Datei trotzdem eine Meldung, die ich nicht verstehe und nicht weiß, ob es sich um einen Fehler handelt - ich habe mal den ganzen relevanten Block angehängt

    ....Es handelt sich um die Meldung "sed: -e expression #1, char 46: unknown option to s'
    "

    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.511/0.511/0.511/0.000 ms
    192.168.178.98 erreichbar
    sed: -e expression #1, char 46: unknown option to
    s'
    /Q/backup bereits vorhanden
    /Q/backup nicht leer, kein Mounten notwendig
    /Q/backup/rpi/fhem/ existiert bereits
    150704_060003_fhem_backup.tar.gz (18 MB) wird in den Backupordner verschoben

    Fehler oder Feature?

    • Hi Jörn,

      der sed-Befehl wird dazu genutzt die eigene IP-Adresse zu ermitteln, um die erstellte Backupdatei in einen gleichlautenden Ordner zu verschieben. Anscheinend kann dein System diesen Befehl nicht richtig interpretieren. Funktioniert es denn wie angedacht? Spontan habe ich keine Lösung parat, das müsste ich mir erst genauer ansehen.

      Grüße
      Jörg

    • Moin,

      ich habe das mal etwas modifiziert, dass funktioniert (solange kein SED-Experte etwas besseres entwirft...):

      localIp=$(ip a s | grep "inet " | grep -v "127.0.0.1" | awk '{print $2}' | sed -e "s#\/..##")

      Viele Grüße
      Christian

  34. Ich betreibe eine Synolgy DS214 als NAS.

    • Das NAS ist in diesem Fall egal. Auf welchem System läuft denn dein FHEM-Server?

  35. Raspberry B+

  36. Hallo,

    vielleicht kann mir hier ja einer der Linux-Profis helfen.
    Immer wenn ich das Script starte, egal ob per SSH oder die Oberfläche bekomme ich im Terminal den Hinweis " Can't Connect to localhost: 7072 "
    Ich habe das Tutorial schon mehrfach durch gespielt aber nichts ändert sich.
    Das Backup funktioniert, aber halt nur einmal weil dann der Dummy nicht wieder auf Off gesetzt wird. Auch werden keine Readings geschrieben.
    Bin über jeden Ansatz dankbar.
    Danke und Gruß
    Jan

    • Achja, Pushover funktioniert einwandfrei!

    • Keiner?

    • Habs grad gelesen... Ich hatte den gleichen Fehler mit "7072 can't connect"
      Wenn es noch nicht behoben ist, schaut mal nach ob Dein Telnet auskommentiert ist. Bei mir sieht es jetzt so aus und funktioniert.

      # -------------------------------
      # Telnet
      # -------------------------------
      define telnetPort telnet 7072 global
      attr telnetPort room 10_FHEM

  37. Hallo Jan. Ich denke dass deine Frage vielleicht besser im einem forum aufgehoben wäre. Hier in einem Blog ist das immer etwas schwierig. Aber vielleicht liegt es einfach nur daran dass du evtl ein passwort für telnet definiert hast? Oder da du in deinem Post localhost Doppelpunkt Leerzeichen 7072 angegeben hast dass da vll ein Leerzeichen irgendwo drinnen ist wo keins hin muss? Hoffe du findest den Fehler noch. Denn das Backup Script hier ist Gold wert
    Beste grüße Holger

    • Hallo Holger,
      danke für deine Antwort und die Erwähnung von Telnet.
      Aus irgendeinem Grund war Telnet in cfg deaktiviert (Wahrscheinlich war ich sogar selbst :-) ). Jetzt ist es an und alles läuft super.

      Danke und Gruß
      Jan

  38. Hallo Jörg,
    tolle Anleitung. Das Thema Pushover und Log würde ich anders lösen.
    Pushover besser über das FHEM-Modul. Alle Daten stellst Du ja bereits als Reading bereit. Die Log-Ausgaben sollten in ein separates Log und nicht ins Hauptlog von FHEM.

    Danke und Gruß
    Veit

  39. Hallo Jörg,
    Dein chown bringt übrigens gar nichts, wenn Du anschließend mit chmod die Tür ganz weit aufmachst. Da in der Datei ein Account-Passwort steht, würde ich das Script auf 700 setzen.

    Gruß
    Veit

    • Danke für den Tipp. Habe das Script entsprechend angepasst.
      Mit Linux-Berechtigungen muss ich mich bei Gelegenheit auch mal näher auseinandersetzen...

      Grüße
      Jörg

  40. der sed-Code produziert bei mir einen Fehler. Ich habe ihn stattdessen umgeschrieben auf

    hostname -I|sed 's/\([0-9.]*\).*/\1/'

  41. Am Ende des Scripts macht einer sauberer Unmount Sinn, sonst bleibt der Mount offen und führt möglicherweise zu Problemen, wenn das NAS abgeschaltet wird.

    echo "Mount wieder unmounten"
    umount "/$localMountPoint"

  42. Super Anleitung wie immer von Dir :-), leider scheitere ich daran das ich die Daten auf dem an der Fritzbox hängenden USB Speicher (als NAS) schreiben will.
    Kann mir jemand Tipps geben wie ich dabei vorgehen muß oder geht das nicht mit einer NAS an der Fritzbox?

    • Hi Sven,
      evtl. liegt es ja an fehlenden Schreibrechten des an der Fritzbox installierten USB-Speichers? Mit dieser Lösung habe ich leider nicht so viel Erfahrung, sorry.

      Grüße und viel Erfolg
      Jörg

  43. Hallo Jörg , Hallo @all ,
    da ich meine Fhemgeschichte nun dabei bin ,auf einen NUC umzuziehen ,bin ich gerade auch dabei das Backup wieder einzubauen :-)
    Soweit funktioniert auch alles :
    - im Terminal lässt sich das Backup anstoßen
    - Fhem, mit dem Schalter auf ON ,startet das Backup ( der Träger bleibt aber auf ON stehen !)
    Möchte ich das ein Backup automatisch erstellt wird ,so funktioniert dies nur , wenn der Träger auf OFF steht !!!
    Heißt es läuft nur ein Backup ,danach steht der Dummy weiter auf on und es wird kein weiteres Backup erstellt !
    Also musste ich in der Config noch eine Stoppzeit einstellen:
    define FHEMBackupstop at *12:40:00 set FHEM.Backup off

    Irgendwas mache ich doch nun falsch ,oder ?
    So funzt es nun auch automatisch - evtl. wäre es besser mit einem On-For-Timer gelöst ,allerdings weiß ich nicht ob das ein dumm überhaupt kann ...

    • Das klingt genau nach meinem Problem was ich auch hatte.
      Ca. 10 Kommentare nach oben.
      Ist bei dir in der Fhem Config Telnet aktiviert?
      Das war bei mir aus und so konnte das Script den Dummy nicht zurück setzen und es wurden auch keine readings geschrieben.
      Gruß
      Jan

    • Hmmm, erstmal Danke für den Ansatz ,aber laut config :
      define telnetPort telnet 7072 global

      Sollte also gesetzt sein :-(

  44. Hallo,

    ich bekomme leider folgende Fehlermeldung:

    mount error: cifs filesystem not supported by the system
    mount error(19): No such device
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Mounten hat anscheinend nicht geklappt, skip.

    Woran liegt das? Anscheinend kann das NAS nicht gemounted werden?!?

    • Hallo, jetzt habe ich zumindest mal das mounten hinbekommen. Aber leider funzt es noch nicht. Kann mir vielleicht jemand helfen. Nach dem mounte bricht er mit folgender Meldung ab:

      -----------
      rtt min/avg/max/mdev = 0.583/0.583/0.583/0.000 ms
      192.168.2.101 erreichbar
      /media/NAS/Backup bereits vorhanden
      /media/NAS/Backup leer, Mounten starten
      mountComplete: //192.168.2.101/Backup /media/NAS/Backup cifs username=++++,pass word=++++,iocharset=utf8,sec=ntlm 0 0
      mountComplete: //192.168.2.101/Backup /media/NAS/Backup cifs username=++++,pass word=++++,iocharset=utf8,sec=ntlm 0 0
      mountComplete: //192.168.2.101/Backup /media/NAS/Backup cifs username=++++,pass word=++++,iocharset=utf8,sec=ntlm 0 0
      mountComplete: //192.168.2.101/Backup /media/NAS/Backup cifs username=++++,pass word=++++,iocharset=utf8,sec=ntlm 0 0
      mountComplete: //192.168.2.101/Backup /media/NAS/Backup cifs username=++++,pass word=++++,iocharset=utf8,sec=ntlm 0 0
      /etc/fstab: Eintrag bereits vorhanden: //192.168.2.101/Backup /media/NAS/Backup cifs username=++++,password=++++,iocharset=utf8,sec=ntlm 0 0
      Mounts werden aktualisiert
      Mounten hat anscheinend nicht geklappt, skip.
      ------------------
      Die Updatedatei ist im lokalen Ordner vorhanden. Wenn ich es per "Hand" in den gemounteten Ordner schieben funktioniert es auch. Aber aus irgendeinem Grund denkt das Skript das es nicht geklappt hat, wieso??

      Danke

  45. Hallo,
    ich bekomme es nicht hin!

    Meine Daten:
    mountIp="192.168.178.25"
    mountDir="Backup"
    mountUser="RPIBackup"
    mountPass="XXXXXX"
    mountSubDir="rpi/fhem"
    localMountPoint="/mnt/Backup"

    Das kommt dabei heraus:
    pi@raspberrypi ~ $ sudo /opt/fhem/FHEM/backup.sh
    /backup bereits vorhanden
    PING 192.168.178.25 (192.168.178.25) 56(84) bytes of data.

    --- 192.168.178.25 ping statistics ---
    1 packets transmitted, 0 received, 100% packet loss, time 0ms

    192.168.178.25 nicht erreichbar, stop

    Wie richtet Ihr dies auf ein Synology NAS ein?

    Gruß
    Ralf

    • Also ich habe mir einen neuen Gemeinsamen Ordner angelegt /Backup/Fhem .
      Einen Extra User für Fhem, dem ich nur schreib und lese Rechte auf den Backup ordner gegeben habe und ich habe nur die Applikation "Filestation" aktiviert.
      und die Config im script sieht dann so aus.

      mountIp="192.168.0.91"
      mountDir="backup"
      mountUser="Fhem_backup"
      mountPass="***********"
      mountSubDir="Fhem"
      localMountPoint="/Q/backup"

      #optional
      backupsMax="20"
      localBackupDir="/backup"
      pushoverUser="********"
      pushoverToken="*********"
      pushoverDevice="********"

      Gruß
      Jan

    • Mal eine andere blöde Frage: Ist die IP von dem NAS denn richtig? Weil das Script bekommt ja keine Antwort von dem NAS. Kannst du den NAS vom PC aus pingen?
      Eventuell liegt es auch an der Firewall im NAS das das gesperrt ist. Vielleicht zum testen mal komplett deaktivieren.

      Gruß
      Jan

  46. Hallo Jan,
    danke für deine Hilfe.

    Ich habe es nun mal neu erstellt:

    mountIp="192.168.178.25"
    mountDir="home"
    mountUser="FHEM"
    mountPass="FHEMBackup"
    mountSubDir="FHEM/Backup"
    localMountPoint="/Q/backup"

    #optional
    backupsMax="0"
    localBackupDir="/backup"
    pushoverUser=""
    pushoverToken=""

    Meine DS114 hat die IP 192.168.178.25
    Einen User auf der DS114 FHEM mit Passwort:FHEMBackup habe ich erstellt und in dessen Ordner home soll das Backup in den Unterordner FHEM/Backup.

    In etc/fstab habe ich eingetragen:
    //192.168.178.25/home /Q/backup cifs username=FHEM,password=FHEMBackup,iocharset=utf8,sec=ntlm 0 0

    Nun kann ich vom Raspberry mittels Cyberduck über /Q/backup/FHEM/Backup die Datei die ich per hand dort abgelegt habe sehen.

    Also ist das NAS doch gemounted oder nicht?

    Per Cyberduck kann ich mittels copy und paste eine Backupdatei von /backup nach /Q/backup/FHEM/Backup übertragen!

    Gruß
    Ralf

  47. Hallo Jan,

    ja die DS114 ist von meinem Macbook anpingbar!

    „Ping“ wurde gestartet …

    PING 192.168.178.25 (192.168.178.25): 56 data bytes
    64 bytes from 192.168.178.25: icmp_seq=0 ttl=64 time=1.474 ms
    64 bytes from 192.168.178.25: icmp_seq=1 ttl=64 time=1.549 ms
    64 bytes from 192.168.178.25: icmp_seq=2 ttl=64 time=1.542 ms
    64 bytes from 192.168.178.25: icmp_seq=3 ttl=64 time=4.411 ms
    64 bytes from 192.168.178.25: icmp_seq=4 ttl=64 time=2.988 ms

    --- 192.168.178.25 ping statistics ---
    5 packets transmitted, 5 packets received, 0.0% packet loss
    round-trip min/avg/max/stddev = 1.474/2.393/4.411/1.158 ms

    In meiner DS114 steht FHEM als über cifs verbundener Benutzer drin.

    Gruß
    Ralf

  48. Hallo,
    ich habe versucht das Backup nachzubilden. Leider erscheinen beim Ausführen ständig Fehler im FHEM-Log (SYS_BackupRun return value: -1) und das fast im Sekundentakt. Der Prozess lässt sich nur durch ein reboot beenden.
    Ich meine es liegt an den Zeilen, durch die UserReadings zurückgegeben werden (z. B. perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup starting now"). Lasse ich diese weg, läuft das Script durch.
    Was läuft bei mir falsch? Würde die "Statusmeldungen" schon gern im FHEM nutzen.

    • Puh,
      habe gerade mal ein manuelles Backup über den Dummy angestoßen und parallel das Log gecheckt. Habe keine Probleme dieser Art, kann deshalb leider an dieser Stelle nicht wirklich weiterhelfen, sorry.

  49. Hallo Jörg,
    vielen Dank für Deine Mühen, bei mir läuft das Backup nun auch endlich... ;-)
    Ich bin Mac-User und speichere auf einer Freigabe meines Server´s, mit einer kleinen Anpassung im:
    mountComplete="//$mountIp/$mountDir $localMountPoint cifs username=$mountUser,password=$mountPass,nounix,iocharset=utf8,sec=ntlmssp 0 0"

    Vielen Dank, vielleicht hilft es noch jemanden...
    LG Olli

  50. Hallo

    Ich bin auf einem RPI 2 mit Noobs/Raspian.
    FHEM installation wie im Blog beschrieben lief einwandfrei.
    Bevor ich nun beginnen wollte mit meinen Basteleien fand ich es eine gute Idee den Backup zuerst mal noch einzurichten.
    Beim durcharbeiten dieser Anleitung ist mir aber etwas komisches passiert.
    Bis und mit Schritt "Backup-Script backup.sh erstellen" hatte ich keine Fehlermeldungen. Scheinbar alles ok.
    Beim Aufruf von "http://192.168.1.xxx:8083/fhem?cmd=style%20edit%20backup.sh" passiert nichts mehr. Die Webseite von FHEM wird nicht mehr geladen. Mit "sudo /etc/init.d/fhem status" bekomme ich die Meldung "FHEM is running". Versuche ich mit "sudo /etc/init.d/fhem stop" den FHEM server zu stoppen, bleibt die Antwort dieselbe. FHEM ist einfach immer am laufen. Die Seite wird aber nicht mehr geladen.

    Habe noch diesen "fhem ALL=(ALL) NOPASSWD: ALL" wieder ausgebaut ohne erfolg.
    Mehrmals den ganzen RPI durchstarten hat auch nicht geholfen.

    Kann mir da jemand ev. weiterhelfen?

    Viele Grüsse
    Conti

  51. Hi,
    erstmal danke für die ganze Arbeit hier.

    Prinzipiell läuft das Backup. Aber es werden keinerlei readings gesetzt und alle "perl /opt/fhem/fhem.pl 7072" Befehle scheinen ins Leere zu laufen. Telnet steht auf initialized, die Rechte hab ich vergeben, die Sudoers gesetzt... ich komme nicht weiter.

    Habt ihr noch Tipps für mich?

    Ich würde auch lieber ein eigenes FileLog für die Backups haben, anstatt alles ins HauptLog zu schreiben, hat wer Ahnung, wie das geht?

    Gruß
    Michael

    • So, dank des Fhem-Forums hab ich den Fehler gefunden. Wäre vieleicht ein Punkt für die obige Anleitung.

      Ich hatte in Fhem im telnet Device das attr password gesetzt. Dadurch wurde kein Befehl per telnet entgegen genommen (komischerweise aber auch kein Fehler angezeigt).

      Entweder setzt man hinter jedes 7072 in der per-Befehlszeile das Passwort ein, oder man entfernt das Attribut aus dem telnet Device und schränkt per allowfrom den Zugriff auf Telnet so ein, dass nur der localhost durch kommt:

      attr telnet allowfrom 127\.0\.0\.1

      Dann läuft alles wie gewünscht. Wie gesagt, war nicht mein Einfall, aber vielleicht haben andere ja auch das Problem.
      Gruß
      Michael

  52. Hallo,
    ich versuche das Backup von fhem mit einem Raspi2 mit Jessie auf dem usb Speicher einer Fritzbox zu sichern. Irgendwo habe ich wohl einen Fehler. Seit gut einer Stunde versuche die Einstellungen zu ändern.
    Ich bekomme folgendes nach Eingabe von:
    sudo /opt/fhem/FHEM/backup.sh
    "ausgespuckt"
    /backup bereits vorhanden
    PING fritz.nas (192.168.2.1) 56(84) bytes of data.
    64 bytes from fritz.box (192.168.2.1): icmp_seq=1 ttl=64 time=0.442 ms

    --- fritz.nas ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.442/0.442/0.442/0.000 ms
    fritz.nas erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag bereits vorhanden: //fritz.nas/Hitachi-HTS541680J9SA00-01/FhemPi /Q/backup cifs username=Torsten,password=575739,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    mount: /etc/fstab: parse error: ignore entry at line 6.
    mount: /etc/fstab: parse error: ignore entry at line 12.
    mount: /etc/fstab: parse error: ignore entry at line 15.
    Retrying with upper case share name
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Retrying with upper case share name
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Retrying with upper case share name
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Retrying with upper case share name
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount: mount point FhemPi does not exist
    mount error(13): Permission denied
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Retrying with upper case share name
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount: (null): mount failed: Invalid argument
    Mounten hat anscheinend nicht geklappt, skip.

    Hier die ersten Zeilen meiner bachup.sh:
    #!/bin/bash

    mountIp="fritz.nas"
    mountDir="Hitachi-HTS541680J9SA00-01/FhemPi"
    mountUser="Torsten"
    mountPass="575739"
    mountSubDir="FhemPi"
    localMountPoint="/Q/backup"

    #optional
    backupsMax="0"
    localBackupDir="/backup"
    pushoverUser=""
    pushoverToken=""
    ###################################

    Der Ort auf der Firzbox wird so angezeigt:
    / fritz.nas / Hitachi-HTS541680J9SA00-01 / FhemPi

    Bestimmt übersehe ich etwas und bin für Tipps wirklich dankbar.

    Vielen Dank
    Torsten

    • Hallo Thorsten,
      ich hatte dasselbe Problem, dass sich mein FHEM Server (wheezy) nicht mit einer 1TB-Festplatte an meiner Fritzbox 7490 verbinden wollte. Mit viel Googlen hab ich eine Lösung hierfür gefunden. Tausche die Zeile, die mit mountcomplete in Jörgs Script anfängt, durch diese hier aus:
      mountComplete="//$mountIp/$mountDir $localMountPoint cifs username=$mountUser,password=$mountPass,iocharset=utf8,sec=ntlmv2"

      Die Parameter kannst du ja am Anfang des Skripts setzen. Trage dort deine Informationen so ein, dass folgende Zeile als Ergebnis rauskommt:
      ///// /Q/backup cifs username=,password=,iocharset=utf8,sec=ntlmv2

      Maßgeblich für die Verbindungsprobleme ist wohl der Parameter sec=ntlmv2. Dieser ist notwendig, damit die Verbindung zur Fritzbox funktioniert. Ich gehe hier von einer Fritzbox 7490 ab Firmware 6.20 aus.

      Viel Erfolg

  53. Das Backup läuft bei mir soweit ganz gut aber leider nicht das Löschen der alten Backups. Im Log steht nur rm: missing operand
    Hab das Skript eigentlich so von Blog aus übernommen und nur die IP Variabel aus dem Pfad raus genommen.

  54. Hallo Jörg,
    super Anleitung, hat bei mir einwandfrei geklappt bzw. tut es jetzt jeden Tag ;-)
    Das einzige, das mich stört: im FHEM Logfile steht jetzt mein Passwort für den NAS (bei mir ein HDD an der Fritzbox) im Klartext drin. Kann ich das irgendwie verhindern?
    So sieht der Log-Eintrag bei mir aus:
    __________________
    2015.11.01 06:00:00 3: FHEMBackupOn return value: -1
    /backup bereits vorhanden
    PING 192.168.xxx.xxx (192.168.xxx.xxx) 56(84) bytes of data.
    64 bytes from 192.168.178.1: icmp_req=1 ttl=64 time=0.781 ms

    --- 192.168.xxx.xxx ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.781/0.781/0.781/0.000 ms
    192.168.178.1 erreichbar
    /FritzBox bereits vorhanden
    /FritzBox leer, Mounten starten
    mountComplete: //192.168.xxx.xxx/fritz.nas /FritzBox cifs username=xx,password=xxxxxxxxx,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.xxx.xxx/fritz.nas /FritzBox cifs username=xx,password=xxxxxxxxx,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.xxx.xxx/fritz.nas /FritzBox cifs username=xx,password=xxxxxxxxx,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.xxx.xxx/fritz.nas /FritzBox cifs username=xx,password=xxxxxxxxx,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.xxx.xxx/fritz.nas /FritzBox cifs username=xx,password=xxxxxxxxx,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.xxx.xxx/fritz.nas /FritzBox cifs username=xx,password=xxxxxxxxxx,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag bereits vorhanden: //192.168.xxx.xxx/fritz.nas /FritzBox cifs username=xx,password=xxxxxxxxx,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    mount error(16): Device or resource busy
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    /FritzBox//TOSHIBA-MQ01ABD100-01/piBackup/fhem/192.168.xxx.xx existiert bereits
    151101_060001_fhem_backup.tar.gz (21 MB) wird in den Backupordner verschoben
    4 Backups vorhanden - nur 3 aktuelle Backups werden vorgehalten - 1 Backups werden gelöscht
    Mount wieder unmounten
    _____________

    Danke für den tollen Blog,

    Kristof

  55. Hallo Jörg

    Nach intensiver Suche für eine gute Backup-Lösung bin ich wieder bei deiner Lösung (grandios) gelandet, die ich wohl gerne implementieren möchte. Zuvor habe ich noch ein paar Fragen:

    1. Hast du (oder andere Leser) Erfahrungen, hiermit eine geöffnete fhem.db zu sichern ?
    2. Auf meinem RPI läuft auch noch ein SolarView. Hierfür möchte ich ungern eine andere Lösung anwenden. Was ist der beste Weg ?
    3.Ich habe verschiedene Scripte gefunden, um die komplette SD-Karte zu sichern. Hast du eine Empfehlung? Natürlich wäre es schön, wenn alle Ansätze aus einem Guss wären.
    4. Da ich linuxmässig ein kompletter Laie bin, ist die "backup.sh" ein reservierte Name oder kann man auch eine "backup2.sh" anlegen ?

    5. @Kristof: Wie ich sehe, sicherst du auf die FritzBox.
    Ist da etwas abweichendes zu beachten ausser dem Hinweis von Leonid ?
    mountip, ist das dann die IP-Adresse ( bei mir als Router 192.168.178.1) oder der symbolisch Name ?
    Ist ein USB-Stick oder die Festplatte sinnvoller ?

    Danke für den klasse Ansatz
    Jürgen

  56. Hallo, erst einmal muss ich sagen das ich diese Seite hier super finde... vor allem für Einstiger in FHEM etc. Jetzt habe ich hier nur ein kleines Problem. Ich habe eine "Synology NAS" und komme etwas durcheinander mit den Pfaden. Vielleicht kann mir hier ja jemand helfen....

    erhalte immer diese Meldung:
    /Backups bereits vorhanden
    PING 192.168.178.100 (192.168.178.100) 56(84) bytes of data.
    --- 192.168.178.100 ping statistics ---
    1 packets transmitted, 0 received, 100% packet loss, time 0ms
    192.168.178.100 nicht erreichbar, stop

    Hier noch einen Auszug aus der Datei:
    mountIp="192.168.178.100" (Die IP meines NAS)
    mountDir="backup"
    mountUser="admin"
    mountPass="xxxxxxxxxx"
    mountSubDir="rpi/fhem"
    localMountPoint="/Homeserver/Backup"

    #optional
    backupsMax="0"
    localBackupDir="/Backups"

    Danke schon einmal....

  57. Hi,

    danke für die gute Anleitung,

    ich habe allerdings das Problem, das mein Laufwerk nicht gemountet wird. Da ich aber einen dauerhaften Mount des Laufwerks habe (außerhalb des Scripts), möchte ich Fragen, was ich ändern muss um einen bereits local gemounteten share / Ordner zu nutzen.

    Gruß

    Jan

  58. Besten Dank für die gute Anleitung. Nur leider funktionierts bei mir nur teilweise. Starte ich den Dummy im FHEM wie beschrieben oder lasse den Timer arbeiten, wird kein Backup erstellt.
    Prüfe ich die Einstellungen im Terminalfenster (wie beschrieben), wird ein Backup erstellt, das Syno-NAS gemountet und Backupdatei verschoben. Alles tadellos wie gewünscht. Nur leider wird der Befehl über die FHEMoberfläche ignoriert, bzw. nicht ganz ausgeführt.
    In den Readings steht:
    info: backup starting now (zeitpunkt ist aber veraltet)
    state: on
    auch wird das letzte erfolgreiche Backup angezeigt welcher jedoch manuell über das Terminalfenster ausgeführt wurde.
    Im Logfile wird folgendes hinzugeführt:

    /opt/fhem/backup bereits vorhanden
    PING 192.168.0.5 (192.168.0.5) 56(84) bytes of data.
    64 bytes from 192.168.0.5: icmp_seq=1 ttl=64 time=0.298 ms

    --- 192.168.0.5 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.298/0.298/0.298/0.000 ms
    192.168.0.5 erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag bereits vorhanden: //192.168.0.5/FHEM_Backup /Q/backup cifs username=fhem,password=password,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    mount: only root can do that
    Mounten hat anscheinend nicht geklappt, skip.

    Wenn ich das richtig interpretiere wird hier das Backup gar nicht gemacht?
    Bin für jeden Tip dankbar

  59. Hallo erst mal muss ich danke sagen, für die ganzen Anleitungen die du zur Verfügung stellst.
    Ich versuche die FritzBox NAS als speicherplatz für die Backups zu verwenden doch leider komme ich nicht weiter es kommt immer zu dieser Fehlermeldung.

    2015.12.23 03:30:25 3: FHEMBackupOn return value: -1
    /backup bereits vorhanden
    PING fritz.nas (192.168.178.1) 56(84) bytes of data.
    64 bytes from fritz.box (192.168.178.1): icmp_req=1 ttl=64 time=0.401 ms

    --- fritz.nas ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.401/0.401/0.401/0.000 ms
    fritz.nas erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    /etc/fstab: Eintrag bereits vorhanden: //fritz.nas/PI-239-USB2-0Drive-01/backup /Q/backup cifs username=tcaesar,password=th1577th,iocharset=utf8,sec=ntlmv2
    Mounts werden aktualisiert
    [mntent]: line 7 in /etc/fstab is bad
    mount: mount point cifs does not exist
    Retrying with upper case share name
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Mounten hat anscheinend nicht geklappt, skip.
    2015.12.23 03:32:16 3: FHEMBackupOn return value: -1
    /backup bereits vorhanden

    Was kann ich ändern, oder wo ist der Fehler.
    Danke MfG Torsten

  60. Hallo Jörg,

    ich verfolge diesen Blog schon eine ganze Weile und er hat mir bei meinem Einstieg in die Hausautomation auch sehr gute Tips gegeben (habe fhem auch auf einem NUC installiert; Hauptanwendung Heizungsvisualisierung (Pelletheizung und Thermostate) sowie das Hoflicht). Auch das hier gezeigte Backup-Verfahren klappte so ziemlich auf Anhieb. Einen Hinweis würde ich gerne noch geben: das Editieren der "sudoers" mit nano ist brandgefährlich. Ich habe mir so erstmal den Server komplett zerschossen (ein kleiner Tippfehler, und weg war sudo...). Das hieß also raus mit dem Server aus der Abstellkammer, Monitor und Tastatur anklemmen, Wiederherstellungskonsole und sudo reparieren.

    Nach einigem Stöbern in diversen Ubuntu-Foren habe ich gelernt, dass man sudoers NUR und wirklich NUR mit dem Befehl "sudo visudo" öffnen sollte, da dies eine Syntaxüberprüfung gewährleistet (verwendet letztendlich auch nano).

    Viele Grüße und weiter so mit dem Blog, ist echt klasse!

    Oliver

    P.S. durch eine kleine Skriptergänzung sichere ich zusätzlich zum fhem PFad auch noch die Logdateien (filelog und dblog), die ich aus Platzgründen auf das Homelaufwerk auf einer separaten Partition ausgelagert habe, in dasselbe .tar-file.

    tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_fhem_backup.tar.gz" "/opt/fhem" "/home/fhem/dblog" "/home/fhem/filelog" &>/dev/null

  61. Danke! Hat einwandfrei funktioniert!
    RPI2 mit Raspbian Jessie und FHEM 5.7

    Backup auf Windows Share.

    :-)

  62. Zur Info für alle Syno-Nutzer: Auf meiner 212+ liefert die Backup-Funktion von FHEM auch eine komplette fhem.cfg im TAR.
    Dort zu finden unter: \FHEM-jjjjmmtt_hhmmss\usr\local\FHEM\etc\

    Danke an Jörg, ich stöbere immer wieder gerne in Deinem Tec-Blog.

    Schöne Güße,
    Dirk

  63. Habe mich wiedereinmal meinem Backupproblemchen gewidmet, komme aber nicht weiter.
    Das backup.sh funktioniert tadellos auf mein Syno-NAS, wenn dieses wie beschrieben von der Konsole aus gestartet wird.
    Leider wird das Backup vom FHEM aus nicht ausgelöst.
    Meine Vermutung liegt in einem Bug der beschriebenen /etc/sudoers, welche ich mittlerweile zigmal geändert hab. Anfangs mit dem beschriebenen nano Befehl und später (weil Google dazu rät) mit visudo.

    Jetzt stelle ich fest, dass ich im besagten Verzeichnis /etc/sudoers gleich 2 Sudoersdateien mit gleicher Grösse aber verschiedenen Zeitstempeln habe?!?

    Ls -l (Auszug):
    -r--r----- 1 root root 776 Jan 14 23:04 sudoers
    -rw-r--r-- 1 root root 776 Nov 4 20:12 sudoers
    drwxr-xr-x 2 root root 4096 Sep 22 20:42 sudoers.d

    Ist das korrekt? (Bin Linuxneuling kann mir aber nicht vorstellen, das zwei gleichlautende Dateien im gleichen Verzeichnis vorhanden sind).
    Wenn nein wie bringe ich die Datei weg? (Die auswahl der Datei wird ja schwierig)...

    Meine Sudoers sieht folgendermassen aus (mit "sudo nano /etc/sudoers" aufgerufen):
    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # Please consider adding local content in /etc/sudoers.d/ instead of
    # directly modifying this file.
    #
    # See the man page for details on how to write a sudoers file.
    #
    Defaults env_reset
    Defaults mail_badpass
    Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$

    # Host alias specification

    # User alias specification

    # Cmnd alias specification

    # User privilege specification
    root ALL=(ALL:ALL) ALL
    fhem ALL=(ALL) NOPASSWD:ALL

    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL

    # Allow members of group sudo to execute any command
    %sudo ALL=(ALL:ALL) ALL

    # See sudoers(5) for more information on "#include" directives:

    #includedir /etc/sudoers.d

    Oder vieleicht kann mir jemand sagen, wo ich was übersehen habe?

    Besten Dank für ein Feedback

  64. Hallo Jörg,

    vielen Dank für Dein Script, dass ich etwas erweitert habe:

    #!/bin/bash

    # set to true for switching to echo
    debugmode=false

    mountIp="192.168.0.50"
    mountDir="Volume_1"
    mountUser=
    mountPass=
    mountSubDir="fhem-backup"
    localMountPoint="/mnt/nas"
    fhemdir="/usr/share/fhem"
    backupfilename="RPiTreppe"

    #optional
    backupsMax="0"
    localBackupDir="/restoreDir"
    pushoverUser=""
    pushoverToken=""
    ###################################

    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup info backup starting now"
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup start_time $(date +%y%m%d_%H%M%S)"

    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: backup starting now'}"
    else
    echo "FHEM-Backup: backup starting now"
    fi

    COLUMNS=200 dpkg-query -l > "$fhemdir"/backup/packages_list.list
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: creating debian informational package list'}"
    else
    echo "FHEM-Backup: creating debian informational package list"
    fi

    dpkg --get-selections | awk '!/deinstall|purge|hold/ {print $1}' > "$fhemdir"/backup/packages.list.save
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: creating debian package list'}"
    else
    echo "FHEM-Backup: creating debian package list"
    fi

    apt-mark showauto > "$fhemdir"/backup/package-states-auto
    apt-mark showmanual > "$fhemdir"/backup/package-states-manual
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: creating debian extended package status'}"
    else
    echo "FHEM-Backup: creating debian extended package status"
    fi

    find /etc/apt/sources.list* -type f -name '*.list' -exec bash -c 'echo -e "\n## $1 ";grep "^[[:space:]]*[^#[:space:]]" ${1}' _ {} \; > "$fhemdir"/backup/sources.list.save
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: creating debian package sources'}"
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: now starting fhem backup'}"
    else
    echo "FHEM-Backup: creating debian package sources"
    echo "FHEM-Backup: now starting fhem backup"
    fi

    if [ ! -e "$localBackupDir" ]
    then
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: Verzeichnis $localBackupDir wird erstellt'}"
    else
    echo "FHEM-Backup: Verzeichnis $localBackupDir wird erstellt"
    fi
    mkdir -p "$localBackupDir"
    else
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: Verzeichnis $localBackupDir bereits vorhanden'}"
    else
    echo "FHEM-Backup: Verzeichnis $localBackupDir bereits vorhanden"
    fi
    fi

    backupfile="$(date +%y%m%d_%H%M%S)_fhem_$backupfilename.tar.gz"

    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: generating backup file: $backupfile'}"
    else
    echo "FHEM-Backup: generating backup file: $backupfile"
    fi
    tar --exclude=backup -cvzf "/$localBackupDir/$backupfile" "$fhemdir" &>/dev/null

    if ! ping -c 1 $mountIp
    then
    perl "$fhemdir"/fhem.pl 7072 "set FHEM.Backup error"
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup info $mountIp not found"
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup end_time $(date +%y%m%d_%H%M%S)"

    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $mountIp nicht erreichbar, stopped'}"
    else
    echo "FHEM-Backup: $mountIp nicht erreichbar, stopped"
    fi
    exit
    else
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $mountIp erreichbar'}"
    else
    echo "FHEM-Backup: $mountIp erreichbar"
    fi
    fi

    localIp=$(ip a s|sed -ne '/127.0.0.1/!{s!^[ t]*inet[ t]*([0-9.]+)/.*$!1!p}')

    if [ ! -e "$localMountPoint" ]
    then
    if [ $debugmode = false ]
    then
    mkdir -p "$localMountPoint"
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $localMountPoint wird erstellt'}"
    else
    echo "FHEM-Backup: $localMountPoint wird erstellt"
    fi
    else
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $localMountPoint bereits vorhanden'}"
    else
    echo "FHEM-Backup: $localMountPoint bereits vorhanden"
    fi
    fi

    if [ "$(ls -A $localMountPoint)" ]
    then
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $localMountPoint nicht leer, kein Mounten notwendig'}"
    else
    echo "FHEM-Backup: $localMountPoint nicht leer, kein Mounten notwendig"
    fi
    else
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $localMountPoint leer, Mounten starten'}"
    else
    echo "FHEM-Backup: $localMountPoint leer, Mounten starten"
    fi

    vorhanden="0"
    mountComplete="//$mountIp/$mountDir $localMountPoint cifs rw,nounix,user=$mountUser,password=$mountPass 0 0"

    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: mountComplete: $mountComplete'}"
    else
    echo "FHEM-Backup: mountComplete: $mountComplete"
    fi

    while read line
    do
    if [ $debugmode = true ]
    then
    echo "pruefzeile : $line"
    fi

    if [ echo "$line" | grep -c "$mountComplete" != 0 ]
    then
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: /etc/fstab: Eintrag bereits vorhanden: $mountComplete'}"
    else
    echo "FHEM-Backup /etc/fstab: Eintrag bereits vorhanden: $mountComplete"
    fi
    vorhanden="1"
    break
    fi

    done > "/etc/fstab"
    fi

    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: Mounts werden aktualisiert'}"
    else
    echo "FHEM-Backup: Mounts werden aktualisiert"
    fi

    mount -a
    sleep 3
    fi

    if [ "$(ls -A $localMountPoint)" ]
    then
    if [ ! -e "$localMountPoint/$mountSubDir/$localIp" ]
    then
    mkdir -p "$localMountPoint/$mountSubDir/$localIp"
    else
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $localMountPoint/$mountSubDir/$localIp existiert bereits'}"
    else
    echo "FHEM-Backup: $localMountPoint/$mountSubDir/$localIp existiert bereits"
    fi
    fi
    find "$localBackupDir" -name '*.*' | while read file

    do
    fileSize="0"
    fileSizeMB=$(du -h $file)
    fileSizeMB=${fileSizeMB%%M*}
    filename=${file##*/}
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $filename ($fileSizeMB MB) wird in den Backupordner verschoben'}"
    else
    echo "FHEM_Backup: $filename ($fileSizeMB MB) wird in den Backupordner verschoben"
    fi
    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 "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup backup $filename"
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup backupMB $fileSizeMB"
    done
    else
    perl "$fhemdir"/fhem.pl 7072 "set FHEM.Backup error"
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup info error while mounting"
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: Mounten nicht erfolgreich, stopped'}"
    else
    echo "FNEM-Backup: Mounten hat anscheinend nicht geklappt, skip."
    fi
    exit
    fi

    #Löschen alter Backups
    if [[ "$backupsMax" != "" && "$backupsMax" != "0" ]]
    then
    perl "$fhemdir"/fhem.pl 7072 "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
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $backupsCurrent Backups vorhanden - nur $backupsMax aktuelle Backups werden vorgehalten - $backupsDelete Backups werden gelöscht'}"
    else
    echo "FHEM-Backup: $backupsCurrent Backups vorhanden - nur $backupsMax aktuelle Backups werden vorgehalten - $backupsDelete Backups werden gelöscht"
    fi
    ls -d "/$localMountPoint/$mountSubDir/$localIp/"* | grep "_fhem_backup.tar.gz" | head -$backupsDelete | xargs rm
    else
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: $backupsCurrent Backups vorhanden - bis $backupsMax aktuelle Backups werden vorgehalten'}"
    else
    echo "FHEM_Backup: $backupsCurrent Backups vorhanden - bis $backupsMax aktuelle Backups werden vorgehalten"
    fi
    fi
    else
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup backupFilesMax no limit"
    fi

    backupsCurrent=ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup backupFiles $backupsCurrent"

    # echo "Mount wieder unmounten"
    umount "$localMountPoint"

    perl "$fhemdir"/fhem.pl 7072 "set FHEM.Backup off"
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup info backup finished"
    perl "$fhemdir"/fhem.pl 7072 "setreading FHEM.Backup end_time $(date +%y%m%d_%H%M%S)"

    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: backup finished'}"
    else
    echo "FHEM-Backup: backup finished"
    fi

    Grüße Jörg

  65. @Jörg Wiemann:
    Danke für deinen Ansatz. Der gefällt mir so gut, dass ich diesen direkt übernommen habe, da ich mich mit diesem Backup-Ansatz sowieso beschäftigen wollte.

    Leider sind aber noch ein paar Bugs enthalten bzw. in deinem Kommentar wurde gewisse Zeichen entfernt.

    Die Hochkommata wurde an mehreren Stellen entfernt. Beispiel
    [code]
    backupsCurrent=ls -A "$localMountPoint/$mountSubDir/$localIp" | grep -c "_fhem_backup.tar.gz"
    [/code]

    Dann fehlten ein paar IF-Abfragen bzw. es ist der der letzte Teil davon enthalten:
    [code]
    if [ "$vorhanden" != "1" ]
    then
    echo "/etc/fstab: Eintrag wird ergänzt: $mountComplete"
    echo "$mountComplete" >> "/etc/fstab"
    if [ $debugmode = false ]
    then
    perl "$fhemdir"/fhem.pl 7072 "{Log3 'FHEM-Backup', 3, 'FHEM-Backup: Mounts werden aktualisiert'}"
    else
    echo "FHEM-Backup: Mounts werden aktualisiert"
    fi
    mount -a
    sleep 3
    fi
    [/code]

    Was mir an deiner Lösung so gut gefällt ist, dass du diverse DPKG/APT-Inhalte in externe Dateien schreibst. Leider werden diese nach /backup kopiert, welches beim Packen aber exkludiert ist. Dies nur am Rande. :-)

    Danke vielmals.

  66. Hallo Jörg,

    erstmal danke für die tolle Anleitung. Gestern Abend hat es sich bezahlt gemacht, dass das Backup immer schön läuft. Die SD Karte im Pi hat sich nach gut 4,5 Jahren verabschiedet.

    Die große Frage nun, wie kann ich das letzte Backup wieder zurück spielen?

    Grüße

    • Hi Felix,
      zuerst wieder regulär FHEM und die notwendigen Pakte (hoffentlich gut dokumentiert?!) per Terminal auf dem RPI installieren.

      Dann das Backupfile (hier: 160126_060205_fhem_backup.tar.gz) auf den RPI übertragen, z.B. in den Ordner "/tmp". Das geht recht einfach bspw. per Filezilla, wobei man sich dort per SFTP (mit den SSH-Logindaten) anmelden kann.

      Der Terminalbefehl für das Zurücksetzen (Entpacken der Backups) lautet dann:
      sudo tar -xvzf /tmp/160126_060205_fhem_backup.tar.gz -C /

      Dann noch ein
      sudo restart
      und alles sollte eigentlich wieder laufen.

      Grüße und ich drücke die Daumen
      Jörg

    • Hallo Jörg,

      es hat geklappt!
      Nimm doch diesen Punkt auch noch oben mit in die Anleitung auf, dann ist diese wirklich komplett.

      Grüße

    • Super, dass es auf Anhieb geklappt hat!
      Guter Punkt von dir, habe den Blogpost um den Gliederungspunkt "Backup zurückspielen" ergänzt.

      Grüße
      Jörg

  67. Habe mein FHEM neu aufsetzen müssen und neuerdings kommt nun

    FHEMBackupOn return value: -1

    in der Log wenn ich das Backup starten lasse - leider wird kein backup mehr erstellt

  68. Ich finde das Backup Script hier ist Gold wert. Was aber auch genial wäre wäre ein Script was auch irgendwie backupt was man so an Paketen installiert hat und was in config files steht die man so angepasst hatte. Klar man kann einfach die Karte ziehen und ein Backup der ganzen Karte mit win32diskimiger oder dd machen, aber nur weil ich mal eben eine smb.cfg angepasst habe oder sowas ein 16 GB Image ziehen? Ich habe soviel zusätzliches an Python zeug allein für das yowsup installiert und ich muss mir jedes mal meine bash history anschauen um nix zu vergessen. Aber Änderungen an Files tauchen da auch nicht auf.

    Gibt's da was?

    Gruß
    Holger

  69. Hallo zusammen,

    neuerdings wird ausser dem eigentlich Backup im Backupverzeichnis folkgende Datei mit der Grösse 0 geschrieben:

    600215_235500_fhem_backup.tar-2016-02-15_23-54-22-741.gz

    Woher könnte dieser Fehler kommen ?

  70. Hallo Jörg,

    ich hab dein tolles Skrip auch schon bei mir eingebaut.

    Macht dein Skript auch einen unmount wenn es fertig ist? Hab einiges altest im meiner fstab stehen gehabt.

    Gruß

  71. Ich hatte auf meinem RaspberryPi noch das Problem, dass die Zeile

    if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]]

    zu einem Fehler führte: "[[ nicht erkannt". Die Lösung war in zwei Zeilen etwas zu ändern:

    if [ "$pushoverToken" != "" -a "pushoverUser" != "" ]

    Also eine eckige Klammer weniger und && durch -a ersetzen.

  72. ... und noch ein Problem: die Größe des Backup-Files wurde bei mir manchmal falsch berechnet (z.B. wenn das File kleiner als 10 MB ist). Die Lösung war die Änderung der Formel in der zweiten Zeile:
    fileSize=$(du -h $file)
    fileSize=(echo $fileSize | grep -oP "([0-9,]{1,3})[BKMG]")
    Dann muss man in den nächsten Zeilen natürlich fileSizeMB durch fileSize ersetzen.

  73. Mist, bei Copy&Paste werden hier die rückwärts Apostrophe nicht angezeigt. Es sollte eigentlich heißen (bitte ! zweimal durch diesen Apostroph ersetzen):

    fileSize=$(du -h $file)
    fileSize="!echo $fileSize | grep -oP '([0-9,]{1,3})[BKMG]'!"

  74. Hi!

    Muss ich dieses Backup-Skript anpassen, wenn ich die Backups lokal auf meinem fhem-Server speichern möchte und nicht auf einem externen NAS-Gerät? Ich habe auf meinem fhem-Server Samba am Laufen und die Freigabe vom Fhem-Backup-Verzeichnis wird als Laufwerk auf meinem Windows-Rechner eingerichtet. Mit anderen Worten: Ich möchte gerne die fhem-Backups von meinem Windows-Rechner abholen lassen, wenn ich am Rechner bin.

    Danke für die Antworten.

  75. Wie muss ich das Backup-Skript anpassen, damit die Fhem-Backups NUR in einem bestimmten lokalen Ordner (nicht auf ein externes NAS) gespeichert werden?

    Danke & Gruß
    Thomas

  76. Ich habe schon im Vorfeld eine Freigabe von meinem NAS-Gerät auf dem Fhem-Server eingebunden und die Datei /etc/fstab entspr. ergänzt. Meine Frage:
    Wie muss ich nun das Backup-Skript anpassen, damit er nicht versucht eine Freigabe zu mounten?

    Danke.

  77. Ich habe da mal einen wichtigen Hinweis zu diesem Artikel, weil ich in diese "Falle" reingetappt bin....das File /etc/sudoers sollte man UNBEDINGT NUR mit "visudo" bearbeiten, NICHT mit nano!

    Visudo prüft auf Fehler vor dem speichern, nano tut das nicht.

    Wenn man wie ich per "nano" einen Syntax-Fehler eintippt und abspeichert, hat man sich anschliessend wunderbar komplett aus Linux ausgesperrt!

    Bei mir hatte "root" keine Berechtigung zum Anmelden per SSH und auch KEIN Kennwort gesetzt...(ist im Setup-Artikel hier auch nicht beschrieben)...somit keine Anmeldung als root möglich und der "pi" user hat nicht genug Rechte...

    Durch das nun kaputte sudoers-File konnte kein sudo mehr ausgeführt werden...sprich ich konnte *nichts* mehr machen, was Superuser Rechte erforderte.

    Um das wieder zu fixen muss man die SD-Karte entweder an ein anderes Linux-System stecken (oder unter Windows mit ext2fds arbeiten) oder versuchen den Raspberry im Recovery-Modus zu booten...alles ziemlich aufwändig.

    Von daher nochmal der ernstzunehmende Hinweis...nur VISUDO verwenden.

    • Hi Christian,
      vielen Dank für deinen Hinweis! Habe ihn bereits im Artikel vermerkt.

      Grüße
      Jörg

  78. Hallo Jörg,
    wie schon erwähnt fände ich es genial wenn man dein Script noch um eine Version 2 ergänzen könnte.
    Nämlich mit diesem Befehl anstatt dem tar Befehl:
    dd if=/dev/mmcblk0 of="$localMountPoint/$mountSubDir/$localIp/dd-Backup/$(date +%y%m%d_%H%M%S)_dd-Backup.img" bs=512

    Ich habe versucht Dein Script entsprechend für mich anzupassen. Aber leider kapiere ich die Abfolge nicht ganz und scheitere dann auch an der weiteren Umsetzung.
    Als erstes setzt Du ein INFO Reading des Dummys auf den Status dass das Backup gestartet wird.
    Dann erstellst Du ein lokales BackupDir auf dem Pi. Und hier ist schon mein erstes Problem. Das ist eine Art TempZwischenspeicher oder?
    Hier wird das TAR erstellt, und später dann weggemoved?
    Das kann ich mit dem dd Kommando aber nicht machen, da ich die ganze SD Card in sich selbst backuppen würde und das würde nicht funktionieren. Ich bräuchte eine weitere HDD oder einen großen USB Sticket den ich als $localBackupDir benutze.

    Der Grund warum ich das Script so cool finde ist, weil Du eine Prüfung und Begrenzung der vorgehaltenen Files behandelst, und auch die Readings updatest.

    Kannst Du so ein dd-Script ggf. auch noch bauen?
    Gruß

    Holger

    • Hallo Jörg,

      wie immer ein genialer Beitrag. Auch ich war eben auf der Suche nach der Möglichkeit, meinen kompletten Pi auf meinem QNAP zu sichern. Ich würde mich Holger sehr gern anschließen und dein Skript mit dem dd-Befehl erweitern. Somit hat man zusätzlich ein komplettes Backup/Image seines PI's!
      Wäre super, wenn du ggf. eine Variable einbauen könntest, die die Möglichkeit eröffnet gleich täglich eine Komplettsicherung durchzuführen.
      Wie Holger schon sagt müsste es mit dem dd-Befehl funktionieren.

      Viele Grüße
      Tim

  79. Hallo Jörg,

    ich hätte noch einen kleinen Anpassungsvorschlag für dein Script...

    Es geht um löschen der Backups nach dem die max. Zahl erreicht ist.

    Ich hab anstatt "xargs rm" "xargs -I{} rm -v {}" eingefügt. Und so das Problem mit Ordner, die Leerzeichen im Namen haben, gelöst.

    Gruß

    Anatoli

    P.S.: Vielen Dank für so viele Infos und Tipps!

  80. Bei mir wird das Skript einfach nicht automatisch ausgeführt. Wenn ich Fhem.Backup aus und wieder anschalte, wird es ausgeführt. Starte ich das Skript über Terminal, wird es ausgeführt....aber automatisch zur festgelegten Zeit wird es nicht ausgeführt.

    Im Log-File sind auch zur Programmierten Zeit keine Einträge zu finden.

    Eine Idee?

  81. Habe deine Anleitung innerhalb von 10 Minuten erfolgreich umsetzen können. Echt genial Jörg und weiter so!!! Macht mir wirklich immer wieder riesig Freude deinen Blog zu lesen und deine Ideen umzusetzen.

    Gibt es auch eine Möglichkeit den Benutzernamen und Passwort für den NAS Mount im Logfile in Fhem auszublenden? Würde dies ungern im Klartext dort drin stehen haben.

    Und wie mein obiger Beitrag wäre ein zweites Skript für ein Raspberry PI Backup/Image riesig! :-)

    Danke!
    Tim

  82. Servus,

    Danke für dieses tolle Beispiel.
    Jedoch will es bei mir nicht so wirklich.
    Ich habe das backup.sh script gemäß Deines Tutorials hinterlegt.
    Leider bekomme ich bei manuellem Aufruf von sudo /opt/fhem/FHEM/backup.sh zum Test direkt eine Fehlermeldung: sudo: /opt/fhem/FHEM/backup.sh: Kommando nicht gefunden

    Hast Du eine Idee was das Problem sein kann?
    Freue mich über jedwede Hilfestellung.

    beste Grüße
    Patrick

    • Hinter dem "sudo" darf kein ":" stehen. Probiers genau so wie im Artikel:
      "sudo /opt/fhem/FHEM/backup.sh"

      Grüße
      Jörg

  83. Hey,

    vielen Dank für die rasche Rückantwort.
    Ich habe es auch so wie im tread benannt eingegeben. Der Doppelpunkt resultiert aus der Ausgabe im terminal nachdem ich den Befehl abgesetzt habe.
    Hier nochmal die komplette Ausgabe:

    pi@raspberrypi:~ $ sudo /opt/fhem/FHEM/backup.sh
    [sudo] password for pi:
    sudo: /opt/fhem/FHEM/backup.sh: Kommando nicht gefunden

    Heute morgen um 6:00 uhr wurde wie erwartet natürlich kein backup abgelegt.

    Hast noch eine idee was ich prüfen kann/sollte?

    beste Grüße
    Patrick

    • Bekommst du den Dateiinhalt mit

      sudo cat /opt/fhem/FHEM/backup.sh

      im Terminal angezeigt? Falls nicht, hast du deine Datei vermutlich an einem anderen Ort gespeichert. In diesem Fall die Datei einfach im richtigen Verzeichnis nochmal neu erzeugen.

      Grüße und viel Erfolg
      Jörg

  84. Hi,

    In der tat ist es so das der komplette Inhalt des scripts angezeigt wird wenn ich den Befehl: sudo cat /opt/fhem/FHEM/backup.sh absetze.

    beste Grüße
    Patrick

    • Sofern du mit dem User "pi" per ssh auf deinem Raspberry Pi eingeloggt bist (laut deinen vorherigen Anhaben ist das ja so), habe ich ehrlich gesagt keinen Schimmer, wo das Problem liegen könnte.

  85. Hi Jörg,

    schade. Aber trotzdem vielen Dank für Deine Mühe ;)
    Toll dein Blog, hoffe Du machst voller Tatendrang weiter so!
    Ich werde in den nächsten Tagen nochmal alles Schritt für Schritt durchgehen und berichten.

    Sollte noch ein Blogleser eine Idee haben, immer gern her damit.

    In diesem Sinne, gut's Nächtle
    Mfg

    • Hallo Jörg,

      ich wollte mich nur mal kurz melden und Dir mitteilen das es nun funktioniert nachdem ich einen dummen Userfehler ausgemerzt habe.

      Ich depp hatte zu Beginn das Script in /opt/fhem/backup.sh hinterlegt. um dies zu bereinigen und in den richtigen Ordner /opt/fhem/FHEM/backup.sh zu bringen, musste ich die Rechte des Ordners kurzzeitig ändern.
      Hierbei ist dann wohl der Zugriff danach nicht mehr korrekt gewesen.

      Nochmal alles gemäß Deines Tuts installiert und schon war alles schön.

      Vielen Dank für Deine tollen Anleitungen

      beste Grüße
      Patrick

  86. Moin Jörg,

    nachdem mir heute Nacht irgendwie die CFG mit den Definitionen für die Aktoren auf 0byte gesetzt wurde, war es an der Zeit, dein Script auch mal an den Start zu bringen.
    Was soll ich sagen... nach einer kleinen Anpassung funktioniert das wunderbar!
    Gesichert wird auf einem DIY NAS unter "nas4free" im 19" mit derzeit 6 x 3TB unter ZFS2. Aber das nur als Hinweis...

    Zur Änderung:
    Ich bin leider ein Linux-DAU, konnte dennoch heraus bekommen, warum das bei mir zu erst nicht funktionierte. Dazu muss ich vorausschicken, das mein NAS NUR aus dem lokalen Netz und NUR von Geräten mit fester IP zu erreichen ist. Dafür aber läuft die Backup- Freigabe unter dem User "ftp" und ist auch als Gast zu erreichen.
    Das bedingt aber auch, das beim Mounten weder Username noch Kennwort benötigt wird; aber leer lassen klappt nicht. Daher habe ich im backup.sh in Zeile 57 den Bereich "username=$mountUser,password=$mountPass," heraus genommen und als Kommentar gesichert. Und nun funktioniert das.
    Wenn ich es denn könnte, hätte ich nun eine "IF THEN" gebaut, die diesen Teil bei leerem User und/oder leerem Passwort heraus nimmt; kann ich aber nicht.

    Nun bleibt nur noch ein Problem über:
    Nach einem erfolgreichen Backup, angestoßen via SSH, verbleibt am Ende eine Fehlermeldung wie folgt:

    Mount wieder unmounten
    umount: /mnt/backup: target is busy
    (In some cases useful info about processes that
    use the device is found by lsof(8) or fuser(1).)

    Warum denn? Ich verstehe die Meldung zwar, aber hab keine Ahnung, wo ich da suchen soll...
    Ist aber nicht so wichtig, weil's ja funktioniert ;)

    DLzG
    Micha

    • Nachtrag:
      Geht doch nicht so wirklich...

      Problem 1:
      Zumindest per SSH wird immer ein Kennwort für den User root verlangt, so bald die Definition in FHEM eingetragen ist. Frage ist also, wie sich das umgehen lässt, da ich davon ausgehe, das es dann aus der "Automatik" heraus ebenfalls nicht ohne Kennwort funktioniert...

      Problem 2:
      Per SSH bekommen ich, vermutlich von Pushover, folgende Fehlermeldung (wobei ich gestehen muss, das ich mit PushOver noch etwas auf Kriegsfuß stehe):
      {"user":"invalid","errors":["user identifier is not a valid user, group, or subscribed user key"],"status":0,"request":"c1c...blablub...43"}

      Ansonsten funktioniert Pushover in FHEM. Ich habe den gleichen Token benutzt, der in FHEM auch für die Alarmmeldungen genutzt wird ...

  87. Hallo Jörg und liebe Mitleser,

    eine Frage habe ich dann aber noch, z.Z habe ich das Problem das der backup Dummy nach dem Backup nicht wieder auf "OFF" getriggert wird und keine Readings des Backups gesetzt werden.
    Nun habe ich verfolgt, dass es mit dem telnet Zugang zutun haben kann.
    Nachdem ich einfach mal den Passwortschutz des telnet Zuganges in der FHEM.CFG auf 0 gesetzt habe, funktionierte es.
    Kann ich das irgendwie umgehen? Es ist doch nicht so ratsam die Abfrage des Passwortes Telnet zu deaktivieren?!

    Freue mich auf eine Antwort.

    beste Grüße
    Patrick

    • Hi Patrick,
      sorry, da musst du wohl auf einen anderen Leser hoffen. Denn zum einen kann ich nicht beurteilen, was du bisher alles mit dem System angestellt hast und zum anderen bin ich da leider auch nicht der Linux-Profi, der bei Problemen dieser Art eine Lösung aus dem Ärmel schüttelt. Wenn ich das Problem auch schon einmal gehabt hätte, würde es vermutlich anders aussehen...

      Grüße
      Jörg

    • Hallo Jörg,

      Danke für Deine rasche Rückmeldung.

      Ich habe das Telnet Passwort nun wieder deaktiviert und es vorerst anderweitig mit einem at *08:30:00 set FHEM.Backup off gelöst.
      So schaltet er den Trigger wenigstens und das automatisierte Backup läuft.

      Einziger Wermutstropfen, die readings fehlen, aber damit kann ich leben.

      beste Grüße
      Patrick

    • Hallo Patrick.

      Ich habe bei mir auch ein Telnet Passwort gesetzt. Ich weiss nicht mehr ob ich das damals im Script geändert hatte, oder das hier in dem Script drinnen ist, aber ich habe in meinem Script einfach noch eine zusätzliche variable gesetzt wo ich ein telnet Passwort mitgeben kann.

      schaut so aus:
      mytelnetPW="p!ssw0rd"

      und jeder telnetaufruf soll einfach dann so aufgerufen werden:

      perl /opt/fhem/fhem.pl 7072 $mytelnetPW "setreading dummy_FHEM.Backup info backup starting now"

      Hoffe es hilft!

      Cu

      Holger

    • Hallo Holger,

      Schön, dass Du Dich meldest.
      Das wäre eine Idee welche ich gern einmal probieren würd.
      Ich hab nur keine blassen Schimmer an welche Stellen ich das genau einfügen soll. Vermute im Backup.sh, ist klar aber wo genau?

  88. Hallo zusammen,

    klasse Sache, hat von Anfang an funktioniert.
    nur jetzt plötzlich hört er bei den docs auf und macht nicht weiter.
    Ich habe das Skript schon einmal neu gemacht und finde einfach keinen Grund.

    Kann evtl. jemand noch einen Tipp geben woran das liegt ?

    Gruß Nils

  89. Hinweis:
    Wer sein FHEM auf eine größere Mascheng umzieht und diese Mascheng ggf. unter der aktuellen Debian-Jessie (lite) betreibt, sollte unbedingt darauf achten, dsa sudo überhaupt installiert ist. Denn per default wird bei Jessie wohl sudo nicht mit installiert.

  90. *prust* Mascheng = Maschine = Gerät = ...
    Ist mir dann auch aufgefallen, das ich im ortsüblichen Wortschatz geschrieben habe, aber nachträglich editieren geht ja nicht ;)

  91. Habe folgendes Problem- ich habe alles so gemacht wie du es beschrieben hast. Nur leider geht es nicht- wenn ich es aus puty herraus versuche zu testen mit fhem als user kommt er hat keine berechtigung das Backup auf Q zu verschieben.

    Wenn ich es als root user versuche dann kommt /backup schon vorhanden und er macht nicht weiter.

    Kann mir da jemand helfen?

  92. ... also die Meldung "/Backup schon vorhanden" kommt bei mir auch jedes mal. Ist ja auch klar, wenn man sich das Batch anschaut. Denn der Ordner ist ja angelegt und enthält die bereits angelegten Backups. Besagt im Grunde nur, das der Batch (jaja, Script meinetwegen) dieses Verzeichnis nicht neu anzulegen braucht. Das ist keine Fehlermeldung, sondern nur ein Hinweis (@Jörg: Korrigiere mich bitte, wenn ich falsch liege).

    Ansonsten sieht dein Problem ganz klar nach einem Rechteproblem aus. Hast du denn mal versucht, manuell eine Datei aus dem /backup Verzeichnis auf "Q" zu kopieren (was immer auch "Q" sein mag...)? Hast du die entsprechenden Rechte auf beiden Seiten korrekt gesetzt? Darf der User fhem auf "Q" schreiben und löschen?
    In diese Richtungen würde ich jetzt mal suchen, so aus meiner DAU- Sicht ...

    • Richtig, "$localMountPoint bereits vorhanden" heisst nichts anderes, wie der Variablenname schon sagt, dass der Einhängepunkt im Dateisystem des FHEM-Servers bereits vorhanden ist. Ist also nur ein Hinweis, dass hier alles passt.

      "Q" ist der Netzwerkname meines QNAP-NAS". Entsprechend packe ich die Backups auch nach /Q/backup. Sieht wirklich nach nem Rechteproblem aus. Sowas kann echt nerven, gerade wenn man damit noch nicht viele Erfahrungen gesammelt hat. Am einfachsten erstmal jedem User alle Rechte für das betreffende Verzeichnis einräumen. Dann testen und Schritt für Schritt die nicht gewünschten Berechtigungen wieder deaktivieren.

      Grüße und viel Erfolg
      Jörg

      PS: Es gibt direkt eine "Antworten"-Funktion nach Kommentaren auf oberster Ebene. Dann landet die Antwort etwas eingerückt und gruppiert an richtiger Stelle. Sonst wird es schnell unübersichtlich...

    • ... ähhh ja ... Den "Antworten" - Link übersehe ich irgendwie immer ^^ Sorry, ich versuche es mir hinter die Ohren zu schreiben ;)

  93. Hallo,
    habe das Problem das nach einem zurückspielen des Backups ich nicht mehr auf FHEM und Tabletui zugreifen kann. Woran könnte es liegen bzw. wer kann bei der Fehler suche behilflich sein?

    Gruß
    Niwa

  94. Hi,
    sollte es beim Dummy "FHEM:Backup" statt "attr FHEM.Backup event-on-change-reading state"nicht doch "attr FHEM.Backup event-on-update-reading state" heißen? Bei mir funktioniert es nur mit diesem Attribut.
    Übrigens DANKE!!! für die tolle Seite, die immer wieder gerne besuche und die mir immer wieder gute Antworten auf meine Fragen gibt.
    LG Karl

  95. ... da ich nun mehrere FHEM- Systeme laufen habe (eine Hauptinstanz auf einem XEON, eine Heizungssteuerung (Brenner, Pumpen) auf einem PI so wie einen PI als MultiGateway), ergab sich die Problematik, das man die Backups nicht mehr auseinander halten konnte.
    Ich habe leider keine Ahnung von ShellScripten, hoffe aber, das ich das so korrekt umgesetzt habe:
    Im Kopf habe ich eine Variable "backupName" hinzugefügt, welche den Namen des jeweiligen PI enthält. Denkbar wäre auch der jeweilige Hostname, aber da hab ich keine Plan, wie ich den dort einfügen kann.
    Dann habe ich alle Stellen im Script gesucht, welche "_fhem_backup..." enthalten und an Stelle fhem die Variable eingefügt, was ich mir an anderen Stellen abgeschaut habe.
    z.B. Zeile ~29:

    tar --exclude=backup -cvzf "/$localBackupDir/$(date +%y%m%d_%H%M%S)_$backupName_backup.tar.tar.gz" "/opt/fhem" &>/dev/null

    Damit sollte das Backup jetzt eindeutig zuzuordnen sein (hoffe ich).

    Passt das so?

    • Hi Michael,
      wenn du das vorliegende Script verwendest, landen die Sicherungsdateien jeweils in Unterordnern, sortiert nach IP-Adressen der jeweiligen FHEM-Server. Das sollte im Grunde genügen, oder? Wenn du das anders haben möchtest, musst du wohl einfach selbst mal etwas testen. Dann siehst du ja sofort, ob es sich so verhält, wie du es dir vorstellst. Dein Ansatz sieht zumindest auf den ersten Blick machbar aus.

      Grüße
      Jörg

    • ...pffft ... Du hast vollkommen recht ;) War wohl schon zu müde nach dem ganzen Geraffel mit der Brenner/Umwälzpumpen/Ladepumpen/Zirkulationspumpen/Ventilstellungen/MQTT/... ^^
      BTW: Mein Prototyp der Brennersteuerung (Öl-Zentral mit Zirkulation WW, im Sommer mit Solar) läuft mehr als zufriedenstellend. Da folgt bald eine richtige Platine (mehrere; Trennung 230V~ / Niederspannung). Hat da wer Interesse?

  96. Hallo,
    dank der super Anleitung und Korrektur einiger von mir eingebauten Fehlern läuft jetzt das Backup, d.h. ich geh mal davon aus.
    Auf jeden Fall hab ich schon zehn *.tar.gz Files :-)
    Was mich stört:
    Beim Ausführen von: sudo /opt/fhem/FHEM/backup.sh
    erhalte ich insgesamt elf mal eine Fehlermeldung:

    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.

    ich weiss leider nicht, was dies zu bedeuten hat.

    Grüße
    Peter

    • ... das schaut nach einem Tippfehler in deiner Definition aus. Vom ShellScript kann es m.E. nicht kommen, da fhem davon nichts mitbekommt, so lange im Script nicht explizit zurückgemeldet wird..

  97. Ich hab nochmal alles geprüft. Welche Definition meinst du denn?

    Der Fehler erscheint jedes mal, wenn im backup.sh der Befehl:
    perl /opt/fhem/fhem.pl 7072 "......" aufgerufen wird.

    Das Backup wird durchgeführt, ich erhalte *.tar.gz Files mit ca 23 MB.

    Wenn ich mir das DummyDevice FHEM.Backup anschaue, so steht bei mir unter Readings nur "state on 2016-10-24 16:21:42"
    Die Zeilen "Backup" und "MB" fehlen.

    Wenn ich das Backup manuell über das Dummy FHEM.Backup starte bleibt der Zustand auf "on".
    Ist das ok so, oder müsste der Zustand automatisch wieder auf "off" schalten.

    • ... bei mir schalte die alle wieder auf OFF, sobald das Backup erledigt ist, egal ob manuell oder automatisch angestoßen.
      Das deutet erneut auf einen Fehler in deiner Definition, ggf. im Dummy.

      Zum Vergleich meine Definition, die auf allen drei Instanzen einwandfrei läuft:

      #Automatisches Backup um 04:00 Uhr starten
      define backup_run at *04:00:00 set backup_dy on
      define backup_set notify backup_dy:on {system ("sudo -u root /opt/fhem/FHEM/backup.sh &")}
      #dummy backup_dy
      define backup_dy dummy
      attr backup_dy devStateIcon off:edit_save@gray:on on:edit_save@orange:off
      attr backup_dy event-on-change-reading state
      attr backup_dy room System
      attr backup_dy setList off on
      attr backup_dy webCmd :

    • Das mit dem Passwort in der "backup.sh" hat so nicht funktioniert.
      Ich hab mich dann in der "fhem.cfg" mit Telnet beschäftigt.
      Leier gibt es im Web viel zu viele Konfigurationen, die ohne Datum sind und daher nicht mehr aktuelle Parameter beschreiben.
      Letztendlich funktioniert es mit folgender Konfiguration in der fhem.cfg:
      ------------------------------------------------------
      define telnetPort telnet 7072 global
      attr telnetPort allowfrom 127\.0\.0\.1
      #attr telnetPort SSL
      define allowed_telnetPort allowed
      attr allowed_telnetPort globalpassword meinPasswort
      attr allowed_telnetPort validFor telnetPort
      -------------------------------------------------------

      Danke an alle, die sich um mein Problem gekümmert haben.

  98. Danke für deine schnelle Antwort.
    Hab jetzt deine Definition per copy -paste in meine fhem.cfg reingeschrieben.

    Leider der selbe Effekt wie bisher. Ein gz-File wird geschrieben, die Fehlermeldungen kommen immer noch der Status bleibt auf on.
    Unter Readings kommt auch nichts ausser "state on"

    • Vorab: Benutze mal den "Antworten" Button; habe ich auch schon Megger bekommen ;)

      Hmmm. Komisch. Dateien alles UTF-8 ohne BOM, UNIX?
      Ansonsten ggf. noch mal die backup.sh und die Dateirechte checken... Mehr fällt mir im Moment auch nicht ein...

    • Beim manuellen Starten über die Shell wird angezeigt:
      ------------------------------------------------------------
      pi@FH4PB:~ $ sudo /opt/fhem/FHEM/backup.sh
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      /backup bereits vorhanden
      PING 192.168.178.30 (192.168.178.30) 56(84) bytes of data.
      64 bytes from 192.168.178.30: icmp_seq=1 ttl=64 time=3.16 ms

      --- 192.168.178.30 ping statistics ---
      1 packets transmitted, 1 received, 0% packet loss, time 0ms
      rtt min/avg/max/mdev = 3.166/3.166/3.166/0.000 ms
      192.168.178.30 erreichbar
      /Q/backup bereits vorhanden
      /Q/backup nicht leer, kein Mounten notwendig
      /Q/backup/rpi/fhem/192.168.178.155 existiert bereits
      161024_180210_fhem_backup.tar.gz (816K /backup/161024_180210_fhem_backup.tar.gz MB) wird in den Backupordner verschoben
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      161024_185008_fhem_backup.tar.gz (17 MB) wird in den Backupordner verschoben
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      ls: cannot access /Q/backup/rpi/fhem/192.168.178.155: No such file or directory
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Mount wieder unmounten
      umount: /Q/backup: not mounted
      ----------------------------------------------------

      Aber die Backups scheinen ok.

    • ... kopier doch zum Test noch mal das Script neu in den Ordner und achte darauf, das es UTF... ist.
      Aber wie gesagt kann ich nur raten... Immer doof, wenn man selber nicht davor sitzt...

    • ... notfalls nimm mal Kontakt zu mir auf; meinen Namen anklicken und du landest auf einer meiner Webseiten. Im Impressum steht meine Mail- Addy.

    • Das Script basiert darauf, dass man fhem ohne Passwort betreibt. Falls ein Passwort gesetzt ist, muss man das in der jeweils angemeckerten Zeile "perl /opt/fhem/fhem.pl 7072 "setreading FHEM.Backup info backup starting now" jeweils noch setzen. Wie sieht denn so eine Zeile bei Dir aus, Peter? Was passiert wenn du diese Zeile direkt in der Shell eingibst?
      Gruß Hermann

    • FHEM läuft bei mir mit Passwort. Das scheint das Problem zu sein.
      Wenn ich im Terminal
      perl /opt/fhem/fhem.pl 7072 "setreading Backup_system info backup starting now"
      aufrufe, kommt die Fehlermeldung:
      Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
      Wie kann ich das Passwort einbauen, bzw. muss ich das Passwort entfernen?

    • Das Passwort wird direkt nach dem telnet-Port (7072) angegeben. Man kann es einmal im Kopf des Scripts setzen, also mit "myTelnetPW="xxxxx" und dann in den Aufrufen so ergänzen: "perl /opt/fhem/fhem.pl 7072 $myTelnetPW "setreading FHEM.Backup info backup starting now". Entsprechend bei den anderen Zeilen auch.

    • Das mit dem Passwort in der "backup.sh" hat so nicht funktioniert.
      Ich hab mich dann in der "fhem.cfg" mit Telnet beschäftigt.
      Leier gibt es im Web viel zu viele Konfigurationen, die ohne Datum sind und daher nicht mehr aktuelle Parameter beschreiben.
      Letztendlich funktioniert es mit folgender Konfiguration in der fhem.cfg:
      ------------------------------------------------------
      define telnetPort telnet 7072 global
      attr telnetPort allowfrom 127\.0\.0\.1
      #attr telnetPort SSL
      define allowed_telnetPort allowed
      attr allowed_telnetPort globalpassword meinPasswort
      attr allowed_telnetPort validFor telnetPort
      -------------------------------------------------------

      Danke an alle, die sich um mein Problem gekümmert haben.

  99. Vielen Dank für das klasse Script!!
    Für Freunde von Pushbullet Benachrichtigungen habe ich folgende Änderungen am Script durchgeführt.

    pushoverUser="" ->gelöscht
    pushoverToken="" -> geändert in -> pushbulletKey="xxXXxx"

    ...
    if [[ "$pushoverToken" != "" && "pushoverUser" != "" ]] -->geändert in
    --> if [[ "$pushbulletKey" != "" ]]

    ...
    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
    --> geändert in
    --> curl -u "$pushbulletKey:" https://api.pushbullet.com/v2/pushes -d type=note -d title="FHEM $localIp" -d body="Backup mit $fileSizeMB MB wird erstellt"

    fertig.

    Vielen Dank für das 1A BackupScript

  100. Hallo liebe Speziallisten,
    leider muss ich das Thema mit den Problem, dass sich ein Backup auf fritz.nas nicht durchführen lässt, nochmals ansprechen. Kämpfe mich schon tagelang damit herum.
    Mit meinem QNAP hat es bis jetzt auch einwandfrei geklappt.
    Habe unter anderem die Empfehlungen von Leonid genauestens eingehalten (sec=ntlmv2)
    Hier mein Logfile:

    2016.11.16 23:10:38 3: starteFileBackupSh return value: -1
    /backup bereits vorhanden
    PING fritz.nas (10.0.0.138) 56(84) bytes of data.
    64 bytes from fritz.box (10.0.0.138): icmp_seq=1 ttl=64 time=0.379 ms

    --- fritz.nas ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.379/0.379/0.379/0.000 ms
    fritz.nas erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    mountComplete: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    /etc/fstab: Eintrag bereits vorhanden: //fritz.nas/ST2000DL-003-9VT166-01 /Q/backup cifs username=chappo,password=xxxxxxxx,iocharset=utf8,sec=ntlmv2
    Mounts werden aktualisiert
    Retrying with upper case share name
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Mounten hat anscheinend nicht geklappt, skip.

    Vielleicht hat doch jemand für mich den entscheidenden Tipp, bevor ich mir noch ein paar Nächte damit um die Ohren schlage :-(

    Danke Chappo

    • Hallo nochmals,
      ich muss obige Anfrage gleich relativieren, denn das Problem wurde teilweise behoben, da ich nicht den Namen des Laufwerkes, das an die Fritzbox angeschlossen ist eingeben musste, sondern den Fritzboxnamen. Sorry.
      Leider ist das Problem aber trotzdem nicht gelöst, das jetzt folgende Fehlermeldung kommt:
      Mounts werden aktualisiert
      /media/fritzbox-nas/fhem/10.0.0.140 existiert bereits
      161118_030000_fhem_backup.tar.gz (28 MB) wird in den Backupordner verschoben
      cp: „/media/fritzbox-nas/fhem/10.0.0.140/161118_030000_fhem_backup.tar.gz“ konnte nicht geschlossen werden: Eingabe-/Ausgabefehler
      9 Backups vorhanden - bis 10 aktuelle Backups werden vorgehalten

      LG Chappo

  101. So jetzt hab ich das Problem endgültig gelöst und nebenbei brav Linux (über das Thema mounten) gelernt. Hat aber unzählige Stunden (und ein paar Tage) gedauert.

    Des Rätsels Lösung:
    mountSubDir="ST2000DL-003-9VT166-01/fhem"

    Bei der Fritzbox kann man nicht so wie bei meinem Qnap einfach als mountSupDir irgend einen Unterordner angeben, sondern muss davor noch den von der Fritzbox vergebenen Laufwerksnamen (ST2000DL-003-9VT166-01 natürlich mit / getrennt) angeben.

    Vielleicht erspart sich jemand dadurch viel Stunden :-)

    LG Chappo

  102. Hallo Jörg ich bin nach deiner Beschreibung vorgegangen und bekomme immer eine Fehlermeldung wenn ich sudo /opt/fhem/FHEM/backup.sh eingebe kommt

    /backup bereits vorhanden
    PING 192.168.0.101 (192.168.0.101) 56(84) bytes of data.
    64 bytes from 192.168.0.101: icmp_seq=1 ttl=64 time=0.357 ms

    --- 192.168.0.101 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.357/0.357/0.357/0.000 ms
    192.168.0.101 erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag wird ergänzt: //192.168.0.101/backup /Q/backup cifs username=Passwort-Test,password=Test-12345,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    Mounten hat anscheinend nicht geklappt, skip.

    Das Backup soll auf eine WD MyCloud 2TB dort habe ich ein Ordner backup angelegt muss ich dem noch irgendwelche rechte geben? stehe etwas auf dem schlauch? Danke schonmal

    • Hi Andre,
      der User, der per CIFS auf den Ordner (Share) zugreifen soll, braucht eben Schreibrechte. Hier scheint es zu hapern. Versuch doch mal im Windowsbrowser mit diesem Benutzer auf das Share zuzugreifen. Wenn das klappt, klappts auch mit dem Script. Wenn nicht, dann musst du die Berechtigung der Freigabe entsprechend korrigieren.

      Grüße
      Jörg

  103. Hallo Jörg, erstmal danke für deine ausführlichen Beschreibungen.
    Beim Versuch meinen Qnap einzubinden komm ich aber leider absolut nicht weiter. Hab auch, wie in den Kommentaren hier des öfteren erwähnt, auf dem NAS eine Datei in dem Ordner erstellt, hat aber leider mein Problem auch nicht gelöst. Mit dem Finder hab ich unter smb://192.168.178.20/Sicherung vollen Zugriff mit Schreibrechten, also müsste ja bei den NAS-Einstellungen alles passen. Nach dem Start wird mir auf dem Server unter "Online-Benutzer" auch der Benutzer Fhem angezeigt.

    mountIp="192.168.178.20"
    mountDir=„SICHERUNG“
    mountUser=„Fhem“
    mountPass=„XXX“
    mountSubDir=„Fhem“
    localMountPoint="/Q/backup"

    pi@raspberrypi:~ $ sudo /opt/fhem/FHEM/backup.sh
    /backup bereits vorhanden
    PING 192.168.178.20 (192.168.178.20) 56(84) bytes of data.
    64 bytes from 192.168.178.20: icmp_seq=1 ttl=64 time=10.4 ms

    --- 192.168.178.20 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 10.452/10.452/10.452/0.000 ms
    192.168.178.20 erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    mountComplete: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    /etc/fstab: Eintrag bereits vorhanden: //192.168.178.20/„SICHERUNG“ /Q/backup cifs username=„Fhem“,password=„XXX“,nounix,iocharset=utf8,sec=ntlmssp 0 0
    Mounts werden aktualisiert
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(6): No such device or address
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Mounten hat anscheinend nicht geklappt, skip.

  104. Hallo zusammen,

    erstmal vielen Dank für den Text, den Code und die ganzen Hilfen. Ich habe das Backup entsprechend eingerichtet und es scheint auch alles soweit zu laufen. Allerdings lauten die letzten Zeilen bei einem Backup im Log immer wie folgt:

    161206_135713_fhem_backup.tar.gz (27 MB) wird in den Backupordner verschoben
    Unknown command *TelnetPasswort", try help.
    Unknown command *TelnetPasswort", try help.
    Unknown command *TelnetPasswort", try help.
    Unknown command *TelnetPasswort", try help.
    Unknown command *TelnetPasswort", try help.
    11 Backups vorhanden - nur 10 aktuelle Backups werden vorgehalten - 1 Backups werden gelöscht
    Unknown command *TelnetPasswort", try help.
    Mount wieder unmounten

    Ich hatte zunächst gedacht, dass ein Problem (siehe im Blog weiter oben) beim Telnetzugang vorliegen würde (Stichwort State wieder auf off setzen und weitere Details in den Readings setzen), aber diese Werte werden bei mir scheinbar alle gesetzt.

    Kann mir jemand sagen, wo die Meldungen herkommen und wie ich diese beheben kann?

    Vielen Dank schon im Voraus.
    Grüße
    Maik

  105. Hallo,
    habe eine Fritzbox mit Festplatte als NAS gemountet, funktioniert hat es leider nur einmal.
    eine erneute Sicherung bleibt immer bei:

    2016.12.08 08:54:13 3: FHEMBackupOn return value: -1
    /backup bereits vorhanden

    hängen.

    Wenn ich auf den RPI schaue, merke ich, dass das Verzeichnis immer gemountet ist. Ich vermute dort den Fehler, evtl. funktioniert der unmount nicht.

    Woran könnte das liegen?

    habe im Script folgende Zeile für die Fritzbox angepasst:

    mountComplete="//$mountIp/$mountDir $localMountPoint cifs username=$mountUser,password=$mountPass,nounix,iocharset=utf8,sec=ntlmv2"

    Danke für die Hilfe

  106. Hallo,
    Danke für die tolle Beschreibung... aber leider kann ich machen was ich will, die READINGS werden einfach nicht geschrieben. Das BACKUP funktioniert tadellos und wird schön auf mein QNAP geschrieben.
    ich erhalte von Backup Etart bis Ende in der Log folgene Meldungen:
    "
    2016.12.08 16:29:10 3: FHEMBackupOn return value: -1
    2016.12.08 16:29:10 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    /backup bereits vorhanden
    PING 192.168.178.10 (192.168.178.10) 56(84) bytes of data.
    64 bytes from 192.168.178.10: icmp_seq=1 ttl=64 time=1.06 ms

    --- 192.168.178.10 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 1.063/1.063/1.063/0.000 ms
    192.168.178.10 erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: //192.168.178.10/Datei-Backup /Q/backup cifs username=admin,password=s#07@qnn.Tein,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.10/Datei-Backup /Q/backup cifs username=admin,password=s#07@qnn.Tein,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.10/Datei-Backup /Q/backup cifs username=admin,password=s#07@qnn.Tein,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.10/Datei-Backup /Q/backup cifs username=admin,password=s#07@qnn.Tein,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.10/Datei-Backup /Q/backup cifs username=admin,password=s#07@qnn.Tein,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.10/Datei-Backup /Q/backup cifs username=admin,password=s#07@qnn.Tein,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag bereits vorhanden: //192.168.178.10/Datei-Backup /Q/backup cifs username=admin,password=s#07@qnn.Tein,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    /Q/backup/FHEM/192.168.178.66 existiert bereits
    161208_162910_fhem_backup.tar.gz (36 MB) wird in den Backupordner verschoben
    2016.12.08 16:29:39 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    2016.12.08 16:29:39 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    2016.12.08 16:29:40 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    2016.12.08 16:29:40 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    161208_162732_fhem_backup.tar.gz (36 MB) wird in den Backupordner verschoben
    2016.12.08 16:29:44 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    2016.12.08 16:29:44 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    2016.12.08 16:29:44 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    2016.12.08 16:29:44 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    2016.12.08 16:29:45 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    2016.12.08 16:29:45 1: telnet SSL/HTTPS error: SSL accept attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
    Use of uninitialized value in numeric gt (>) at /opt/fhem/fhem.pl line 444.
    Mount wieder unmounten
    "

    kann da jemand bitte vieleicht helfen ?

    • Hi,
      hatte das gleiche Problem, geholfen hat mir folgendes:

      fhem.cfg:
      define telnetPort telnet 7072 global
      attr telnetPort allowfrom 127\.0\.0\.1
      #attr telnetPort SSL 1
      define allowed_telnetPort allowed
      attr allowed_telnetPort password DEINPASSWORT
      attr allowed_telnetPort validFor telnetPort

      backup.sh:
      oben zusätzlich diese Variable definieren
      myTelnetPW="DEINPASSWORT"

      und jedes perl /opt/fhem/fhem.pl 7072 "set FHEM...
      ersetzen/ergänzen:
      perl /opt/fhem/fhem.pl 7072 $myTelnetPW "set FHEM...

      Ich hoffe das hilft dir/euch weiter.
      Grüße Dave

  107. Hallo Dave,

    leider NEIN, ich bekomme zwar keine SSL Fehlermeldungen mehr aber die READINGS werden trotzdem nicht in den Backup dummy geschrieben.

    Ich habe auf dem RaspberryPi wo FHEM läuft SSH aktiviert, hat das evtl. damit zu tun ?

  108. Hallo Jörg,

    die Anleitung ist mal wieder hervorragend. Hab mir Dein neues Buch gekauft und bin begeistert.

    Ich habe mich vorhin mit dem Thema Backup beschäftigt und es funktioniert.
    Das einzige an dem ich gerade verzweifle ist das ich die Readings im FHEM.Backup nicht angezeigt bekomme.

    Hast Du mir einen Tip?

    Gruß
    Michael

  109. Hallo,

    vielen Dank für die tolle Anleitung. Ich verzweifelke leider ein wenig. Zum einen sagt mit FHEM das Backup sei vorhanden, allerdings scheint die Datei nicht im Ordner zu landen. Zum anderen klappt das mounten nicht CIFS würde nicht unterstützt, was ich ich in meiner Synology abver eingestellt habe. Hast Du eventuell eine Idee?

    Danke und viele Grüße
    Thorsten

    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 4.720/4.720/4.720/0.000 ms
    erreichbar
    /Q/backup bereits vorhanden
    /Q/backup leer, Mounten starten
    mountComplete: ///volume1/backup /Q/backup cifs username=,password=,iocharset=utf8,sec=ntlm 0 0
    mountComplete: ///volume1/backup /Q/backup cifs

    ...

    /etc/fstab: Eintrag bereits vorhanden: ///volume1/backup /Q/backup cifs username=,password=,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    mount error: cifs filesystem not supported by the system
    mount error(19): No such device
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error: cifs filesystem not supported by the system
    mount error(19): No such device
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error: cifs filesystem not supported by the system
    mount error(19): No such device
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error: cifs filesystem not supported by the system
    mount error(19): No such device
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error: cifs filesystem not supported by the system
    mount error(19): No such device
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Mounten hat anscheinend nicht geklappt, skip.

  110. Hallo,

    danke für die gute und ausführliche Anleitung. Habe es manuell getest und es scheint zu funktionieren. Jedoch wird immer nur das aktuelle Backup gespeichert und direkt wieder überschrieben. Wo kann ich die Anzahl der zu speichernden Backups anpassen? Auf deinem Bild von deinem Server ist ja eine Historie zuerkennen.

    Danke!

  111. Hallo Zusammen,

    mit Interesse habe ich soeben dies umgesetzt.
    Ich habe aber folgendes Problem:

    Sobald ich die Zeilen in /etc/sudoers eintrage, habe ich keinen Zugriff mehr per Web auf FHEM. Putty geht.

    fhem ALL=(ALL) NOPASSWD: ALL
    oder
    fhem ALL=(ALL) NOPASSWD:/opt/fhem/FHEM/backup.sh

    Lösche ich die Zeilen wieder, geht es nach dem Neustart wieder.
    Fhem läuft, alle Logs laufen weiter, nur die Weboberfläche geht nicht mehr.

  112. Könnte ich zum Besipiel auch LOG Dateien mit in dem shell script inkludieren, damit die dann einzeln und separat auf die NAS geschoben werden ?

    oder macht es da Sinn dann direkt eine LOG Datei auf der NAS anzulegen und fortzuschreieben?

    dann wäre die Frage wie :-)

  113. Hallo,
    ich habe den Scrips so wie in der Anleitung beschrieben erstellt.
    Alles funktioniert soweit auch gut.
    Nur wenn ich die max. Anzahl Backups auf 10 begrenzen möchte, wird immer das aktuelle Backup, das gerade erstellt wurde, gelöscht und nicht das älteste.
    Woran kann das liegen?
    Oder was muss geändert werden?
    Ich kenne mich leider nicht Perl aus.
    Und warum wird die eine Meldung "mountComplete: ... "so oft wiederholt?

    Auszug aus dem Logfile.

    2017.01.30 05:00:00 3: FHEMBackupOn return value: -1
    /fhem-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=0.440 ms

    --- 192.168.178.1 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.440/0.440/0.440/0.000 ms
    192.168.178.1 erreichbar
    /Q/fhem-backup bereits vorhanden
    /Q/fhem-backup leer, Mounten starten
    mountComplete: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag bereits vorhanden: //192.168.178.1/fritz.nas\USBDISK3-0-01\fhem-backup /Q/fhem-backup cifs username=raspberry,password=raspberry,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    /Q/fhem-backup//192.168.178.60 existiert bereits
    170130_050000_fhem_backup.tar.gz (180 MB) wird in den Backupordner verschoben
    11 Backups vorhanden - nur 10 aktuelle Backups werden vorgehalten - 1 Backups werden gelöscht
    Mount wieder unmounten

    Ende Log:

    Gruß Jörg

  114. Hallo,
    ich muss meine Aussage über das Löschen vom aktuellen Backup wiederrufen.
    Ich habe manuell alte Backup gelöscht, damit ein aktuelle erhalten bleibt und manuell das Backup destartet.
    Nach dem es fertig war, habe ich wieder auf das NAS Laufwerk geschaut und nun habe 2 Backups vom 30.01.17, das was ich gerade erstellt habe und das automatisch von heute früh.
    Vorher hatte ich nur Backups bis zum 29. gesehen und bin davon ausgegangen, dass das neu gelöscht wurde.

    Gruß Jörg

  115. Super funktion
    Ich habe mir beim GMX kostenlosen Speicher eingerichtet 2GB und den als Online Speicher in der fritz.box angebunden so das meine Backups in der Cloud abgelegt werden.

  116. Guten Abend!

    Erstmal ein großes Lob für den Blog ... hier verbringe ich aktuell eine Menge Zeit. Die restliche Zeit geht dann noch mal für das Umsetzen drauf und natürlich beim Probleme lösen. Und hier komme ich dann auch gleich zu meinem.

    Habe alles wie oben beschrieben umgesetzt und am Ende mein Synology DS214play NAS eingebunden. Soweit so gut, aber ...

    ... ich bekomme bei den "Reading" nur eine Zeile gezeigt und keine Details.

    ... die Backup Files kommen nicht auf meinem NAS an.

    Hier der Auszug aus dem Log:

    /backup bereits vorhanden
    PING 192.168.178.27 (192.168.178.27) 56(84) bytes of data.
    64 bytes from 192.168.178.27: icmp_req=1 ttl=64 time=0.597 ms

    --- 192.168.178.27 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 0.597/0.597/0.597/0.000 ms
    192.168.178.27 erreichbar
    /Q/backup bereits vorhanden
    /Q/backup nicht leer, kein Mounten notwendig
    /Q/backup/rpi/fhem/192.168.178.25 existiert bereits
    170421_164103_fhem_backup.tar.gz (34 MB) wird in den Backupordner verschoben
    Mount wieder unmounten
    umount: /Q/backup: not mounted

    Auf dem RasPi sind die *gz-Files da und auch so, wie sie auf dem NAS auftauschen sollten. Nur hier, wie gesagt, ist der Ordner leer.

    Würde mich freuen wenn einer einen Tipp hat (der mit dem Telnet Port war es leider nicht).

    Danke und Grüße
    Heinz

  117. Was mache ich falsch, wenn nicht gewartet wird, bis das Backup fertig ist? Die Datei wird viel zu früh verschoben, während das Backup noch erstellt wird.

    Weiterhin wird die Ausgabe im Log nicht mehr unterdrück mitteld &>/dev/null

    wenn ich allerdings beim tar befehl das v weglasse, dann wird die Ausgabe unterdrückt.

    • hab den Fehler gefunden, hatte beim Kopieren eine Zeile verloren :)

  118. Hat jemand schon ein Script mit CRFS Token?

    • Hi,
      Daran habe ich auch Interesse, da es in FHEM leider keine Rückmeldung vom Script gibt.
      LG

  119. Hallo Jörg,

    klasse, vielen Dank für die Bereitstellung des Skripts.
    Grundsätzlich funktioniert bei mir das Backup - jedoch nur einmalig und nicht automatisiert jeden Morgen.
    Hast Du nen Tipp für mich?

  120. Hallo Jörg,

    ich bekomme seit nun mehr 1 Monat keine automatischen Backups mehr erstellt und leider erst jetzt dazu mal den Fehler zu reporten. Folgendes erhalte ich nach manueller Ausführung des Backup Skriptes auf meinem RPi:

    /Q/backup leer, Mounten starten
    mountComplete: //192.168.178.100/backup /Q/backup cifs username=*****,password=*****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.100/backup /Q/backup cifs username=*****,password=*****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.100/backup /Q/backup cifs username=*****,password=*****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.100/backup /Q/backup cifs username=*****,password=*****,iocharset=utf8,sec=ntlm 0 0
    mountComplete: //192.168.178.100/backup /Q/backup cifs username=*****,password=*****,iocharset=utf8,sec=ntlm 0 0
    /etc/fstab: Eintrag bereits vorhanden: //192.168.178.100/backup /Q/backup cifs username=*****,password=*****,iocharset=utf8,sec=ntlm 0 0
    Mounts werden aktualisiert
    mount error(5): Input/output error
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    mount error(13): Permission denied
    Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
    Mounten hat anscheinend nicht geklappt, skip.

    Hast du vielleicht einen Tipp, wie ich das Problem eingrenzen und beheben kann?

    • Ich habe mal das sec=ntlm durch sec=ntlmv2 getauscht. Aber danach erhalte ich nach wie vor folgende Fehler:
      mount error(5): Input/output error
      Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
      mount error(13): Permission denied
      Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
      mount error(22): Invalid argument
      Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
      Mounten hat anscheinend nicht geklappt, skip.

      Ein manueller mount mittels folgendem Befehl, schlug auch fehl:
      sudo mount -t cifs //IPAdresseQNAP/backup /Q/backup/ -o username=Benutzer,password=*****,sec=ntlmv2
      mount error(22): Invalid argument
      Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

      Hier scheint also generell ein Thema mit dem mounten vorzuliegen?!
      QNAP NAS ist pingbar. Auch ein Reboot des Raspberry brachte keine Verbesserung.

    • Lässt sich die Freigabe denn bspw. von einem Windows PC über den "Arbeitsplatz" einbinden? Wenn das nicht funktioniert, ist ja evtl. die CIFS-Freigabe im QNAP nicht mehr richtig konfiguriert. Evtl. in der Zwischenzeit ein NAS-Update gemacht?...

      Grüße
      Jörg


Dein Kommentar

Trackbacks sind deaktiviert.