[gelöst] Mehrfachschalter auf 1 Zurücksetzen (Mehrfachnutzung eines Tasters)

Begonnen von dirk.k, 05 September 2020, 18:43:00

Vorheriges Thema - Nächstes Thema

dirk.k

Hallo zusammen,
ich habe einen Taster mit mehreren Funktionen belegt (entsprechend https://wiki.fhem.de/wiki/DOIF/Mehrfachnutzung_eines_Tasters)
Mein Problem:
ich schalte mit Druck 1-3 verschiedene Geräte dazu.
Mit einer anderen Funktion schalte ich alles aus.
Habe ich nun nur Gerät 1 und 2 eingeschaltet und dann alles abgeschaltet, so schaltet ein erneutes drücken von "on" das Gerät 3.
Wunsch wäre es aber, dass das System von vorne anfängt.
Gibt es ein Atribut, welches die DOIF Kette auf nach einer Zeit X auf Anfang zurück setzt, oder kann ich irgend ein Reading löschen?
Internals:
   CFGFN     
   DEF        ##1
([MAX_TA_11c27e:"^onoff:.1$"] and $cmd=~"0|3") 
(set Sonoff_S20_3 on)
##2
DOELSEIF ([MAX_TA_11c27e:"^onoff:.1$"] and $cmd==1) 
(set SB_PLAYER_SERVER on)
(set SB_PLAYER_SERVER play)
##3
DOELSEIF ([MAX_TA_11c27e:"^onoff:.1$"] and $cmd==2.2) 
(set Sonoff_S26_5 on)

   FUUID      5f5390f1-f33f-cdbc-7e5c-e4e98cc7a60d5cba
   MODEL      FHEM
   NAME       doif_Taster_Technik_an
   NOTIFYDEV  MAX_TA_11c27e,global
   NR         4968
   NTFY_ORDER 50-doif_Taster_Technik_an
   STATE      cmd_2
   TYPE       DOIF
   VERSION    22588 2020-08-12 19:25:15
   .attraggr:
   .attrminint:
   READINGS:
     2020-09-05 18:35:30   Device          MAX_TA_11c27e
     2020-09-05 18:35:30   cmd             2.2
     2020-09-05 18:35:30   cmd_event       MAX_TA_11c27e
     2020-09-05 18:35:30   cmd_nr          2
     2020-09-05 18:35:30   cmd_seqnr       2
     2020-09-05 18:35:30   e_MAX_TA_11c27e_events opened,RSSI: -75.5,onoff: 1
     2020-09-05 18:08:50   mode            enabled
     2020-09-05 18:35:30   state           cmd_2
     2020-09-05 18:12:39   wait_timer      no timer
   Regex:
     accu:
     cond:
       MAX_TA_11c27e:
         0:
           &STATE     ^MAX_TA_11c27e$
         1:
           &STATE     ^MAX_TA_11c27e$
         2:
           &STATE     ^MAX_TA_11c27e$
   attr:
     cmdState:
     wait:
     waitdel:
     waitsame:
       5
   condition:
     0          ::EventDoIf('MAX_TA_11c27e',$hash,'^onoff:.1$',1) and $cmd=~"0|3"
     1          ::EventDoIf('MAX_TA_11c27e',$hash,'^onoff:.1$',1) and $cmd==1
     2          ::EventDoIf('MAX_TA_11c27e',$hash,'^onoff:.1$',1) and $cmd==2.2
   do:
     0:
       0          set Sonoff_S20_3 on
     1:
       0          set SB_PLAYER_SERVER on
       1          set SB_PLAYER_SERVER play
     2:
       0          set Sonoff_S26_5 on
     3:
   helper:
     DEVFILTER  ^global$|^MAX_TA_11c27e$
     NOTIFYDEV  global|MAX_TA_11c27e
     event      onoff: 1
     globalinit 1
     last_timer 0
     sleepdevice MAX_TA_11c27e
     sleepsubtimer -1
     sleeptimer -1
     timerdev   MAX_TA_11c27e
     timerevent onoff: 1
     triggerDev MAX_TA_11c27e
     DOIF_eventa:
       cmd_nr: 2
       cmd_seqnr: 2
       cmd_event: MAX_TA_11c27e
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd_seqnr: 2
       cmd_event: MAX_TA_11c27e
       state: cmd_2
     timerevents:
       opened
       RSSI: -75.5
       onoff: 1
     timereventsState:
       state: opened
       RSSI: -75.5
       onoff: 1
     triggerEvents:
       opened
       RSSI: -75.5
       onoff: 1
     triggerEventsState:
       state: opened
       RSSI: -75.5
       onoff: 1
   internals:
   readings:
   trigger:
     all         MAX_TA_11c27e
   uiState:
   uiTable:
Attributes:
   comment    ([MAX_TA_11c27e:"^onoff:.1$"]) 
(set Sonoff_S20_3 on)
(set SB_PLAYER_SERVER on)
(set SB_PLAYER_SERVER play)
(set Sonoff_S26_5 on)

   room       1.9_Technik,8.1_CUL/MAX,99-LAB -> Multiroom

Danke

amenomade

Sowas ist wahrscheinlich einfacher und lesbarer mit DOIF Perl, aber mit normalen DOIF funktioniert sowas:

defmod rundDOIF DOIF ([du:"on"] and $cmd=~"0|1.2|2.2|3")\
(setreading du rund 1)\
()\
DOELSEIF ([du:"on"] and $cmd eq "1.1")\
(setreading du rund 2)\
()\
DOELSEIF ([du:"on"] and $cmd eq "2.1")\
(setreading du rund 3)\


attr rundDOIF do always
attr rundDOIF wait 0,10:0,10:0,10
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Ellert


amenomade

Zitat von: Ellert am 07 September 2020, 02:34:23
In der anderen Funktion setreading <doifname> cmd 0

Du meinst, wo ich ein leeres () habe? Dann kann man sich wahrscheinlich in der ersten Bedingung auch den Test auf 1.2 und 2.2 sparen. Hab ich aber nicht getestet
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

dirk.k

Vielen Dank,
die erste Variante von amenomade funktionierte.
Ich habe auch versucht, alle Readings zu löschen. Sollte den gleichen Effekt haben, wie "setreading <doifname> cmd 0"
Das hat leider nicht funktioniert. Nach 1 mal tasten stand cmd=3 da.


Ellert

Zitat von: dirk.k am 07 September 2020, 19:06:29
Vielen Dank,
die erste Variante von amenomade funktionierte.
Ich habe auch versucht, alle Readings zu löschen. Sollte den gleichen Effekt haben, wie "setreading <doifname> cmd 0"
Das hat leider nicht funktioniert. Nach 1 mal tasten stand cmd=3 da.
Dann wird das Reading cmd wohl nicht mit der Variablen synchronisiert.