Ausführen von Perlscripts in der readingsGroup mit dem commands Attribut

Begonnen von knxler, 13 September 2016, 14:26:22

Vorheriges Thema - Nächstes Thema

knxler

Hallo,

ich versuche in meiner readingsGroup mit dem commands Attribut Perlscripts auszuführen.
Meine readingsGroup sieht folgendermaßen aus:

define rg_rolladen readingsGroup <Rollläden>,<Position>,<Auf>,<Stop>,<Zu>,<Sonnenschutz> Rollo_\d\d:state,<%black_up>,<%remotecontrol/black_btn_STOP>,<%black_down>,<%fts_shutter_80@grey>
attr rg_rolladen alias Rolladen
attr rg_rolladen commands { 'rg_rolladen.black_up'=> 'trigger d_$DEVICE state on', 'rg_rolladen.remotecontrol/black_btn_STOP'=>'set $DEVICE value on g3','rg_rolladen.black_down'=>'set $DEVICE value 255 g4','rg_rolladen.fts_shutter_80@grey' => 'set $DEVICE value 229 g4'}



Mein notify, dass ich über Trigger auslösen möchte sieht folgendermaßen aus:

define n_btn_up notify d_Rollo_\d\d:.* {fhem "set $DEVICE value 0 g4"}


In das notify soll dann in die {} mein Perlscript. Das set $DEVICE funktioniert aber schon nicht.

Meine Rollo Definition ist folgendermaßen:

define Rollo_01 KNX 1/0/55:dpt5 2/0/10:dpt1 2/0/9:dpt1 2/0/2:dpt5
attr Rollo_01 IODev KNX
attr Rollo_01 alias Wohnzimmer Terrassentür
attr Rollo_01 eventMap /on g3:Stop/off g2:Auf/on g2:Ab/value 229 g4:Sonnenschutz
attr Rollo_01 group Rollos
attr Rollo_01 sortby 01
attr Rollo_01 webCmd Ab:Stop:Auf:::Sonnenschutz

define Rollo_02 KNX 1/0/26:dpt5 2/0/3:dpt1 1/0/5:dpt1 2/0/1:dpt5
attr Rollo_02 IODev KNX
attr Rollo_02 alias Wohnzimmer großes Fenster
attr Rollo_02 eventMap /on g3:Stop/off g2:Auf/on g2:Ab/value 229 g4:Sonnenschutz
attr Rollo_02 group Rollos
attr Rollo_02 sortby 02
attr Rollo_02 webCmd Ab:Stop:Auf:::Sonnenschutz


und mein Dummy für die Rollos so:

define d_Rollo_01 dummy
attr d_Rollo_01 alias Wohnzimmer Terrassentür_
attr d_Rollo_01 readingList auf ab rollo btn_up btn_stop btn_dwn richtung position

define d_Rollo_02 dummy
attr d_Rollo_02 alias Wohnzimmer großes Fenster_
attr d_Rollo_02 readingList auf ab rollo btn_up btn_stop btn_dwn richtung position


Leider löst der Trigger das notify nicht aus.
Im Eventmonitor sehe ich:

2016-09-13 14:17:27 dummy d_Rollo_01 state on

Weiter passiert nichts.

Schön wäre natürlich, wenn ich in commands direkt ein Perscript ausführen könnte.

Gruß Martin

justme1968

also...
ich verstehe nicht genau was du vorhast. warum du neben dem device noch die dummys brauchst.

aber:
- du kannst direkt perl code aufrufen. du musst den code nur url encoden
- die variablen wie $DEVICE darfst du nicht mit encoden

  d.h. z.b. aus {Log 1, $DEVICE} wird %7BLog%201%2C%20%27$DEVICE%27%7D
  und das schreibst du direkt ins attribut: ..., <reading> => '%7BLog%201%2C%20%27$DEVICE%27%7D', ...

- wenn du lieber mit trigger arbeiten willst musst du drauf achten das das event das du im trigger erzeugst auch genau so aussieht wie ein 'echtes' fhem event. vergleich mal im event monitor dein trigger d_Rollo_01 state on mit dem event das durch setreading d_Rollo_01 state on.

- warum trigger statt setreading?

- und vor allem warum nimmst du trigger statt ein set kommando auf den rolladen?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

knxler

Hallo Andre,

erst einmal vielen Dank das du dich bei dem tollen FHEM Projekt mit einbringst und mir antwortest.
Ich möchte mir eine komfortable Rollladensteuerung bauen mit der ich verschiedene Modie ein- und ausschalten kann wie z.B Sonnenschutz ein/aus.
Dies möchte ich in meinem Dummy d_Rollo_xx abspeichern. Dazu möchte ich mir eine Perlfunktion schreiben, die alle Stati des einzelnen Rollos abspeichert. Das fängt damit an, das ich z.B. die Position, die ich vom KNX Aktor gemeldet bekomme darin abspeichern möchte. Dazu bietet sich die readingsGroup an, mit der ich mir eine schöne Oberfläche bauen kann. Den Trigger und das notify benötige ich nur, um eine Perl-Funktion auszuführen, da es nicht möglich ist direkt im commands Attribut eine Perlfunktion auszuführen. Vielleicht baust du das ja noch ein.
Ich habe aber zwischenzeitlich herausgefunden das mein Problem im notify liegt, da ich hier auf $DEVICE zurückgreife, das aber nicht gesetzt ist. In $NAME steht meine Information die ich benötige drin.
Mein notify sieht nun so aus:

define n_btn_up notify d_Rollo_\d\d:.* {Rollo_fnktn($NAME)}


Nun zu deiner Antwort.
Mir war nicht klar das ich den Code URL-encoden kann. Das Ergebnis trägt auch nicht gerade zur Lesbarkeit bei.
zu setreading:
Wird denn durch setreading mein notify getriggert?

Wenn ich meine Rollladensteuerung fertig habe werde ich die gerne hier im Forum zur Verfügung stellen.


Gruß Martin

beaune

Hallo,

bin durch Zufall auf dieses Thema gestoßen. Dasi ist ne interessante Sache mit dem Perl Code. Ganz verstanden hab ich es aber nicht. Was ich meine ist folgendes. Wenn man z.B. eine solche Definition im Command Attribut einer Readingsgroup hat:

'FS20_44d800.state' => 'state:iconSwitch,off,on@orange,on,off@blue',
Wie sähe das dann in Perl aus? Verstanden habe ich, dass man schreiben kann:

'FS20_44d800.state' => %7B...%7Dwobei dann zwischen den codierten geschweiften Klammern ein Perl-Ausdruck wie z.B. ein Funktionsaufruf stehen kann. Richtig soweit?

Aber was muß dann diese Funktion zurückliefern, wenn ich damit dasselbe wie mit
'state:iconSwitch,off,on@orange,on,off@blue' erreichen möchte?

Mir geht es darum, hier dynamisch Icons zu erzeugen, die das Iconswitch-Widget dann verwenden soll, also z.B. angepasste Größen/Farben usw. Geht das?