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
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
In der anderen Funktion setreading <doifname> cmd 0
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
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.
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.