Um Lang- und Doppelclick bei meinen EnOcean-Tastern abzufragen, nutzte ich wegen der Timer jeweils ein klassisches DOIF. Ich wollte auf Templates umstellen, hat aber nicht funktioniert. Es gab keine Fehlermeldung, aber auch keine Aktion. Aber egal.
Dann habe ich mal bei Null angefangen und herausgekommen ist ein kleiner Mehrzeiler in Perl-DOIF (mein erster eigener), wahrscheinlich sogar, inkl. Attr., mit weniger Code pro DOIF als vorher. Und natürlich nur eine DOIF statt dutzender.
define EnO_T_DOIF DOIF {\
if (["EnO_T_.*:buttons: released"]) {del_Exec('$DEVICE');;fhem('setreading $DEVICE pressed off');;} ##off\
if (["EnO_T_.*:buttons: pressed"]){\
if ([?$DEVICE:pressed:sec] < 2) {fhem('setreading $DEVICE pressed double');;} ## Double\
else {fhem('setreading $DEVICE pressed on');;set_Exec('$DEVICE',1,'fhem("setreading $DEVICE pressed long")')} ## short,long\
}\
}
Das einzige verbleibende Attribut bei mir ist der Raum.
Timer werden automatisch gesetzt/gelöscht, Events werden nicht erstellt (außer bei dem jeweiligen Tastern. Das benötigte Reading wird automatisch erzeugt. Neue Taster müssen nicht eingepflegt werden, was bei Templates notwendig wäre.
Einzige Voraussetzung ist der passende Namensraum (EnOcean-Taster -> EnO_T_xxx). Könnte man über eine Typ-Anfrage noch absichern, ist bei mir aber nicht notwendig.
PS: trotzdem werde ich nicht pauschal auf Perl-DOIF umsteigen

PPS: wäre es sinnvoll, neben
fhem_set auch ein
fhem_setreading bereitzustellen?