Exec Scripte – openHAB von der WebUI aktualisieren, neustarten & herunterfahren!

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:

https://www.gnu.org/software/bash/manual/bash.html#Exit-Status:~:text=3.7.5%20Exit%20Status-,The,-exit%20status%20of

2 Gedanken zu “Exec Scripte – openHAB von der WebUI aktualisieren, neustarten & herunterfahren!

  1. 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert