Hallo,
ich habe ein ein einfaches DOIF, um einen Dummy einzuschalten, der wiederum andere Aktionen auslöst.
Leider bleibt der Status immer auf "cmd_1" so dass die Ausführung nur einmal stattfindet.
Auf die möglichen Workarounds, wie z.B. "do always" oder ein leeres DOELSE möchte ich nicht zurückgreifen, sondern lieber die saubere Lösung, die der Command-Ref entspricht. Dort steht nämlich ausdrücklich, dass bei nur einer Bedingung ein virtuelles DOELSE verwendet wird. Das scheint aber nicht zu funktionieren.
Hat dazu jemand eine Idee, warum es nicht funktioniert?
defmod doifSunset DOIF ([{sunset("HORIZON=-6.0")}]) (set myDummy on)
Internals:
DEF ([{sunset("HORIZON=-6.0")}]) (set myDummy on)
FUUID xxxx
FVERSION 98_DOIF.pm:0.276160/2023-05-25
MODEL FHEM
NAME doifSunset
NOTIFYDEV global
NR 66
NTFY_ORDER 50-doifSunset
STATE cmd_1
TYPE DOIF
VERSION 27616 2023-05-25 17:55:36
eventCount 2
READINGS:
2023-07-17 22:10:50 cmd 1
2023-07-17 22:10:50 cmd_event timer_1
2023-07-17 22:10:50 cmd_nr 1
2023-07-17 14:29:06 mode enabled
2023-07-17 22:10:50 state cmd_1
2023-07-18 22:09:37 timer_01_c01 19.07.2023 22:08:22
Regex:
accu:
bar:
barAvg:
collect:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday)
days:
do:
0:
0 set myDummy on
1:
helper:
NOTIFYDEV global
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent timer_1
triggerDev
timerevents:
timer_1
timereventsState:
timer_1
triggerEvents:
timer_1
triggerEventsState:
timer_1
interval:
intervalfunc:
localtime:
0 1689797302
perlblock:
realtime:
0 22:08:22
time:
0 {sunset("HORIZON=-6.0")}
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1689797302:
localtime 1689797302
hash:
uiState:
uiTable:
Attributes:
Hallo
Unter Automatisierung gibt es ein eigenes Board für DOIF. Verschieb den Beitrag doch dahin, da ist bestimmt jemand unterwegs der das Verhalten erklären kann.
Setze doch das Ergebnis vom list wegen der besseren Lesbarkeit in Code-Tags.
Das do always zu probieren halte ich jetzt nicht für einen Workaround oder gar unsauber.
Ist ja ein zulässiges Attribut.
Gruß Ralf
Du hast in deiner Bedingung nur einen Zeittrigger definiert. Dieser triggert zum gegebenen Zeitpunkt und ist in diesem Augenblick wahr. Es gibt aber keinen Trigger in deiner Bedingung, der diese Bedingung zum Triggerzeitpunkt unwahr machen würde. Daher kann diese Definition niemals den cmd_1 Fall verlassen. Und nur durch einen Zustandswechsel wird cmd_1 wiederholt. Wenn diese einfache Definition so bleiben soll, muss sie daher do always Attribut bekommen. Normalerweise hat man mehrere Zweige im DOIF, die zu einer Zustandsänderung führen, dann kann man auf do always verzichten.
Diese einfache Definition kannst du auch im Perlmodus definieren. Dieser arbeitet nicht mit Zuständen. Daher werden dort das Attribut do und viele andere nicht benötigt.
So würde die Definition im Perlmodus aussehen:
DOIF {[{sunset("HORIZON=-6.0")}];fhem_set "myDummy on"}
Danke für die Info!
Ich denke, es klappt jetzt.