Seite 1 von 1

Migration Exec Binding (1.x) -> Exec Binding 2

Verfasst: 25. Sep 2019 09:52
von shinemaster
Ich habe unter meinen OH2.4 noch das Exec Binding 1 laufen.
Habe mir jetzt OH2.5 aufgesetzt und wollte dort das Exec Binding 2 einsetzten.
Allerdings kriege ich es nicht wirklich abgebildet.
Die große Frage ist, wie bekomme ich an einen Switch den Status und kann AN und AUS senden?

So z.B. sieht bei mir ein Item mit dem Exec Binding 1 aus:

Code: Alles auswählen

Switch AZ_Power_3D "3D Drucker" {
 exec="<[/etc/openhab2/exec-scripts/plug.py --ip 192.168.1.33 --action state:5000:REGEX((.*?))]
       >[OFF:/etc/openhab2/exec-scripts/plug.py --ip 192.168.1.33 --action off]
       >[ON:/etc/openhab2/exec-scripts/plug.py --ip 192.168.1.33 --action on]"
}
Wie kann ich das mit dem Exec Binding 2 abbilden?
So wie ich das verstanden habe, muss ich jeweils für AN, AUS und STATUS ein eigenen Things definieren. Aber wie führe ich das dann alles in einem Switch zusammen?

Re: Migration Exec Binding (1.x) -> Exec Binding 2

Verfasst: 25. Sep 2019 14:01
von udo1toni
Du brauchst nur zwei Things, eines für den Status, das andere für den Befehl. Den Befehl (on bzw off) kannst Du über den Input Channel senden. Das thing konfigurierst Du dann auf autorun, dann wird das Script automatisch aufgerufen. wenn Groß- und Kleinschreibung eine Rolle spielen (ON/OFF vs. on/off) müsstest Du noch ein mapping dazwischen schalten.
Wenn Input und Output auf dem selben Item landen sollen, musst Du anschließend den Output Channel des einen Things und den Input Channel des anderen Things auf das eine Item packen. Ohne es getestet zu haben:
Things:

Code: Alles auswählen

Thing exec:command:plugStatus [command="/etc/openhab2/exec-scripts/plug.py --ip 192.168.1.33 --action state", interval=5, timeout=2, autorun=false]
Thing exec:command:plugSet    [command="/etc/openhab2/exec-scripts/plug.py --ip 192.168.1.33 --action %2$s", timeout=2, autorun=true]
Item:

Code: Alles auswählen

Switch AZ_Power_3D "3D Drucker" {channel="exec:command:plugStatus:output", channel="exec:command:plugSet:input", autoupdate="false"}
Das autoupdate="false" sorgt dafür, dass openHAB den Status des Items nicht selbst ändert, sondern nur bei einem Update durch das Thing.
Wenn es so nicht funktioniert, hängst Du jeweils an die Thing Definition noch ein ,transform="MAP(OnOff.map)" an und hängst noch die OnOff.map ins transform-Verzeichnis:

Code: Alles auswählen

ON=on
OFF=off
on=ON
off=OFF

Re: Migration Exec Binding (1.x) -> Exec Binding 2

Verfasst: 25. Sep 2019 22:26
von shinemaster
Hat leider nicht funktioniert.
Habe so viele Konstellationen probiert.
Das einzige was geklappt hat: Im Things das %2$s durch on ersetzt und im Item das input durch run getauscht.
Dann wird das Script beim einschalten des Schalters ausgeführt.
Alle Beispiele die ich im Internet gefunden habe, nutzen Rules zum schalten. Aber dann bräuchte ich das Exec Binding ja nicht.
Hat jemand ein funktionierendes Beispiel?

Re: Migration Exec Binding (1.x) -> Exec Binding 2

Verfasst: 26. Sep 2019 14:12
von udo1toni
Wenn Du dran rum schraubst, ohne verstanden zu haben, wie das Ganze funktioniert, ist das ja eher nicht so gut ;)

das Exec 2 Binding funktioniert folgendermaßen:

Im Thing wird ein Kommando hinterlegt. Das Thing hat verschiedene Channel, und zwar:
  • input ist der Parameter, der an das Script übergeben wird.
  • output ist die Ausgabe des Scripts
  • run ist das Status (wird das Script gerade ausgeführt oder nicht) und der Befehl, das Script zu starten.
  • exit ist der Rückgabewert (normalerweise 0, im Fehlerfall ungleich 0)
  • lastexecution ist der Zeitstempel des letzten Aufrufs.
%2$s repräsentiert den Inhalt des input channels.
Wenn autorun=true gesetzt ist, wird das Script automatisch ausgeführt, sobald input ein Kommando empfängt.

Was halt gut sein kann, ist, dass es auf die Schreibweise von ON und OFF ankommt. Ich kann Dir versichern, dass exec 2 genau so funktioniert, denn ich habe es bei mir im Einsatz :)

Schau Dir die Beispiele an: https://www.openhab.org/addons/bindings/exec/ da ist das alles sehr klar erläutert.

Nutzt Du VSCode als Editor?

Re: Migration Exec Binding (1.x) -> Exec Binding 2

Verfasst: 26. Sep 2019 17:03
von shinemaster
Doch, ich habe verstanden wie das Exec Binding funktioniert.
Und die Beispiele habe ich mir angeschaut.

Dort ist es aber so, dass der input und output Channel ausschließlich in einem String verwendet werden.
Ich kann den output auf einen String legen. Dann sehe ich den Status. Das funktioniert!
Genauso kann ich ein input auf ein String legen und ein Kommando hinschicken. Auch mit %2$s. Das geht.
Ich kann run auf einen Switch legen, der dann beim einschalten ein Script ausführt und der Schalter wird danach sofort automatisch wieder auf OFF gesetzt.
Aber eine Kombination, also ein Schalter, der ON und OFF zu einem Script schickt und den Status aus einem Script entgegen nimmt, geht nicht.
Dies hat auch nichts mit der Schreibweise von ON/OFF zu tun.

Ich habe unzählige Artikel und Threads gelesen. Überall ist es das gleiche. Auch in der Doku (die du mir auch verlinkt hast), ist es so, dass es einen Schalter ohne Channels (also einen dummen Schalter) gibt und anschließend über Rules ein Kommando an ein String mit input-Channel gesendet wird.
Der aktuelle Status müsste dann auch wieder über eine Rule aus dem output gelesen werden und an den dummen Schalter ohne Channels gesendet werden.

So steht es in der Doku und ich habe es leider auch noch nicht anders gesehen.

Vermutlich nutzt du das Exec Binding nicht so, dass du ein Schalter hast, der ON, OFF und Status in sich vereint. Oder du hast es doch über Rules gelöst.

Wäre super, wenn du noch mal bei dir nachschaust und mal deine Things und Items davon postest, die du im Einsatz hast.

Re: Migration Exec Binding (1.x) -> Exec Binding 2

Verfasst: 26. Sep 2019 19:17
von udo1toni
Oh... ~facepalm~ Ja, da hast Du natürlich vollkommen recht...

Möglichkeit 1: Du verwendest ein String Item. In der Sitemap kannst Du allerdings nicht mit einem Schalter arbeiten, sondern nur mit Knöpfen.
Möglichkeit 2: Du verwendest ein Proxy Item und eine Rule dazu, die den Schaltbefehl in einen String umsetzt und umgekehrt.
Möglichkeit 3: eventuell könnte man das mit einem Profil lösen (hab ich aber nicht selbst im Einsatz)

Möglichkeit 4 (mit Geduld verbunden...) Du macht dazu einen Issue auf. Wobei... kann gut sein, dass es schon mal einen Issue dazu gab...

Re: Migration Exec Binding (1.x) -> Exec Binding 2

Verfasst: 30. Sep 2019 13:01
von shinemaster
Schade, das es wie ursprünglich gedacht nicht funktioniert. Dann brauchte ich ja doch nicht an mir zweifeln! ;-)
Trotzdem vielen Danke für deine Mühe.

Habe mich jetzt dafür entschieden, es wie in der Doku zu machen und das zusammenführen der einzelnen Things/Items über Rules zu erledigen.
Ist ein wenig aufwendiger, geht aber auch.

Um für andere die über den Thread mal stolpern meine ursprüngliche Frage zu beantworten:
Leider geht es derzeit nicht, einfach alles über einen einzelnen Schalter zu vereinen.

Re: Migration Exec Binding (1.x) -> Exec Binding 2

Verfasst: 30. Sep 2019 16:17
von udo1toni
shinemaster hat geschrieben: 30. Sep 2019 13:01 Leider geht es derzeit nicht, einfach alles über einen einzelnen Schalter zu vereinen.
Ohne Rule... ;)