MyPython - BackUp 2 FTP (einbindung über Python; FTP Upload)

Begonnen von Gear, 07 November 2021, 13:16:20

Vorheriges Thema - Nächstes Thema

Gear

Moin Moin Zusammen!

Ich habe da ein Python-Script gebastelt, welches ein FHEM BackUp via FTP auf einen externen Server oder NAS hochlädt.
Man kann die BackUp Files welche auf dem FTP Server gespeichert werden begrenzen, selbiges geht auch für den FEHM eigenen Ordner BackUps.

In meiner BackUp Routine mache ich eine SQL Reduzierung, danach wird ein BackUp ausgeführt und im Anschluss wird das BackUp hochgeladen.


Einrichtung
Wir führen folgende Befehle auf dem FHEM-Server durch und starten ihn neu.
Es wird PIP und FHEM für die Kommunikation zwischen dem Script und FHEM installiert.
sudo apt-get install python3-pip
pip3 install fhem


Nun fügen wir das Update-Control für den RepetierServer hinzu, Update nicht vergessen, um das Script zu laden.
update add https://raw.githubusercontent.com/TyroTechSoft/FHEM-MyPython/main/controls_98_BackUp2FTP.txt

Jetzt müssen wir ein WEB Device anlegen, über dass das Script auf FHEM zugreift.
HTTPS:
define WEB.Python FHEMWEB 8086 global
attr WEB.Python HTTPS 1
attr WEB.Python sslVersion TLSv12:!SSLv3

HTTP:
define WEB.Python FHEMWEB 8086 global

Dieses Web Device sichern wir jetzt mit "basicAuth" ab, wie unter folgenden Link.
> Device Name: WEB.Python und nicht WEB
https://wiki.fhem.de/wiki/FritzBox_Webzugriff_absichern

Nun legen wir ein Dummy an für die Ausgabe des Script.
Es müssen noch die Serverdaten eingetragen werden:

- <FTP-Uploadordner> = Am besten einen separaten Unterordner anlegen, in dem Ordner darf sich nichts befinden bis auf die BackUps!!!
- <Adresse FTP-Server> = Hier die IP / Adresse des FTP-Servers anlegen.
- <BackUp-Max-FHEM> = Hier die Zahl der maximal verbleibenden BackUps auf FHEM angeben. (Ich habe 1 drin stehen, somit bleibt immer das letzte BackUp bestehen)
- <BackUp-Max-FTP> = Hier die Zahl der maximal verbleibenden BackUps auf dem FTP-Server angeben. (Ich habe 10 drin stehen, somit bleibt immer die letzten 10 BackUps bestehen)
- <FTP-Pass> = Hier den FTP-Passwort angeben
- <FTP-User> = Hier den FTP-User angeben

defmod Dummy.BackUp2FTP dummy
attr Dummy.BackUp2FTP userattr BU-MaxFileFHEM BU-MaxFileFTP BU-HostFTP BU-UserFTP BU-PassFTP BU-DirFTP BU-DirFHEM
attr Dummy.BackUp2FTP BU-DirFHEM /opt/fhem/backup
attr Dummy.BackUp2FTP BU-DirFTP <FTP-Uploadordner>
attr Dummy.BackUp2FTP BU-HostFTP <Adresse FTP-Server>
attr Dummy.BackUp2FTP BU-MaxFileFHEM <BackUp-Max-FHEM>
attr Dummy.BackUp2FTP BU-MaxFileFTP <BackUp-Max-FTP>
attr Dummy.BackUp2FTP BU-PassFTP <FTP-Pass>
attr Dummy.BackUp2FTP BU-UserFTP <FTP-User>
attr Dummy.BackUp2FTP group BackUp2FTP


Testen können wir das ganze mit folgendem Befehl: (Wenn schon vorhanden, dann bitte das vorhandene verwenden.)
Bitte hier folgende Daten anpassen:

- <fhemIP> = IP des FHEM Servers (localhost)
- <fhemPort> = Port von WEB.Python (8086)
- <fhemProtocol> = http / https
- <fhemUser> = User von WEB.Python
- <fhemPass> = Pass von WEB.Python (Bitte ein Passwort ohne Leerzeichen nehmen)
- <BackUp-Device> = Name des BackUp Dummys (Dummy.BackUp2FTP)

"python3 /opt/fhem/FHEM/98_BackUp2FTP.py <fhemIP> <fhemPort> <fhemProtocol> <fhemUser> <fhemPass> <BackUp-Device> &"

Um den Upload nach einem BackUp zu starten, kann man folgenden Notify nutzen:

defmod Notify.BackUp2FTP.Upload notify global:backup.done "python3 /opt/fhem/FHEM/98_BackUp2FTP.py <fhemIP> <fhemPort> <fhemProtocol> <fhemUser> <fhemPass> <BackUp-Device> &"

Folgende BackUp Routine wird bei mir jede Nacht um 2 Uhr angestoßen:
- Reduktion der SQL Daten um 2 Uhr.
- SQL-Dump erstellen, um die Daten in das BackUp zu integrieren.
- BackUp starten.
- BackUp hochladen.

Das Script kann folgende Einträge in der LogFile hinterlassen:
- BackUp2FTP: No Args given!
> es wurden nicht alle Argumente angegeben: <fhemIP> <fhemPort> <fhemProtocol> <fhemUser> <fhemPass> <BackUp-Device>

- BackUp2FTP: FHEM Error: Cannot find or access FHEM Dir!!
> In der Regel existiert hier der backup Ordner nicht. (/opt/fhem/backup)
>> Für den Fall muss hier erstmals ein BackUp ausgeführt werden.

- BackUp2FTP: FTP Error: Cannot connect!
> Hier gibt es zwei mögliche Fehler, Falsche FTP Daten oder kein Zugriffsrecht auf den FTP Ordner in den das BackUp hochgeladen werden soll.

- BackUp2FTP: BackUp wurde hochgelade!
> Upload des BackUps war erfolgreich.

Bei Problemen bitte in die LogFile schauen und den dort gelisteten Fehler posten, Danke. =)

Um ein Feedback ob es funktioniert würde ich mich freuen.

Beste Grüße
Gear
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

is2late

Super, genau das habe ich gesucht. Vielen Dank! Werde es umgehend probieren

LG Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox