Python Skript über openHAB3 triggern (rollershutter item)

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

tobi_openHAB_newbie
Beiträge: 6
Registriert: 3. Mär 2021 11:07
Answers: 1

Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von tobi_openHAB_newbie »

Hallo zusammen,

das ist mein allererster Post hier. Bitte seht mir deshalb Unzulänglichkeiten nach.

[PROLOG]
Ich muss voranstellen, dass ich absoluter Neuling im Bezug auf openHAB(3) auf dem raspberry Pi (3B) bin und auch mit diesem und Linux nur rudimentäre Erfahrung habe. Seit 4 Tagen durchsuche ich diverse openHAB Foren, aber komme einfach nicht weiter und hoffe deshalb auf Eure Hilfe.

[AUFGABENSTELLUNG]
Ich habe VELUX Rollläden für Dachfenster mit Fernbedienung. Um die Steuerung "smart" zu machen, habe ich die Fernbedienung "filetiert", Kabel an die Kontakte für UP | STOP | DOWN angelötet und diese mit den GPIO Pins des rasperry pi verbunden. Mit je einem simplen Python Skript (für UP | STOP | DOWN) kann ich so die Rollläden steuern. Das funktioniert auch problemlos, wenn ich das Skript auf dem raspi direkt starte.
Nachdem ich mit mit openHAB3 beschäftigt habe, würde ich jetzt gerne das openHAB rollershutter item nutzen, um meine 3 Skripte über die 3 Buttons des items starten zu lassen (Rückgabewerte und Statusabfragen brauche ich nicht!).
rollershutter.PNG
Ich habe dazu eine Rule angelegt, die wie folgt aussieht:
rule.PNG

[PROBLEM]
Mein Problem ist, dass ich das Skript aus openHAB3 heraqus nicht zum Laufen bekomme.
Meine bisherige Recherche hat mir 3 Optionen aufgezeigt, wie ich das Skript starten könnte:

1. Skript direkt in der Rule als "Python Skript" hinterlegt
Ergebnis:--> funktioniert nicht; es kommt auch kein Fehler

2. Skript liegt "irgendwo" auf dem raspi --> Aufruf über das EXEC Binding
Ergebnis: das erscheint für mich als Neuling so komplex, dass ich nicht durchblicke

3. Skript liegt "irgendwo" auf dem rapsi --> Aufruf des Skripts über den Befehl executeCommandLine
Hier habe ich den Thread viewtopic.php?t=4657 gefunden, mir ist aber unklar, wo ich den Befehl wie reinsetzen muss (in die Rule?) und wo das Skript mit welchen Rechten liegen muss.

Ich würde mich sehr über Eure Hilfestellung (möglichst unter Vermeidung des EXEC Bindings) sehr freuen!

[FACTS]
Ich nutze openHab 3.0.1 auf dem raspberry pi 3B.
Installierte Bindings u.a.: EXEC Binding 3.0.1
Mein Python Skript sieht so aus:

Code: Alles auswählen

#!/usr/bin/python3
import time
import RPi.GPIO as GPIO

# Es wird die BCM Nummerierung benutzt
GPIO.setmode(GPIO.BCM)

# Rollladen Pins vorbereiten
GPIO.setup(17, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(22, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(27, GPIO.OUT, initial=GPIO.LOW)

# Rolladen runterfahren
GPIO.output(27, GPIO.HIGH)
time.sleep(0.1)
GPIO.output(27, GPIO.LOW)
time.sleep(0.05)
GPIO.output(27, GPIO.HIGH)
time.sleep(0.1)
GPIO.output(27, GPIO.LOW)
time.sleep(0.05)
GPIO.output(27, GPIO.HIGH)
time.sleep(0.1)
GPIO.output(27, GPIO.LOW)
Danke und viele Grüße,
Tobias
von tobi_openHAB_newbie » 17. Mär 2021 16:06
udo1toni hat geschrieben: 4. Mär 2021 19:01 Es ist jetzt halt die Frage, ob Du hier forschen willst, bis Du herausgefunden hast, warum das mit dem Aufruf des Scripts nicht funktioniert, oder ob Du lieber einen der anderen Wege ausprobieren willst (smart liefe es sicherlich über das GPIO Binding, aber auch die Variante über mqtt ist viel eleganter als ein zusammengestoppeltes Script).
Lieber Quautiputzli, lieber udo1toni,
durch Deine Anschlussfrage und udo1toni's Hinweis auf die openhab Logfiles konnte ich jetzt den Fehler finden, der das Aufrufen des Skripts verhindert hat: "ReferenceError: “executeCommandLine” is not defined in <eval>"

Über den Beitrag https://community.openhab.org/t/oh3-1-2 ... l/112591/1 habe ich dann die Lösung gefunden. So muss der Aufruf von executeCommandLine aussehen:

Code: Alles auswählen

var Exec = Java.type("org.openhab.core.model.script.actions.Exec")
Exec.executeCommandLine("/home/openhab/scripte/test.py")
Jetzt mache ich mich mal an die Arbeit...

VIELEN DANK!!! :D :D :D
Gehe zur vollständigen Antwort
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 13948
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von udo1toni »

Im zweifel wäre es sinnvoll, eine Rule auf received command triggern zu lassen. Innerhalb der Rule kannst Du über die Variable receivedCommand dann entscheiden, welcher Befehl ausgeführt werden soll. So sähe die Code-Ansicht aus:

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: Rollladen1
    type: core.ItemCommandTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: |-
        switch(receivedCommand){
          case UP  : {executeCommandLine("python /pfad/zum/script/sendup.py")}
          case DOWN: {executeCommandLine("python /pfad/zum/script/senddown.py")}
          case STOP: {executeCommandLine("python /pfad/zum/script/sendstop.py")}
        }
    type: script.ScriptAction
Wobei ich empfehlen möchte, die Scripte komplett anders zu realisieren.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

tobi_openHAB_newbie
Beiträge: 6
Registriert: 3. Mär 2021 11:07
Answers: 1

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von tobi_openHAB_newbie »

Erstmal bin ich baff über die schnelle Antwort auf meine Frage! Schon mal vielen Dank dafür.
Dank des Hinweises habe ich gesehen, dass ich den Parameter (UP, DOWN, STOP) nicht zwingend in der Rule mit angeben muss, sondern die Fallunterscheidung später machen kann.

Sieht bei mir jetzt genau so aus:

Code: Alles auswählen

triggers:
  - id: "1"
    configuration:
      itemName: rollladen_linus
    type: core.ItemCommandTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: >-
        switch(receivedCommand){
          case UP  : {executeCommandLine("python /home/pi/Python_Projekte/Velux/hoch.py")}
          case DOWN: {executeCommandLine("python /home/pi/Python_Projekte/Velux/runter.py")}
          case STOP: {executeCommandLine("python /home/pi/Python_Projekte/Velux/runter.py")}
        }
    type: script.ScriptAction
Aber leider funktioniert es immer noch nicht. Es passiert nichts. :(
Passt denn mein Pfad bzw. was müsste ich tun, damit der user (ich denke, es ist "openhab"), die Skripte ausführen darf? Kann der user openhab so einfach auf die GPIO Pins zugreifen?

Nocheinmal herzlichen Dank für Deine/Eure Hilfe.

Benutzeravatar
udo1toni
Beiträge: 13948
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von udo1toni »

Ja, fehlende Rechte können gut das Problem sein. Das ist einer der Gründe, warum ich das anders gestalten würde. :)

Evtl. könntest Du zunächst in die Scripte ein Minilogging einbauen, ganz grob so:

Code: Alles auswählen

datei = open('/tmp/velux.log','a')
datei.write("Script für UP getriggert")
datei.close()
Das kannst Du zu Beginn der drei Dateien eintragen, natürlich mit unterschiedlichen Texten.
Dann kannst Du erst mal sehen, dass die Scripte überhaupt aufgerufen werden.

Der User openhab sollte eigentlich der Gruppe gpio angehören, es kann aber sein, dass das nicht ausreicht. Leider nutze ich keine GPIO, so dass ich da auch erst mal forschen müsste.

Das Script betreffend:
Gibt es einen Grund, warum Du die "Tasten" mehrfach hintereinander "drückst"?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von sihui »

tobi_openHAB_newbie hat geschrieben: 3. Mär 2021 11:50 Ich würde mich sehr über Eure Hilfestellung (möglichst unter Vermeidung des EXEC Bindings) sehr freuen!
Du könntest als Alternative, oder wenn der bisherige Weg zu beschwerlich wird, auch einmal über fertige Python Bibliotheken für die Ansteuerung der GPIO nachdenken, diese übersetzen dann die Steuerung in MQTT Befehle.

Um die GPIO per Python anzusteuern:
https://community.openhab.org/t/mqttany ... mqtt/81450
https://crazyivan359.github.io/mqttany/index.html

Du benötigst dann nur noch einen MQTT Broker und das MQTT Binding und kannst nach Lust und Laune schalten :-)

https://www.openhab.org/addons/bindings/mqtt.generic/
https://www.openhab.org/addons/bindings/mqtt/

Noch ein Weg: direkt über das neue GPIO Binding:
https://www.openhab.org/addons/bindings/gpio/
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

tobi_openHAB_newbie
Beiträge: 6
Registriert: 3. Mär 2021 11:07
Answers: 1

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von tobi_openHAB_newbie »

udo1toni hat geschrieben: 3. Mär 2021 19:48 Das Script betreffend:
Gibt es einen Grund, warum Du die "Tasten" mehrfach hintereinander "drückst"?
Ich will damit erreichen, dass der Taster auch wirklich "gedrückt" wird. Ich weiß, das erscheint hemdsärmelig, aber ich wollte ein schnelles Ergebnis anstelle mit der richtigen sleep time herumzuexperimentieren.

Jetzt weiß ich - Dank Deines Logfile-Tipps - zumindest, dass es nicht am Skript selbst oder dem Ansprechen der GPIO Pins liegt: ich habe testweise einfach ein Python Skript, das nur das Logfile schreiben soll und auch dieses Skript wird erst gar nicht aufgerufen. :(

An den Rechten - denke ich kann es auch nicht mehr liegen (chmod 777)... Ich bin und bleibe ratlos.

tobi_openHAB_newbie
Beiträge: 6
Registriert: 3. Mär 2021 11:07
Answers: 1

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von tobi_openHAB_newbie »

sihui hat geschrieben: 3. Mär 2021 20:02
tobi_openHAB_newbie hat geschrieben: 3. Mär 2021 11:50 Ich würde mich sehr über Eure Hilfestellung (möglichst unter Vermeidung des EXEC Bindings) sehr freuen!
Du könntest als Alternative, oder wenn der bisherige Weg zu beschwerlich wird, auch einmal über fertige Python Bibliotheken für die Ansteuerung der GPIO nachdenken, diese übersetzen dann die Steuerung in MQTT Befehle.
Vielen lieben Dank für Deine Anstöße! Leider scheint das Problem nicht (oder noch nicht) beim Ansprechen der GPIO Pins zu liegen. Nicht mal ein ganz plattes Python Skript, das nur ein Logfile ausgibt, kann ich über openHAB aufrufen. :(

Benutzeravatar
udo1toni
Beiträge: 13948
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von udo1toni »

Es ist jetzt halt die Frage, ob Du hier forschen willst, bis Du herausgefunden hast, warum das mit dem Aufruf des Scripts nicht funktioniert, oder ob Du lieber einen der anderen Wege ausprobieren willst (smart liefe es sicherlich über das GPIO Binding, aber auch die Variante über mqtt ist viel eleganter als ein zusammengestoppeltes Script).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Benutzeravatar
sihui
Beiträge: 1827
Registriert: 11. Apr 2018 19:03
Answers: 21

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von sihui »

tobi_openHAB_newbie hat geschrieben: 4. Mär 2021 17:24 Nicht mal ein ganz plattes Python Skript, das nur ein Logfile ausgibt, kann ich über openHAB aufrufen. :(
Es gibt viele kluge Köpfe die diese ganzen Probleme bereits gelöst haben. Siehe MQTTany als Beispiel.
Wie Udo schon schrieb: entweder Stunden damit verbringen deinen Fehler zu finden oder ganz einfach die bereits funktionierenden Lösungen installieren und schnell Erfolg haben.
Da musst du mal in dich gehen welcher Weg für dich der Bessere ist und dich mehr zufrieden stellt.
openHAB3 mit Zwave, Alexa, ESPEasy, MQTT, Logitech Harmony, Philips HUE und ZigBee Hardware auf Proxmox VE.

tobi_openHAB_newbie
Beiträge: 6
Registriert: 3. Mär 2021 11:07
Answers: 1

Re: Python Skript über openHAB3 triggern (rollershutter item)

Beitrag von tobi_openHAB_newbie »

Ich habe jetzt nochmal kurz Hoffnung aufkeimen sehen, als ich diesen Beitrag studiert habe: https://community.openhab.org/t/python- ... line/13175

Leider funktioniert das auch nicht. :( Der Beitrag ist von 2016. Vielleicht ging das mit der damaligen openHAB Version.

Wie dem auch sei. Vermutlich habt ihr beide Recht: ich werde mich mit den von Euch angesprochenen Varianten auseinandersetzen und hoffe, dass ich - so ich dort wieder ins Stocken komme - auf Euren Rat hoffen darf!

Vielen herzlichen Dank! ;)

Antworten