[gelöst] eventMap & SetExtensions

Begonnen von ThoTo, 18 Februar 2018, 11:32:28

Vorheriges Thema - Nächstes Thema

ThoTo

Hallo zusammen!

Beim Versuch das MQTT_DEVICE Modul um die SetExtensions zu erweitern, sind @hexenmeister und ich an eventMap und dem Verhalten zusammen mit den SetExtensions gescheitert bzw. haben interessante Dinge beobachtet...  ???
Thread zum Nachlesen: https://forum.fhem.de/index.php/topic,82240.0.html

Das gleiche Verhalten kann der Einfachheit halber mit einem Dummy-Device nachvollzogen werden:
define TestMe dummy
attr TestMe eventMap true:on false:off
attr TestMe setList true false
attr TestMe useSetExtensions 1


set TestMe on-for-timer 5 führ zu Unknown argument true-for-timer, dieses Problem wurde ja auch schon in einigen Threads beschrieben.

set TestMe eventMap { dev=>{ 'true'=>'on', 'false'=>'off' }, usr=>{ '^on$'=>'true', '^off$'=>'false' } }
Das war die Idee eines Workarounds, führt zum Fehler: Final $ should be \$ or $name at (eval 443) line 1, within string␤syntax error at (eval 443) line 1, near ","^off$""
Woran liegt das?

Wird eventMap verwendet, funktioniert toggle auch nur mehr von on->off und nicht mehr von off->on.
Liegt das an den SetExtensions oder an der eventMap?


LG Thomas
KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)

rudolfkoenig

SetExtension hat die {} Variante von eventMap  nicht unterstuetzt, das habe ich jetzt geaendert.
Es gab eine EnOcean/eventMap spezifische Zeile in SetExtensions.pm, die ich nicht verstehe, deswegen habe ich sie entfernt.
Falls deswegen Probleme auftauchen, bitte melden, zusammen mit den Events und dem eventMap Wert.

Die Fehlermeldung mit "Final..." ist "normal", und muss mit dem fw=> Eintrag gefixt werden, siehe commandref Eintrag zu eventMap.

ThoTo

Zitat von: rudolfkoenig am 18 Februar 2018, 13:11:01
SetExtension hat die {} Variante von eventMap  nicht unterstuetzt, das habe ich jetzt geaendert.
Es gab eine EnOcean/eventMap spezifische Zeile in SetExtensions.pm, die ich nicht verstehe, deswegen habe ich sie entfernt.
Falls deswegen Probleme auftauchen, bitte melden, zusammen mit den Events und dem eventMap Wert.
Perfekt, ich werde testen.

Zitat von: rudolfkoenig am 18 Februar 2018, 13:11:01
Die Fehlermeldung mit "Final..." ist "normal", und muss mit dem fw=> Eintrag gefixt werden, siehe commandref Eintrag zu eventMap.

When using regexps in the usr part with wildcards, the fw part must be filled with the exact same keys to enable a correct display in the FHEMWEB set dropdown list in the detail view.

Wer lesen kann ist klar im Vorteil  :o Danke für den Hinweis, Rudi.

LG Thomas
KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)

mi.ke

Hatte diesen Beitrag gelesen und wollte setExtensions ausprobieren,
aber leider stürzt fhem bei der Verwendung eines dummy mit useSetExtensions und eventMap bei mir komplett ab,
und zwar in dem Moment, wenn auf das devStateIcon geklickt wird.

fhem ist aktuell.
fhem.pl:16354/2018-03-09 perl:5.020002
Internals:
   NAME       Taster
   NR         450
   STATE      off
   TYPE       dummy
   Readings:
     2018-03-12 11:10:03   state           off
Attributes:
   devStateIcon on:remotecontrol/black_btn_GREEN off:remotecontrol/black_btn_RED
   eventMap   /on-for-timer 3:on/
   room       zumLager
   setList    on off
   useSetExtensions 1
   webCmd     :




[code]
2018.03.12 13:45:50 1: PERL WARNING: Deep recursion on subroutine "main::SE_DoSet" at FHEM/SetExtensions.pm line 103.
2018.03.12 13:45:50 1: PERL WARNING: Deep recursion on subroutine "main::AnalyzeCommand" at FHEM/SetExtensions.pm line 38.
2018.03.12 13:45:50 1: PERL WARNING: Deep recursion on subroutine "main::CommandSet" at fhem.pl line 1192.
2018.03.12 13:45:50 1: PERL WARNING: Deep recursion on subroutine "main::DoSet" at fhem.pl line 1811.
2018.03.12 13:45:50 1: PERL WARNING: Deep recursion on subroutine "main::CallFn" at fhem.pl line 1778.
2018.03.12 13:45:50 1: PERL WARNING: Deep recursion on subroutine "main::dummy_Set" at fhem.pl line 3541.
2018.03.12 13:45:50 1: PERL WARNING: Deep recursion on subroutine "main::SetExtensions" at ./FHEM/98_dummy.pm line 36.


fhem ist dann nicht mehr erreichbar.
Der Rechner noch kurze Zeit über Telenet, dann hilft nur noch Stecker ziehen.

Muss ich Pearl Updates machen, oder liegt der Fehler woanders?

Danke und Grüße

mi.ke
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

rudolfkoenig

Was passiert:
1. der Klick erzeugt ein "set dummy on"
2. "set dummy on" wird mit eventMap zu "set dummy on-for-timer 3" gemappt.
3. da dieser dummy laut setList kein on-for-timer kennt, springt SetExtensions an.
4. on-for-timer ist in SetExtensions als "on, gefolgt in 3 Sekunden von off" implementiert, da wird also als erstes "set dummy on" ausgefuehrt, das entspricht 1.

Damit waeren wir in einer Endlosschleife, und wir fangen vorne an.
Ich definiere das mal als Benutzerfehler, und habe es nicht vor, zu beheben.
Es sei denn, jemand sagt, wie das einfach ohne Nebenwirkungen gemacht werden kann.

mi.ke

#5
Hallo Rudi.

Danke für die Erklärung.

Ich hatte bei diesem Konstrukt versucht, das bei SetExtensions  nicht vorhandene Attribut "follow-on-timer" zu simulieren (heisst ja auch SetExtensions und nicht AtrrExtensions).

Grüße

mi.ke
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

rudolfkoenig

"follow-on-timer" ist bei einem mit SetExtensions realisierten on-for-timer nicht notwendig, weil SetExtensions explizit ein "off" erzeugt.
follow-on-timer ist bei FS20 notwendig, da FS20 sich beim Abschalten nicht meldet.