Seite 2 von 2

Re: Ausführen eines Bash Skriptes aus OH3 gelingt nicht

Verfasst: 23. Dez 2024 16:54
von udo1toni
Warum änderst Du den Aufruf ab?

Und bitte... /etc/openhab/scripts/ ist nicht der Speicherort für Shell Scripte.

Die Zeitangabe beim Aufruf ist nur relevant, wenn Du den Rückgabewert des Scripts auswerten möchtest, ansonsten kannst Du sie auch weg lassen.

Was steht in wolshutdown.sh drin? (Passwort kannst Du ja unkenntlich machen).
Funktioniert der Aufruf des Scripts, wenn Du es direkt ausführst?

Re: Ausführen eines Bash Skriptes aus OH3 gelingt nicht

Verfasst: 23. Dez 2024 16:59
von freeman121083
und ist das normal das nichts mit geloggt wird?

im Log sehe ich leider nicht ob das Script ausgeführt wird oder nicht, geschweige denn wo das Problem ist?

Re: Ausführen eines Bash Skriptes aus OH3 gelingt nicht

Verfasst: 23. Dez 2024 17:01
von freeman121083
Wenn ich manuell aufrufe funktioniert es:

Code: Alles auswählen

sudo net rpc -S 192.168.2.127 -U Autodarts%PASS shutdown -s -t 2

Re: Ausführen eines Bash Skriptes aus OH3 gelingt nicht

Verfasst: 23. Dez 2024 21:42
von udo1toni
Nein, sudo darf an dieser Stelle nicht verwendet werden, das muss unbedingt ohne sudo gehen.

Geloggt wird ansonsten nur, was entweder explizit geloggt wird (d.h. z.B. über den Befehl logInfo()) oder was einen Fehler verursacht.
Das "Minimum mit Logging wäre also so eine Rule:

Code: Alles auswählen

rule "PC Shutdown"
when
    Item test received command ON
then
    logInfo("shutdown","Rule wurde ausgelöst!")
    executeCommandLine("~/scripts/wolshutdown.sh")
end
Mehr Infos:

Code: Alles auswählen

rule "PC Shutdown"
when
    Item test received command ON
then
    logInfo("shutdown","Rule wurde ausgelöst!")
    val answer = executeCommandLine(Duration.ofSeconds(5),"~/scripts/wolshutdown.sh")
    logInfo("shutdown","Das Ergebnis des Scripts ist {}",answer)
end
Das Verzeichnis ~/scripts/ musst Du zunächst anlegen, und zwar in $OPENHAB_USERDATA bzw. /var/lib/openhab/, also

Code: Alles auswählen

mkdir /var/lib/openhab/scripts/
mv /etc/openhab/scripts/wolshutdown.sh /var/lib/openhab/scripts/
Der Name wolshutdown.sh ist natürlich falsch ;) rpcshutdown.sh wäre deutlich besser...
Das Script muss ausführbar sein, und zwar unbedingt für den User openhab (der User openhabian hat mit der Ausführung später nichts zu tun)
Je nachdem, was in wolshutdown.sh tatsächlich drin steht (mir geht es nicht darum, ob die dort hinterlegte Befehlszeile funktioniert, sondern wie diese im Script notiert ist, und ob das Script als solches funktioniert), könnte man auch dort noch Logging ergänzen, insbesondere einen passenden Output bzw. Rückgabewert (0 ist gewöhnlich der Rückgabewert für "Script wurde ordnungsgemäß ausgeführt", jeder von 0 abweichende Rückgabewert wäre dann eine Fehlermeldung) könnte das Script setzen, so dass die zweite Variante (mit Duration...) auch eine sinnvolle Antwort ausgeben kann.

Re: Ausführen eines Bash Skriptes aus OH3 gelingt nicht

Verfasst: 24. Dez 2024 04:29
von freeman121083
Und wie immer TipTop!

ich fasse zusammen:

OpenHAB Version 4.2.2

ich habe einen ThinkCentre M9x Win11 auf dem die Anwendung Autodarts (Online Dart spielen) läuft. Der Rechner ist in der Garage im Endausbau "nicht sichtbar verbaut". An diesem sind 3 Kameras für Autodarts, Netzwerk und Funk-Tastatur und Maus angeschlossen. Mein Ziel war es den Rechner entweder über die BasiUI oder später über die Alexa (Sprachbefehl) ein bzw. auszuschalten. Das Funktioniert jetzt mit deiner Hilfe, dafür vielen Dank!

Rule zum herunterfahren:

Code: Alles auswählen

rule "PC Autodarts Shutdown"
when
    Item AutodartsShutdown received command OFF
then
	logInfo("shutdown","Rule wurde ausgelöst!")
        executeCommandLine("/var/lib/openhab/scripts/wolshutdown.sh")
    
end
script wolshutdown.sh:

Code: Alles auswählen

net rpc -S 192.168.2.127 -U Autodarts%PASS shutdown -s -t 2
Rule zum aufwecken (WOL)

Code: Alles auswählen

rule " wake on lan"
when
    Item Autodarts received command ON
then
    val actions = getActions("network", "network:pingdevice:server")
    actions.sendWakeOnLanPacketViaMac()
end
Ja über die Begrifflichkeiten lässt sich streiten... ;)

Das einzige was jetzt se­mi­pro­fes­si­o­nell ist:

ich habe die switch items über das Network Binding angelegt, so:

Code: Alles auswählen

Switch Autodarts "PC Autodarts starten [%s]"			{ channel="network:pingdevice:server:online"}
Switch AutodartsShutdown "PC Autodarts herunterfahren"		{ channel="network:pingdevice:server:online"}
Ich werde das nach Weihnachten noch ändern mit einem switch für starten und herunterfahren.
Das Problem dabei ist, dass die Netzwerkschnittstelle wegen WOL dauerhaft an ist und somit sind natürlich auch die switch items in der BasicUI dauerhaft an. Könnte ich mit dem Network Binding auch auf ein bestimmten Dienst/Port abfragen stellen? Damit ich mir anzeigen lassen kann ob der Rechner wirklich an ist? Denn jetzt ist der Rechner aus und der ping request funktioniert durch die dauerhaft eingeschalteter Netzwerk Schnittstelle trotzdem.

Erst einmal vielen vielen Dank und schöne Feiertage!

Re: Ausführen eines Bash Skriptes aus OH3 gelingt nicht

Verfasst: 24. Dez 2024 04:41
von udo1toni
Wie gesagt, eine Rule und ein Item reichen. Ich nutze das hier um einen vdr Server gezielt ein- und auszuschalten, anderer Shutdown-Befehl, ansonsten gleicher Aufbau...

Re: Ausführen eines Bash Skriptes aus OH3 gelingt nicht

Verfasst: 24. Dez 2024 08:46
von freeman121083
habs doch schon geändert, mit dem logging.

Alles super.

kurze andere Frage bezüglich der BasicUI

Warum fehlt mir immer beim letzten Icon (ganz rechts) die Linie darunter?

und wie immer besten DANK!

Re: Ausführen eines Bash Skriptes aus OH3 gelingt nicht

Verfasst: 24. Dez 2024 13:20
von udo1toni
Die Frage ist eher, warum Du unter dem 2. Item eine Linie hast :)

Die Linie trennt die untereinander stehenden Items. Da Du unter dem Item in der dritten Spalte kein weiteres Item hast, muss dort auch keine Linie gezeichnet werden