Dieser Beitrag ist mehr oder weniger eine Fortsetzung von diesem Artikel: https://bangertech.de/exec-scripte-openhab-von-der-webui-aktualisieren-neustarten-herunterfahren/
Nachdem das Exec Binding installiert wurde legen wir ein Backup Verzeichnis an und konfigurieren openHAB so dass es dort die Backups speichert.
Natürlich könnt Ihr auch das Standard Verzeichnis welches schon in der openhabian Installation angelegt wird verwenden (var/lib/openhab/backups) dann müsst Ihr die nächsten Schritte nicht vornehmen.
Mit dieser Zeile erstelle ich das Verzeichnis: (dieses könnt Ihr frei wählen müsst aber darauf achten das in der openHAB config das selbe Verzeichnis hinterlegt wird)
sudo mkdir /var/lib/openhab/backup
Dann öffne ich die openHAB config mit sudo nano /etc/default/openhab
Dort füge ich dann das oben erstellt Verzeichnis unter OPENHAB_BACKUPS ein
Dann erstellen wir ein Script. Ich erstelle dieses in /home/skripte
sudo nano backup.sh
Im Script selber nutzen wir aktuell noch (Stand: 04.03.23) die eingebaute openhabian Backup Funktion
Hier kommt es darauf an ob Ihr das Voreingestellte Verzeichnis von openhabian nutzt (/var/lib/openhab/backups) oder das selbst erstellte Verzeichnis (/var/lib/openhab/backup)
#!/bin/bash
sudo openhab-cli backup /var/lib/openhab/backups/recent-backup.zip
set -x
echo "system is backed up"
exit 0
#!/bin/bash
sudo openhab-cli backup /var/lib/openhab/backup/recent-backup.zip
set -x
echo "system is backed up"
exit 0
Dann machen wir das Script ausführbar:
sudo chmod +x backup.sh
Nun fügt Ihr das neu angelegte Skript noch der exec.whitelist hinzu mit:
Mit cd /etc/openhab/misc in das Verzeichnis wechseln dann mit sudo nano exec.whitelist die Zeile sh /home/skripte/backup.sh hinzufügen
Im nächsten Schritt legen wir dann ein Exec Thing und die dazugehörigen Items an:
Grundsätzlich könnten wir das Skript schon über openHAB ausführen jedoch wollen wir natürlich auch die Datei direkt im Browserfenster herunterladen.
Linux Systeme:
Falls Ihr das ganze auf einem z.b. Raspberry Pi oder anderen Arm System installieren wollt scrollt weiter zum Raspberry Pi Part 😉
Dazu nutze ich aktuell noch einen Docker Container “Filestash” (Stand: 04.03.23)
In meinem Fall habe ich auf meinem openHAB Host Docker & Docker-Compose installiert. Falls Ihr das noch nicht getan habt könnt ihr hier https://bangertech.de/docker-docker-compose-auf-dem-raspberrypi/ dieser Anleitung folgen.
Dann benötigen wir natürlich eine docker-compose Datei, welche in einem eigens erstellten Verzeichnis liegt, diese lege ich so an:
sudo mkdir /home/openhab/docker-compose-data
Dann erstellen wir das Verzeichnis für Filestash (Ihr befindet euch im Verzeichnis /home/openhab/docker-compose-data) :
sudo mkdir filestash
Jetzt geht Ihr wieder mit cd /home/openhab/docker-compose-data/filestash in das Filestash Verzeichnis und legt dort ein weiteres Verzeichnis an:
sudo mkdir data
Dieses Verzeichnis bleibt erstmal unberührt.
Nun erstellt Ihr in /home/openhab/docker-compose-data/filestash die docker-compose.yml Datei:
sudo nano docker-compose.yml
version: '2'
services:
app:
container_name: filestash
image: machines/filestash
restart: always
environment:
- APPLICATION_URL=
- GDRIVE_CLIENT_ID=<gdrive_client>
- GDRIVE_CLIENT_SECRET=<gdrive_secret>
- DROPBOX_CLIENT_ID=<dropbox_key>
- ONLYOFFICE_URL=http://onlyoffice
ports:
- "8334:8334"
# volumes:
# - ./data:/app/data/state
onlyoffice:
container_name: filestash_oods
image: onlyoffice/documentserver
restart: always
security_opt:
- seccomp:unconfined
Die Zeile volumes: muss dabei erstmal aus kommentiert bleiben.
Nun startet Ihr den Container wie üblich mit sudo docker-compose up -d
Nachdem der Container läuft ruft Ihr die Adresse auf: http://EUREIP:8334 und vergebt dann ein Passwort.
Im nächsten Schritt müsst Ihr ein neues Terminal Fenster öffnen und dann folgende Zeile eingeben um die Container Daten in das vorhin angelegte Verzeichnis /home/openhab/docker-compose-data/filestash/data zu kopieren. (Achtung der Container muss während dessen laufen)
sudo docker cp filestash:/app/data/state /home/openhabian-test/docker-compose-data/filestash/data
Jetzt könnt Ihr den Container stoppen und dann in der docker-compose.yml Datei die Zeilen volumes aktivieren.
Nun werden die App Daten angelegt bzw. in das Verzeichnis verschoben und der Container speichert alle vorgenommenen Konfiguration zukünftig ab.
Wenn Ihr nun die Adresse http://EUREIP:8334 öffnet und euch mit dem vorhin angelegten Passwort einloggt bekommt Ihr folgendes Fenster zu sehen:
Hier könnt Ihr verschiedene Zugriffsarten usw. wählen. In unserem Fall benötigen wir nur SFTP und unten die PASSTHROUGH Methode (diese ist frei wählbar und Ihr könnt auch eine andere Authentifizierung wählen)
Auch hier könnt Ihr dann bei Strategy zwischen direct, password_only & username_and_password wählen.
Ich habe mich hier für username_and_password entschieden. Hier muss dann jedesmal (falls Cookies des Browsers gelöscht wurden) der Benutzername und das Passwort eingegeben werden um euch mit dem Host (openhabian) zu verbinden.
Dann gebt Ihr den Hostnamen, Benutzer, Passwort und den Pfad zur Backup Datei (in unserem Fall /var/lib/openhab/backup/) ein.
Jetzt wechseln wir zu den Settings auf der linken Seite.
Hier könnt Ihr etliche Einstellungen vornehmen. Welche uns aber interessieren sind diese:
Hier wird bestimmt welche IP Adresse bzw. welches System Filestash bzw. den SFTP Browser in ein iFrame einbinden darf.
Dort wird dann die IP des openHAB Systems eingetragen http://EUREIP:8080 und die Haken bei Enable active protection… entfernt.
Und schon ist es möglich über die openHAB WebFrame Card den SFTP Browser aufzurufen und die Backup Datei herunterzuladen. Sieh weiter unten bei Widgets.
Raspberry Pi & Arm Systeme:
Dazu nutze ich aktuell noch einen Docker Container “FileBrowser” (Stand: 04.03.23)
In meinem Fall habe ich auf meinem openHAB Host Docker & Docker-Compose installiert. Falls Ihr das noch nicht getan habt könnt ihr hier https://bangertech.de/docker-docker-compose-auf-dem-raspberrypi/ dieser Anleitung folgen.
Dann benötigen wir natürlich eine docker-compose Datei, welche in einem eigens erstellten Verzeichnis liegt, diese lege ich so an:
sudo mkdir /home/docker-compose-data
Dann noch ein Verzeichnis für FileBrowser
cd /home/docker-compose-data
sudo mkdir filebrowser
Im Verzeichnis /home/docker-compose-data/filebrowser lege ich dann noch eine Verzeichnis database an und erstelle darin eine leere Datei filebrowser.db , diese muss auch leer bleiben.
sudo mkdir database
cd /home/docker-compose-data/filebrowser/database
sudo touch filebrowser.db
Im nächsten Schritt gehen wir zurück in das filebrowser Verzeichnis und legen dort die eigentliche Konfigurations Datei settings.json an.
cd /home/docker-compose-data/filebrowser
sudo nano settings.json
Dort fügen wir dann folgende Zeilen ein.
{
"port": 80,
"baseURL": "",
"address": "",
"log": "stdout",
"database": "/database/filebrowser.db",
"root": "/srv",
}
Nachdem Ihr die Datei gespeicht habt könnt Ihr die docker-compose.yml Datei im filebrowser Verzeichnis anlegen
version: "3"
services:
filebrowser:
container_name: filebrowser
image: filebrowser/filebrowser:latest
volumes:
- /var/lib/openhab/backups:/srv
- ./database/filebrowser.db:/database/filebrowser.db
- ./settings.json:/config/settings.json
ports:
- 8999:80
environment:
- TZ=Germany/Berlin
- PUID=1000
- PGID=1000
restart: unless-stopped
Der interne Port 80 wird dabei auf den Linux Port 8999 umgeleitet.
Bei dem ersten Volume (/var/lib/openhab/backups) kommt es jetzt darauf an wo ihr die Backups speichert. Das hier ist die voreingestellte Location von openhabian.
Speichern und schließen und schon kann der Container mit sudo docker-compose up -d gestartet werden.
Im Browser gebt Ihr dann http://EUREIP:8999 ein. Der Benutzername und das Passwort ist: admin
Unter Settings könnt Ihr hier etliche Einstellungen vornehmen, das würde aber hier jetzt den Rahmen sprengen 😉
Jetzt könnt Ihr diesen FileBrowser ganz einfach mittels einer WebFrame Card in die PopUp Page des 1way Buttons packen.
Widgets:
Ich habe dazu ein eigenes Widget mit PopUp Funktion angelegt welches Ihr hier findet: https://github.com/BangerTech/openHAB3Widgets/tree/main/Buttons
Um diese zu nutzen benötigt Ihr noch eine weiter Page in openHAB um die PopUP Funktion nutzen zu können.
Dazu legt Ihr einfach eine Layout Page (in meinem Fall: Name filestash) an und fügt dort die WebFrame Card ein:
Hier fügt Ihr nur die Source Url ein, in unserem Fall http://192.168.2.199:8334
Jetzt könnt Ihr das 1way-Button Widget von meiner Github Seite auch schon in eine beliebige Seite einfügen.
In der Konfiguration des Widgets ist es jetzt wichtig die PageID für das PopUP zu hinterlegen in meinem Fall habe ich ja die Seite filestash eigens dafür angelegt.
Zusätzlich könnt Ihr dann natürlich noch Icons hinterlegen und den Namen des Buttons ändern. Als Item fügt Ihr einfach das backup Ausführung Item ein.
Nun wurde soweit alles angelegt und Ihr könnt in der Oberfläche ganz einfach das Update anstoßen und herunterladen.
Wie gesagt beim ersten mal müsst Ihr euch nur noch mit dem Benutzernamen und Passwort der Zugriff zum Host System hat einloggen.
Da der ganze Weg doch etwas umständlich ist versuche ich das ganze in Zukunft noch zu optimieren um evtl. einen anderen Weg zu finden um die Backup Dateien herunterladen zu können.
Hi Michael, danke für die vielen guten OpenHab Tutorials. Mit diesem hier (OH Backup in der WebUI) habe ich jedoch ein paar Schwierigkeiten.
Ich habe Docker Compose auf meinem rPi3 installiert nach deiner Anleitung. Portainer beispielsweise läuft problemlos. Wenn ich aber versuche Filestash zu starten, bekomme ich eine Fehlermeldung – diese lautet wie folgt:
Error: no matching manifest for linux/arm/v7 in the manifest list entries
Wie komme ich hier weiter?
Hallo Georg,
sorry ich überarbeite gerade den Beitrag bzw. das Script. Sollte heute Abend online sein und dann auch funktionieren;-)
Lg
Michi
Super, freue mich drauf. Wie gesagt, sind deine Skripte eine großartige Hilfe.
Eine Verständnisfrage: Wenn ich jetzt mittels “sudo apt-get purge docker-ce” docker wieder entferne, muss ich dann auch noch docker-compose irgendwie entfernen und ist dann alles quasi “sauber”, dass ich nochmal neu mit deiner neuen Anleitung starten kann?
Servus Georg,
ist schon online und sollte funktionieren;-)
Docker und docker-compose musst du nicht deinstallieren.
Würd ich so lassen da du sie sowieso nochmal brauchst und die Installationen gleich ist.
Du musst nur den alten Container entfernen bzw auch das alte Verzeichnis von Filedash.
Lg
Funktioniert alles tadellos. Wunderbar und vielen Dank.
Einen kleine Verbesserungsvorschlag hätte ich noch: Bei der Anlage der Page im Bereich “rPi” steht zum einen noch “Filestash” drin für den Namen der Page. Außerdem hast du unten noch den alten Filestash Port angegeben (8334) – ich glaube für den Filebrowser müsste es hier 8999 sein, oder?
Ansonsten vielen vielen Dank!
Diese Fehlermeldung bekomme ich wenn ich den Filebrowser starten will.
Habe es mehrmal nach anleitung versucht aber immer das gleiche Ergebnis.
Traceback (most recent call last):
File “/usr/local/bin/docker-compose”, line 8, in
sys.exit(main())
File “/usr/local/lib/python3.9/dist-packages/compose/cli/main.py”, line 81, in main
command_func()
File “/usr/local/lib/python3.9/dist-packages/compose/cli/main.py”, line 200, in perform_command
project = project_from_options(‘.’, options)
File “/usr/local/lib/python3.9/dist-packages/compose/cli/command.py”, line 60, in project_from_options
return get_project(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/command.py”, line 152, in get_project
client = get_client(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/docker_client.py”, line 41, in get_client
client = docker_client(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/docker_client.py”, line 124, in docker_client
kwargs = kwargs_from_env(environment=environment, ssl_version=tls_version)
TypeError: kwargs_from_env() got an unexpected keyword argument ‘ssl_version’
Hallo
Ich habe Openhab 4 auf meinen Rasberry Pi installiert .
Dann nach diese anleitung Docker installiert und dann den Filebrowser leider bekomme ich immer ein Fehlermeldung mit der ich nichts anfangen kann.
Ansonsten funktioniert das erstellen vom Backup nur leider bekomme ich den Filebrowser nicht ans laufen.
Hier die Fehlermelung vielleicht kann mir jemand einen Tip geben?
Traceback (most recent call last):
File “/usr/local/bin/docker-compose”, line 8, in sys.exit(main())
File “/usr/local/lib/python3.9/dist-packages/compose/cli/main.py”, line 81, in main command_func()
File “/usr/local/lib/python3.9/dist-packages/compose/cli/main.py”, line 200, in perform_command project = project_from_options(‘.’, options)
File “/usr/local/lib/python3.9/dist-packages/compose/cli/command.py”, line 60, in project_from_options return get_project(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/command.py”, line 152, in get_project client = get_client(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/docker_client.py”, line 41, in get_client client = docker_client(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/docker_client.py”, line 124, in docker_client kwargs = kwargs_from_env(environment=environment, ssl_version=tls_version)
Frohe Weihnachten Dirk
Moin, ich hab leider das selber Problem. Sobald ich einen Container starten will, kommt diese Fehlermeldung!?
Was tun?
Traceback (most recent call last):
File “/usr/local/bin/docker-compose”, line 8, in
sys.exit(main())
File “/usr/local/lib/python3.9/dist-packages/compose/cli/main.py”, line 81, in main
command_func()
File “/usr/local/lib/python3.9/dist-packages/compose/cli/main.py”, line 200, in perform_command
project = project_from_options(‘.’, options)
File “/usr/local/lib/python3.9/dist-packages/compose/cli/command.py”, line 60, in project_from_options
return get_project(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/command.py”, line 152, in get_project
client = get_client(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/docker_client.py”, line 41, in get_client
client = docker_client(
File “/usr/local/lib/python3.9/dist-packages/compose/cli/docker_client.py”, line 124, in docker_client
kwargs = kwargs_from_env(environment=environment, ssl_version=tls_version)
TypeError: kwargs_from_env() got an unexpected keyword argument ‘ssl_version’