Wäre es nicht toll wenn wir openHAB bzw. das komplette System von der Benutzer Oberfläche aus aktualisieren, neustarten oder herunterfahren können?
Durch das Exec Binding ist das kein Problem!
1. Binding installieren:
Zunächst einmal muss dazu natürlich das Binding Exec und die Regex Transformation installiert werden.
2. Benutzer Rechte vergeben:
Dann müssen wir dem Benutzer “openhab” (kommt auf eure Konfiguration an) zum super user hinzufügen:
sudo adduser openhab sudo
Der Benutzer (in meinem Fall openhab) sollte jetzt eigens für Ihn ausführbare Kommandos zugewiesen bekommen.
Diese Datei legen wir wie folgt an:
sudo nano -f /etc/sudoers.d/DATEINAMENWÄHLEN
Dann fügt Ihr folgende Zeilen ein um den Benutzer das herunterfahren usw. ohne passwort zu erlauben.
# Allow openhab user to execute shutdown, poweroff, and systemctl commands
openhab ALL=(ALL) NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/systemctl, /sbin/reboot
Wenn Ihr mein Script zum updaten benutzt müsst Ihr dem Nutzer openhab alle Rechte erteilen da hier auch der Befehl autoremove ausgeführt wird. Also gebt Ihr anstatt der obrigen Zeile diese Zeile in die sudoers.d Datei ein.
openhab ALL= NOPASSWD:ALL
Jetzt testen wir ob der Benutzer die Rechte erhalten hat
sudo -u openhab /bin/bash
sudo shutdown -r
Falls alles geklappt hat sollte der Benutzer “openhab” im Stande sein das System herunterzufahren.
3. Skript anlegen:
Nun müssen wir das eigentliche Skript erstellen.
Dazu wechselt Ihr in ein beliebiges Verzeichnis. Wie oben beim Befehl zu sehen wähle ich hier: /home/openhabian-test
Somit gehen wir mit cd /home/openhabian-test in das Verzeichnis und erstellen mit sudo nano update.sh das Skript.
#!/bin/bash
exit_status() {
if [ $? -eq 0 ]
then
echo "* Befehl erfolgreich ausgeführt. *\n"
else
echo " [Error] Befehl mit Fehler ausgeführt! \n"
read -p "Der letzte Befehl wurde mit einem oder mehreren Fehlern ausgeführt. Wollen Sie das Script beenden? (yes/no)" answer
if [ "$answer" == "yes" ]
then
exit 1
fi
fi
}
start() {
echo "***>>> System wird aktualisiert <<<***\n"
}
upgrade() {
sudo apt update -qq;
exit_status
sudo apt upgrade -y -qq;
exit_status
}
cleanUp() {
sudo apt autoremove -y -qq;
exit_status
}
exitUpdate() {
echo ">>>> Aktualisierung des Systems erfolgreich abgeschlossen <<<<\n"
exit
}
#Funktionsreihe
start
upgrade
cleanUp
exitUpdate
Jetzt muss das Script noch ausführbar gemacht werden mit
sudo chmod +x upgrade.sh
und noch der Whitelist hinzugefügt werden.
Dies findet Ihr im Verzeichnis: -> /etc/openhab/misc
mit sudo nano exec.whitelist öffnet Ihr diese Liste
Hier fügt Ihr diesen Pfad ein:
sh /home/openhabian-test/update.sh
Jeder Pfad (Script) muss in dieser Liste in einer eigenen Zeile stehen.
4. Things & Items anlegen:
Im nächsten Schritt benötigen wir dann noch einige Things und Items:
Exec Thing anlegen
Als Befehl fügen wir diese Zeile bzw. dieses Skript ein:
sh /home/openhabian-test/update.sh
Jetzt legt Ihr noch die benötigten Items an:
Ich mache das immer gerne im Model:
Am Ende habt Ihr 1 Thing und 5 Items angelegt die das Update Skript betreffen.
Und schon kann das Script in der openHAB oberfläche mit dem neu angelegten Update Ausführen Switch ausgeführt und das System Update durchgeführt werden.
5. Weiter Skripte – reboot & update:
Um jetzt nicht nur Updates anstoßen zu können legen wir noch weiter Skripte an die dann einen reboot oder einen shutdown des Systems durchführen.
Dazu geht Ihr wie ab Punkt 3 vor.
Weiter Skripte für reboot und shutdown:
reboot.sh
#!/bin/bash
sudo shutdown -r 1
set -x
echo "reboot in 1 minute"
exit 0
shutdown.sh
#!/bin/bash
sudo shutdown
set -x
echo "System wird heruntergefahren"
exit 0
Auch hier muss dann wieder das passende Thing und die dazugehörigen Items angelegt werden.
Am Ende habt Ihr 3 Things und jeweils 5 Items angelegt.
Ich habe diese wie folgt im Model geordnet:
Wie Ihr sehen könnt habe ich zusätzlich noch 2 weiter Gruppen (Equipments) angelegt. SystemGroupInfo mit allen Rückgabewerten und SystemGroupSwitch mit allen Command Items.
Dies erleichtern mir 1. den Überblick und 2. die Bedienung mittels Regeln. Dieser Schritt ist aber optional.
6. Regeln
Um jetzt den letzten bzw. den aktuellsten Rückgabewerte ausgegeben zu bekommen legen wir 3 sehr einfach Regeln an.
Dazu benötigen wir zuerst noch ein “Dummy” Item an das dann der aktuelle Rückgabewert weitergereicht wird. Ich nenne dieses InfoItem.
Und dann die 1. Regel für den update Rückgabewert
Diese Regel prüft ob sich der update Rückgabewert geändert hat, wenn ja reicht er den String weiter an das InfoItem.
Das selbe muss jetzt noch für reboot und shutdown angelegt werden.
Und schon kann jetzt das passende Widget auf eine Seite eingebunden werden. https://github.com/BangerTech/openHAB3Widgets/blob/main/Buttons/3way-Button.yaml
Bei einem klick auf System Service öffnet sich ein PopUp mit der dazugehörigen Log Rückgabe
Natürlich könnt Ihr das Log Info Widget auch eigenständig nutzen:
https://github.com/BangerTech/openHAB3Widgets/blob/main/StateCards/Card_Info.yaml
Links:
ich hab es versucht einzurichten. Leider kann ich die nopasswd Datei nicht anlegen oder ändern
openhabian@openhabian:~ $ sudo nano -f /etc/sudoers.d/
010_at-export 010_pi-nopasswd 010_proxy README
openhabian@openhabian:~ $ sudo nano -f /etc/sudoers.d/011_pinopasswd
Specified rcfile does not exist
openhabian@openhabian:~ $ sudo nano -f /etc/sudoers.d/010_pi-nopasswd
Error in /etc/sudoers.d/010_pi-nopasswd on line 1: Command “pi” not understood
openhabian@openhabian:~ $
openhabian@openhabian:~ $ sudo nano -f /etc/sudoers.d/010_pi-nopasswd
Error in /etc/sudoers.d/010_pi-nopasswd on line 1: Command “pi” not understood
openhabian@openhabian:~ $ sudo nano -f /etc/sudoers.d/README
openhabian@openhabian:~ $ sudo nano -f /etc/sudoers.d/test
Specified rcfile does not exist
openhabian@openhabian:~ $ sudo nano -f /etc/sudoers.d/010_at-export
Error in /etc/sudoers.d/010_at-export on line 1: Command “Defaults” not understood
Hast Du eine Idee woran dies liegt