DOIF: Manueller Doppelklick mittels DOIF klappt leider nicht

Begonnen von kotaro, 11 Mai 2020, 09:50:45

Vorheriges Thema - Nächstes Thema

kotaro

Hallo,

ich habe mal eine Frage. Und zwar möchte mein Doppelklick-Funktion leider nicht funktionieren...
Einmal klick wird erkannt und die Schleife ausgeführt. der Zweite Klick wird mittels oldreading und :sec trotzdem leider nicht richtig erkannt.
könnt ihr mir Helfen?

defmod DI_WZ_Tradfri_On_Off DOIF ##1\
([$SELF] eq "initialized" or [$SELF] eq "initialize")\
(set DI_WZ_Licht_Dim enable)\
##2 doppelklick On\
DOELSEIF([WZ_Schalter_Tradfry_on_off] eq "OnShortPress" and\
OldReadingsVal("WZ_Schalter_Tradfry_on_off","state",0) eq "1002"  ##OnShortPress\
and [?WZ_Schalter_Tradfry_on_off:state:sec]<5\
##and OldReadingsAge("WZ_Schalter_Tradfry_on_off","STATE",0) < 5\
)\
(\
set DI_WZ_Licht_Dim enable\
)\
##3 short on\
DOELSEIF([WZ_Schalter_Tradfry_on_off] eq "OnShortPress")\
( \
setreading DI_WZ_Licht_Dim r_Tradfri_On_Off on,\
setstate WZ_Licht_IT_renkforce_4:FILTER=STATE=off on,\
set WZ_Licht_renkforce_Schrankwand on,\
set WZ_Licht_renkforce_Fernseher on,\
set DI_WZ_Licht_Dim enable,\
setstate DI_WZ_Licht_onoff modus manual_on\
)\
##4 short off\
DOELSEIF([WZ_Schalter_Tradfry_on_off] eq "OffShortPress")\
(\
setreading DI_WZ_Licht_Dim r_Tradfri_On_Off off,\
setstate WZ_Licht_IT_renkforce_4:FILTER=STATE=on off,\
set [@"^WZ_Licht_"::$STATE eq "on"] off,\
setreading $SELF on_state light_off,\
set DI_WZ_Licht_Dim disable,\
defmod -temporary reset_AutoDimmer at +00:10:00 set DI_WZ_Licht_Dim enable,\
setstate DI_WZ_Licht_onoff modus manual_off\
)\
##5\
DOELSEIF([12:00])\
(set DI_WZ_Licht_Dim enable)\
##6 \
DOELSEIF([24:00])\
(set DI_WZ_Licht_Dim,\
setreading WZ_Schalter_Tradfry_on_off state 2002)\
##7 long off\
DOELSEIF([WZ_Schalter_Tradfry_on_off] eq "OffLongPress")\
(\
set DI_WZ_Licht_Dim disable,\
defmod -temporary reset_AutoDimmer at +01:00:00 set DI_WZ_Licht_Dim enable\
\
)\
##8 long on\
DOELSEIF([WZ_Schalter_Tradfry_on_off] eq "OnLongPress")\
(\
set DI_WZ_Licht_Dim diable,\
defmod -temporary reset_AutoDimmer at +01:00:00 set DI_WZ_Licht_Dim enable\
## muss nicht deaktiviert werden, da es ja erneut auf 60 Min. gesetzt wird, bei erneuter Aktivierung\
)
attr DI_WZ_Tradfri_On_Off DbLogExclude .*
attr DI_WZ_Tradfri_On_Off alias Ikea-Schalter für Wohnzimmer-Licht
attr DI_WZ_Tradfri_On_Off comment short on wait länger als Doppelklick\
\
1001:OnLongPress\
1002:OnShortPress \
1003:OnLongRelease\
2001:OffLongPress \
2002:OffShortPress\
2003:OffLongRelease
attr DI_WZ_Tradfri_On_Off do always
attr DI_WZ_Tradfri_On_Off group Licht
attr DI_WZ_Tradfri_On_Off icon helper_doif
attr DI_WZ_Tradfri_On_Off room Logik->Wohnzimmer
attr DI_WZ_Tradfri_On_Off wait 0:0:5:0:0:0:0:0


Hier mein SChalter:
defmod WZ_Schalter_Tradfry_on_off HUEDevice sensor 2  IODev=deCONZ
attr WZ_Schalter_Tradfry_on_off userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
attr WZ_Schalter_Tradfry_on_off DbLogExclude .*
attr WZ_Schalter_Tradfry_on_off DbLogInclude battery
attr WZ_Schalter_Tradfry_on_off IODev deCONZ
attr WZ_Schalter_Tradfry_on_off event-on-change-reading .*
attr WZ_Schalter_Tradfry_on_off event-on-update-reading state
attr WZ_Schalter_Tradfry_on_off eventMap 1001:OnLongPress\
1002:OnShortPress \
1003:OnLongRelease\
2001:OffLongPress \
2002:OffShortPress\
2003:OffLongRelease\

attr WZ_Schalter_Tradfry_on_off icon taster
attr WZ_Schalter_Tradfry_on_off model TRADFRI on/off switch
attr WZ_Schalter_Tradfry_on_off oldreadings state
attr WZ_Schalter_Tradfry_on_off room EG->Wohnzimmer,Devices->HUEDevice

setstate WZ_Schalter_Tradfry_on_off OffShortPress
setstate WZ_Schalter_Tradfry_on_off 2020-05-11 09:45:43 .lastupdated 2020-05-11 07:45:43
setstate WZ_Schalter_Tradfry_on_off 2020-05-11 09:45:43 .lastupdated_local 2020-05-11 09:45:43
setstate WZ_Schalter_Tradfry_on_off 2020-05-11 09:43:00 battery 60
setstate WZ_Schalter_Tradfry_on_off 2020-05-11 09:43:00 batteryPercent 60
setstate WZ_Schalter_Tradfry_on_off 2020-05-11 09:43:00 reachable 1
setstate WZ_Schalter_Tradfry_on_off 2020-05-11 09:45:43 state 2002



Seht ihr ein Problem? 2 Klicks hintereinander sind in den Readings des Schalters zu sehen --> also Zeit wird aktualisiert...
Trotzdem wird CMD_2 nicht ausgeführt..

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kotaro

Oh man. Vielen Dank.
Manchmal vergisst man genau die Funktion, die viel sinnvoller wäre...
Kann man ja waitsame einmal auf 5 einmal auf 0 setzen, um sie in einem doif zu nutzen? Oder gibt's keine Möglichkeit das zu kombinieren?

Per

Falls das Thema noch nicht erledigt oder recht aufwendig gelöst wurde: hier mal meine Lösung, übrigens mein erstes Perl-DOIF. Arbeitet schon eine ganze Weile zufriedenstellend.
defmod EnO_T_ DOIF {\
if (["$SELF.+:buttons: released"]) {del_Exec('$DEVICE');;fhem('setreading $DEVICE pressed off')} ##off\
if (["$SELF.+: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\
}\
}

Damit fange ich alle Taster mit dem Prefix "EnO_T_" ab, falls DOIF und Taster unterschiedlich heißen, muss $SELF passend ersetzt werden.
Wie der Name schon verrät, handelt es sich um EnOcean Taster, für deinen müssen die Events natürlich angepasst werden.
Als Attribute habe ich nur den Raum und ein Icon, also nichts für die Funktion Notwendiges, auch OldReadings sind nicht notwendig, lediglich das Reading "pressed" wird (automatisch) angelegt und belegt.