Hallo,
ich habe einen dummy Hausstatus diesen kann ich kann normal setzen. Die Anzeige wird mit einem DOIF aktualisiert.
Wenn ich jetzt die Tasten des HM-DIS-EP-WM55 mit einem DOIF einbinden möchte läuft der Hausstatus in einer Endlos Schleife.
Wo liegt der Fehler?
DOIF Hausstatus Text Display
Internals:
DEF ([HausStatus] == 1)
({fhem("set Dis1.Display displayEP Home,open::")})
DOELSEIF
([HausStatus] == 2)
({fhem("set Dis1.Display displayEP Nacht,closed::")})
DOELSEIF
([HausStatus] == 3)
(fhem{("set Dis1.Display displayEP Away,closed::")\})
DOELSEIF
([HausStatus] == 4)
({fhem("set Dis1.Display displayEP Urlaub,closed::")})
FUUID 5c8231e6-f33f-07c9-6189-7a4f5b10d85aa054
MODEL FHEM
NAME di.HausStatus
NOTIFYDEV HausStatus,global
NR 132
NTFY_ORDER 50-di.HausStatus
STATE cmd_1
TYPE DOIF
VERSION 26159 2022-06-19 16:10:29
eventCount 369
READINGS:
2022-08-29 20:55:52 Device HausStatus
2022-08-29 20:55:52 cmd 1
2022-08-29 20:55:52 cmd_event HausStatus
2022-08-29 20:55:52 cmd_nr 1
2022-08-29 20:55:52 e_HausStatus_STATE 1
2022-08-29 20:46:26 mode enabled
2022-08-29 20:55:52 state cmd_1
Regex:
accu:
collect:
cond:
HausStatus:
0:
&STATE ^HausStatus$
1:
&STATE ^HausStatus$
2:
&STATE ^HausStatus$
3:
&STATE ^HausStatus$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::InternalDoIf($hash,'HausStatus','STATE') == 1
1 ::InternalDoIf($hash,'HausStatus','STATE') == 2
2 ::InternalDoIf($hash,'HausStatus','STATE') == 3
3 ::InternalDoIf($hash,'HausStatus','STATE') == 4
do:
0:
0 {fhem("set Dis1.Display displayEP Home,open::")}
1:
0 {fhem("set Dis1.Display displayEP Nacht,closed::")}
2:
0 fhem{("set Dis1.Display displayEP Away,closed::")\}
3:
0 {fhem("set Dis1.Display displayEP Urlaub,closed::")}
4:
helper:
NOTIFYDEV HausStatus,global
event 1
globalinit 1
last_timer 0
sleeptimer -1
timerdev HausStatus
timerevent 1
triggerDev HausStatus
timerevents:
1
timereventsState:
state: 1
triggerEvents:
1
triggerEventsState:
state: 1
internals:
all HausStatus:STATE
readings:
trigger:
uiState:
uiTable:
Attributes:
devStateIcon cmd_1:system_fhem cmd_2:scene_sleeping_alternat cmd_3:car cmd_4:scene_visit_guests
disable 0
group A_HOME
icon helper_doif
room Zentrale
DOIF Display Button
Internals:
DEF ([Dis1.Btn01] =~ "Long")
(set HausStatus 2)
DOELSEIF ([Dis1.Btn01] =~ "Short")
(set HausStatus 3)
DOELSEIF ([Dis1.Btn02] =~ "Short")
(set HausStatus 4)
DOELSEIF ([Dis1.Btn02] =~ "Long")
(set HausStatus 1)
FUUID 5c8231e6-f33f-07c9-8f98-eda3e5c84620347d
MODEL FHEM
NAME di.Dis1_Btn
NOTIFYDEV global
NR 133
NTFY_ORDER 50-di.Dis1_Btn
STATE deactivated
TYPE DOIF
VERSION 26159 2022-06-19 16:10:29
disableNotifyFn 1
eventCount 627
READINGS:
2022-08-29 20:55:53 mode deactivated
2022-08-29 20:55:53 state deactivated
Regex:
attr:
cmdState:
wait:
waitdel:
condition:
do:
0:
helper:
NOTIFYDEV global
uiState:
uiTable:
Attributes:
devStateIcon cmd_1:scene_visit_guests cmd_2:scene_sleeping_alternat cmd_3:car cmd_4:system_fhem
disable 1
group A_HOME
room Zentrale
Gruß Josef
Tipp: YAAHM verwenden.
LG
pah
Ein Dummy kann nicht in einer Endlosschleife laufen.
Das erste DOIF ist eine Katastrophe. So programmiert man nicht.
Warum 2 DOIF? Das was Du hier zeigst geht in einem DOIF.
@rabehd
ZitatEin Dummy kann nicht in einer Endlosschleife laufen.
Das ist richtig, da habe ich mich falsch ausgedrückt Das DOIF läuft in der Endlosschleife.
ZitatDas erste DOIF ist eine Katastrophe. So programmiert man nicht.
Wenn ich das DOIF ändere auf (set Dis1.Display displayEP Nacht,closed::) ohne Fhem erhalte ich einen Fehler "closed::: Unknown command closed::, try help."
Eine Änderung des DOIF in nur eins, sprint der Status kurz in den Neuen und dann wieder in den alten Zustand zurück.
([HausStatus] == 1)
(set Dis1.Display displayEP Home,open::)
DOELSEIF
([HausStatus] == 2)
(set Dis1.Display displayEP Nacht,ok::)
DOELSEIF
([HausStatus] == 3)
({fhem("set Dis1.Display displayEP Away,off::")})
DOELSEIF
([HausStatus] == 4)
(set Dis1.Display displayEP Urlaub,closed::)
DOELSEIF
(([Dis1.Btn02] =~ "Long"))
(set HausStatus 1; set Dis1.Display displayEP Urlaub,closed::)DOELSEIF
(([Dis1.Btn02] =~ "Short"))
(set HausStatus 2; set Dis1.Display displayEP Home,open::)
S
Hi,
gleiches Thema, siehe hier: https://forum.fhem.de/index.php/topic,128934.msg1232931.html#msg1232931 ;)
Gruß Otto
@Otto123
Danke für die Info, dass hat das Problem mit den Icon gelöst.
Jetzt habe ich das DOIF folgender masen geändert.
([HausStatus] == 1)
((set Dis1.Display displayEP Home,open::))
DOELSEIF
([HausStatus] == 2)
((set Dis1.Display displayEP Nacht,ok::))
DOELSEIF
([HausStatus] == 3)
({fhem("set Dis1.Display displayEP Away,off::")})
DOELSEIF
([HausStatus] == 4)
((set Dis1.Display displayEP Urlaub,closed::))
DOELSEIF
([Dis1.Btn02] =~ "Long")
( (set Dis1.Display displayEP xHome,open::), set HausStatus 1)
DOELSEIF
([Dis1.Btn02] =~ "Short")
((set Dis1.Display displayEP xUrlaub,closed::), set HausStatus 4)
Damit kann ich mit den Buttons auf dem HM-DIS-eP-WM55 den Status ändern und die Anzeige wird auch aktualisiert. Allerdings funktioniert jetzt das umschalten des Hausstatus mit "set Hausstatus 1" oder andern Status nur in der Weise, dass der Status sich auf den neuen Status ändert und dann wieder zurück auf den alten geht.
Habe keine Ahnung warum das so ist.
Das hier ist mMn unnütz:
({fhem("set Dis1.Display displayEP Away,off::")})
einfacher
((set Dis1.Display displayEP Away,off::))
Dein Problem solltest Du Dir im Eventmonitor anschauen?!
Sowas [Dis1.Btn02] =~ "Short"
reagiert auf jedes Short im STATE des Gerätes - wer weiß was da so durchrauscht :) wahrscheinlich musst Du den Trigger schärfer machen ;)
Gruß Otto