udo1toni hat geschrieben: ↑5. Feb 2022 13:41
Also, das sieht mir sehr nach stochern im Nebel aus...
1. python: Damit der Interpreter automatisch geladen wird, müssen verschiedene Voraussetzungen erfüllt sein, der Interpreter muss z.B. zu Beginn der Datei angeben sein. das reicht aber nicht, er muss sich auch im Suchpfad befinden und der User muss eine default Konsole haben. Und genau dieser letzte Punkt ist für den user openhab nicht gegeben. Kann sein, dass man da noch irgendwo was konfigurieren kann, dass das nicht nötig ist, aber es ist ja nicht so schlimm, den Interpreter mit anzugeben.
2. executeCommandLine() erwartet statt Leerzeichen getrennte Parameter.
Also statt
"sudo /opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh" muss man
"sudo", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh" schreiben. Aber Achtung, es kommt auf ide Version von openHAB an, welche Schreibweise korrekt ist. Eine Zeit lang mussten Leerzeichen stattdessen mit @@ ersetzt werden...
3.
sudo... erwartet gewöhnlich die Eingabe eines Passworts. Hast Du das System so eingerichtet, dass dies für den User openhab nicht der Fall ist? Gewöhnlich wird man über
visudo in der entsprechenden Datei jeden einzelnen Befehl listen, für den dies erlaubt ist, und zwar exakt so, wie er ausgeführt wird. Man kann das auch global erlauben (vgl. auch den User pi in Raspberry Pi OS), aber das ist keine gute Idee, schon gar nicht für einen Systemuser wie openhab. Es gibt gute Gründe, warum openhab nicht alles darf...
4. Die Zeile
ist unsicher. In welchem Verzeichnis befindest Du Dich denn? Du musst immer absolute Pfade angeben, insbesondere, wenn Du direkt aus openHAB heraus Befehle in der Bash ausführen lässt.
Oh, hab Udo´s Nachricht erst garnicht gelesen, bevor ich meine Antwort geschrieben habe, sorry
zur Nummer 1:
ok, habe verstanden, ich gebe jetzt den .sh Dateien den "'!/bin/bash" mit, das funktioniert auch, suppi, danke für den Tipp
zur Nummer 2:
ALL diese Möglichkeiten funktionieren bei mir (openHAB 3.2.0):
Code: Alles auswählen
executeCommandLine(Duration.ofSeconds(10), "/bin/bash", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/bin/bash", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/usr/bin/sudo", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("sudo", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
ich werde wohl in der Zukunft den letzten Eintrag benutzen, wie du empfohlen hast, und den Interpreter jeweils im Script mit angeben
der passende Script dazu: (steckdose1.sh):
Code: Alles auswählen
#!/bin/bash
sudo /opt/433Utils/RPi_utils/raspberry-remote/send 00000 1 1
jetzt weiß ich allerdings nicht, ob das nicht doppelt gemoppelt ist mit dem Pfad,
der wird 1. in der Rule komplett übergeben und 2. im Script nochmal. Wird schon passen.
diese Möglichkeiten funktionieren NICHT:
Code: Alles auswählen
executeCommandLine("/bin/bash", "sudo", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/bin/bash/", "sudo", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/usr/bin", "sudo", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/usr/bin/", "sudo", "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/bin/bash", "sudo /opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/bin/bash/", "sudo /opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/usr/bin", "sudo /opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
executeCommandLine("/usr/bin/", "sudo /opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh")
zur Nummer 3 und 4:
Der absolute Pfad lautet: "/opt/433Utils/RPi_utils/raspberry-remote/steckdose1.sh".
Für mich war es wichtig, dass es erstmal funktioniert. Ich werde die "sudoers" Datei wieder anpassen, und diesen Befehl einzeln eintragen, dann ist es "sicherer", so wie du geschrieben hast.
Vielen Dank nochmal !!!