16. Oktober 2020
OpenHAB2 - Mühsam ernährt sich das Eichhörnchen
Einige Notizen (keine vollständige Anleitung: bin selbst Anfänger) zu OpenHAB2, inkl. Backup
Die Einrichtung von OpenHAB2 nach der holprigen Installation ist erstmal nicht so schwierig, man bekommt es leicht ans Rennen. Aber:
- Die Software bringt ihre eigene Nomenklatur mit: Bindings, Services, Things, Items, Channels. Wozu das alles gut ist, habe ich bisher noch nicht verstanden.
- MQTT ist nicht ab Werk dabei und muss nachinstalliert werden
- Die Konfiguration ist völlig wir. Konfigurationsdateien? Gibt es an zwei verschiedenen Orten. Außerdem noch Paper UI für die Konfiguration. Wo speichert das die Konfiguration?
- Der Systemstart dauert extrem lange. 10 Minuten lang rödelt der Raspi auf 90% CPU, und das wo ich bisher nur eine Steckdose eingebunden habe...
Ich werde vermutlich auch Home Assistant ausprobieren. Das ist mir eh sympathischer, da Python-basiert.
Andererseits gefällt mir die Android APP von OpenHAB2, insb. die Möglichkeit, per Mikro (über Google Spracherkennung) Befehle an die Software zu übermitteln - auch wenn ich noch nicht weiß, was ich da noch konkret konfigurieren muss.
Ich habe bisher manuell folgende Konfigurationsdateien angelegt:
Zum Anlegen habe ich die Unterstützung des Sitemap Designers (oder so ähnlich) im Browser verwendet.
Datei /etc/openhab2/items/kronocken.items
Hier ist die bisher einzige Steckdose konfiguriert:
Group Home "Kronocken" <house> ["Building"]
Group GF "Erdgeschoss" <groundfloor> (Home) ["GroundFloor"]
Group FF "Erster Stock" <firstfloor> (Home) ["FirstFloor"]
Group C "Keller" <cellar> (Home) ["Basement"]
Group OU "Draußen" <garden> (Home) ["Outdoor"]
Group GF_LivingRoom "Wohnzimmer" <sofa> (Home, GF) ["LivingRoom"]
Group GF_Kitchen "Küche" <kitchen> (Home, GF) ["Kitchen"]
Group GF_Bathroom "Badezimmer" <bath> (Home, GF) ["Bathroom"]
Group FF_Bedroom "Schlafzimmer" <bedroom> (Home, FF) ["Bedroom"]
Group FF_KidsRoom "Kinderzimmer" <girl_3> (Home, FF) ["Room"]
Group FF_Bathroom "Badezimmer" <bath> (Home, FF) ["Bathroom"]
Group C_Basement "Keller" <cellar> (Home, C) ["Basement"]
Group OU_Driveway "Auffahrt" (Home, OU) ["Outdoor"]
Group OU_Terrace "Terrasse" <terrace> (Home, OU) ["Terrace"]
Switch GF_LivingRoom_Power "Steckdose 1" <poweroutlet> (GF_LivingRoom, gPower) ["Switch", "Switchable"] {mqtt=">[mqtt_service:/cmnd/steckdose1:power:ON:1],>[mqtt_service:/cmnd/steckdose1:power:OFF:0]"}
Switch FF_Bedroom_Power "Steckdose 2" <poweroutlet> (FF_Bedroom, gPower) ["Switch", "Switchable"] {channel=""}
Group:Switch:OR(ON, OFF) gPower "Steckdose" <poweroutlet> (Home) ["Switch", "Switchable"]
Datei /etc/openhab2/sitemaps/kronocken.sitemap
sitemap kronocken label="Kronocken" {
Frame label="Erdgeschoss" icon="groundfloor" {
Group item=GF_LivingRoom
Group item=GF_Kitchen
Group item=GF_Bathroom
}
Frame label="Erster Stock" icon="firstfloor" {
Group item=FF_Bedroom
Group item=FF_KidsRoom
Group item=FF_Bathroom
}
Frame label="Keller" icon="cellar" {
Group item=C_Basement
}
Frame label="Draußen" icon="garden" {
Group item=OU_Driveway
Group item=OU_Terrace
}
Frame {
Text label="Steckdose" icon="poweroutlet" {
Default item=GF_LivingRoom_Power label="Wohnzimmer"
Default item=FF_Bedroom_Power label="Schlafzimmer"
}
}
}
Diverse andere Dateien...
... habe ich im Backup unter userdata/config/org/openhab gefunden. Das sind anscheinend die Dateien mit Konfigurationsdaten, die ich im"Paper UI" angelegt habe. Dazu gehört unter anderem die Datei mqtt.config mit dem Inhalt
:org.apache.felix.configadmin.revision:=L"1"
broker.pwd="openhabian"
broker.url="tcp://localhost:1883"
broker.user="openhabian"
service.pid="org.openhab.mqtt"
Sprich, hier ist der MQTT Broker konfiguriert, den ich über das MQTT Binding definiert habe.
Die Datei addons.config enthält die Liste der installierten Add-Ons.
Backup und Restore
Mit Hilfe von Skripten auf Windows- und Linux-Seite und ssh habe ich eine einfache Backup- und Restore-Möglichkeit gefunden (hoffe ich...).
Windows-Seite
Skript backup.cmd
@echo off
setlocal
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ldt=%ldt:~0,14%
ssh -i .ssh\id_rsa pi@192.168.178.21 -t "backup"
scp -i .ssh\id_rsa pi@192.168.178.21:/home/pi/openhab-backup.zip backups\backup-%ldt%.zip
set DATEIGROESSE=0
for %%I in (backups\backup-%ldt%.zip) do set DATEIGROESSE=%%~zI
if not exist backups\backup-%ldt%.zip echo Backup ist fehlgeschlagen - Backup-Datei fehlt && goto :fehler
if %DATEIGROESSE% EQU 0 echo Backup ist fehlgeschlagen - Backup-Datei ist leer. && goto :fehler
if %DATEIGROESSE% GTR 0 echo Backup erfolgreich, Dateigroesse %DATEIGROESSE%
endlocal
goto :EOF
:fehler
endlocal
exit /b 1
Skript restore.cmd
@echo off
setlocal
set backup_file=%1
if not defined backup_file echo Bitte eine Datei aus backups\ als Parameter beim Aufruf angeben && goto :fehler
if not exist %backup_file% echo Backup ist fehlgeschlagen - Backup-Datei fehlt && goto :fehler
scp -i .ssh\id_rsa %backup_file% pi@192.168.178.21:/home/pi/openhab-backup.zip
if errorlevel 1 echo SCP ist fehlgeschlagen. && goto :fehler
ssh -i .ssh\id_rsa pi@192.168.178.21 -t "restore"
if errorlevel 1 echo Restore ist fehlgeschlagen. && goto :fehler
echo Fertig.
endlocal
goto :EOF
:fehler
endlocal
exit /b 1
Linux-Seite
Datei /home/pi/.ssh/authorized_keys
command="/home/pi/openhab-backup",no-agent-forwarding,no-port-forwarding ssh-rsa AAA...
Datei /home/pi/openhab-backup
#!/bin/bash
. /etc/profile.d/openhab2.sh
#echo "Befehl: $SSH_ORIGINAL_COMMAND"
case "$SSH_ORIGINAL_COMMAND" in
"backup")
sudo $OPENHAB_RUNTIME/bin/backup openhab-backup.zip
sudo chown pi openhab-backup.zip
;;
"scp -f /home/pi/openhab-backup.zip")
$SSH_ORIGINAL_COMMAND
;;
"scp -t /home/pi/openhab-backup.zip")
$SSH_ORIGINAL_COMMAND
;;
"restore")
echo Das wird mehrere Minuten dauern...
sudo systemctl stop openhab2
sudo $OPENHAB_RUNTIME/bin/restore openhab-backup.zip
sudo systemctl start openhab2
echo Fertig.
;;
*)
echo "Access denied: $SSH_ORIGINAL_COMMAND"
exit 1
;;
esac
Sinn und Zweck der Dateien
Die Datei .ssh/authorized_keys (in der ab "ssh-rsa" alles aus der id_rsa.pub von der Windows-Seite kopiert ist) sorgt dafür, dass mit diesem Schlüsselpaar nur genau das Skript openhab-backup ohne Kennworteingabe ausgeführt werden kann. Innerhalb von openhab-backup wird mit $SSH_ORIGINAL_COMMAND auf das vom Windows-Client übergebene Kommando zugegriffen. Nur ganz bestimmte Kommandos sind erlaubt. Die OpenHAB-Umgebungsvariablen werden zu Beginn aus der Datei /etc/profile.d/openhab2.sh ausgelesen, insb. damit $OPENHAB_RUNTIME definiert ist. Die scp -f und scp -t Befehle sind für Backup (Übertragung from server to client) und Restore der Datei (Übertragung from client to server) - so arbeitet scp intern.
Das Windows-Programm backup.cmd erlaubt ein Backup der OpenHAB-Konfiguration. Per ssh wird zunächst auf dem Linux-Rechner ein Backup angelegt und dieses dann per scp zum Windows-Rechner übertragen und dort im Verzeichnis backups abgelegt, wobei ein Zeitstempel im Dateinamen ergänzt wird.
Das Windows-Programm restore.cmd arbeitet sozusagen genau umgekehrt. Dabei muss aber der Dateiname der Backup-ZIP-Datei explizit angegeben werden.
Labels: Backup, OpenHAB 2, scp, Smart Home, ssh