Exec Binding 2.4 Schalter Werte übergeben

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
frank-wob
Beiträge: 2
Registriert: 28. Apr 2019 09:56
Answers: 0

Exec Binding 2.4 Schalter Werte übergeben

Beitrag von frank-wob »

Hallo,

kurz zu mir. Ich ein ziemlicher Neuling was OpenHab angeht, habe aber die ersten Schritte geschafft und bin begeistert.

Nun zu meinem Problem:

Ich habe eine Relaiskarte welche per USB an meinem Raspi angeschlossen ist. Dazu gibt es ein Programm mit dem ich die Karte über die Konsole schalten und abfragen kann.

Das Programm wird folgendermaßen aufgerufen:
Zum Einschalten des ersten Relais ./rel ttyACM0 -s1
Zum ausschalten des ersten Relais ./rel ttyACM0 -r1

In openHab habe ich jetzt das Exec Binding installiert, ein Thing angelegt mit Channels ausführen und das Ganze mit einem Switch verlinkt.
Als Befehl habe ich

Code: Alles auswählen

/srv/openhab2-userdata/myscripts/rel ttyACM0 -s1
eingetragen.

Grundsätzlich funktioniert das. Wenn ich den Switch betätige wird das Relais geschaltet. Aber ich kann damit das Relais nur einschalten. Es gelingt mir nicht verschiedene Befehle je nach Schalterstellung des Switches zu senden.

Ich möchte also wenn der Switch auf ON gestellt wird

Code: Alles auswählen

./rel ttyACM0 -s1
und wenn er auf OFF gestellt wird

Code: Alles auswählen

./rel ttyACM0 -r1
senden. Hat jemand eine Idee wie ich das umsetzen kann?

Gruß Frank

UPDATE
Ich bin jetzt ein kleines Stück weiter. Ich rufe den Befehl nun nicht mehr direkt auf sondern ein kleines shell Script welches den eigentlichen Befehl ausführt.

Code: Alles auswählen

#!/bin/bash

if [ "$1" = "off" ] || [ "$1" = "0" ] || [ "$1" = "OFF"  ]
  then
    /srv/openhab2-userdata/myscripts/rel ttyACM0 -r1
  else
    /srv/openhab2-userdata/myscripts/rel ttyACM0 -s1
fi
Der Befehl sieht nun so aus:

Code: Alles auswählen

/srv/openhab2-userdata/myscripts/setrel.sh %1$s
Jetzt kann ich das Relais einschalten, aber der Switch geht automatisch wieder in die OFF Position. Ich kann also das Relais nicht wieder ausschalten. Was mache ich nur falsch?

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

Re: Exec Binding 2.4 Schalter Werte übergeben

Beitrag von udo1toni »

Wie hast Du denn das Item definiert?

Grundsätzlich funktioniert das exec2 Binding so, dass der Input (also das, was als Parameter zum externen Script geschickt werden soll) über den Input Channel angelegt wird. Entweder konfiguriert man das Thing dann auf autoexecution, das heißt, das Script wird ausgeführt, sobald man dem Input Channel einen Wert zugewiesen hat, oder man führt über den Run Channel das Script gezielt aus. Im Normalfall wird der erste Weg der richtige sein. Du verknüpfst also ausschließlich den Input Channel mit einem Item, über das Du dann den Befehl ON oder OFF schickst (das könnte dann auch ein String "-r1" oder "-s1" sein, oder auch weitere Strings um die anderen Relais zu schalten).
Du kannst über den Run Channel nur erfahren, ob das Script läuft oder nicht (es gibt ja fälle, in denen ein Script dauerhaft laufen soll, nicht nur um kurz einen Befehl auszuführen).
Über den Output Channel bekommst Du das Ergebnis der letzten Ausführung wieder.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

frank-wob
Beiträge: 2
Registriert: 28. Apr 2019 09:56
Answers: 0

Re: Exec Binding 2.4 Schalter Werte übergeben

Beitrag von frank-wob »

Hallo,

ich habe das Item jetzt als input / String definiert. Wenn ich den entsprechenden Wert eingebe, lässt sich das Relais jetzt Ein und Aus schalten. Aber ich will ja nicht jedes mal die Parameter eintippen, sondern das Relais über den Switch schalten und das bekomme ich schlicht nicht hin. :-( Ich dachte eigentlich das wäre eine der einfacheren Dinge bei einer Automation.

Also in Grunde möchte ich einen Schalter haben der wenn er von OFF auf ON gestellt wird einen Befehl ausführt und wenn er von ON auf OFF gestellt wird einen anderen.

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

Re: Exec Binding 2.4 Schalter Werte übergeben

Beitrag von udo1toni »

Wie eingeben? Wenn Du ein String Item Nutzt, kannst Du einfach ein Mapping setzen (also um den Schalter in der UI zu nutzen):

Code: Alles auswählen

Switch item=myExecStringInputItem mappings=["-s1"="Ein","-r1"="Aus"]
Alternativ (weil der Switch dann ja kein normaler Schiebeschalter mehr ist) kannst Du natürlich ein Proxy Item einsetzen, gemeinsam mit einer Rule:

Code: Alles auswählen

Group:Switch gRelais
String execInput { channel="exec:myCommand:input" }
Switch Relais_1 "Relais 1 [%s]" (gRelais)
Switch Relais_2 "Relais 2 [%s]" (gRelais)
Switch Relais_3 "Relais 3 [%s]" (gRelais)
Switch Relais_4 "Relais 4 [%s]" (gRelais)
Switch Relais_5 "Relais 5 [%s]" (gRelais)
Switch Relais_6 "Relais 6 [%s]" (gRelais)
Switch Relais_7 "Relais 7 [%s]" (gRelais)
Switch Relais_8 "Relais 8 [%s]" (gRelais)

Code: Alles auswählen

rule "Schalte Relais"
when
    Member of gRelais received command
then
    val String rel=triggeringItem.name.split("_").get(1) // ergibt die Nummer am Ende des Namens (als String)
    val String comm=if(receivedCommand==ON) "-s" else "-r" // falls ON -s, sonst -r
    execInput.sendCommand(comm+rel)
end
Anhand der Rule kannst Du auch gleich sehen, wie elegant man bestimmte Probleme lösen kann. Du willst keine 8 Things anlegen, um 8 Relais zu steuern, ebensowenig 8 Rules. Mit der Gruppe und geschickter Namenswahl ist das Ganze aber ein Klacks. Bei Bedarf kann man das Ganze auch noch um Namensteile erweitern (z.B. falls man mehrere Relaiskarten hat und diese mit einem Parameter über das gleiche Steuerprogramm auswählen kann - in diesem Fall wäre das also ttyACM0 - das könnte die Rule auch mit abfeiern.

Ein Problem ist natürlich, dass die ganze Angelegenheit nur in einer Richtung läuft, sprich, es gibt keine Rückmeldung über Relaiszustände. Aber solange die Relais ausschließlich über openHAB gesteuert werden können, sollte das verschmerzbar sein.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten