Gibt es bei dem wait Attribut einen Maximalwert zu beachten?
Ich möchte eine Verzögerung von 3 Tagen einrichten.
Nicht dass ich wüsste.
Probieren ist aber nicht schwierig:
defmod dilang DOIF ([du] eq "on")()
attr dilang wait 259200
set du on
Ergebnis:
2020-07-08 19:48:37 wait_timer 11.07.2020 19:48:37 cmd_1 du
3 Tage passt.
EDIT: 30 und 300 und 30.000 Tage auch. Die Limit ist wahrscheinlich das grösste Perl integer : 2147483647 = ca. 68 Jahre
Ich würde nicht zu große Wait-Timer wählen, denn diese existieren nur temporär, dh. beim Restart des Systems sind sie weg. Zu bedenken ist zusätzlich, dass ein Timer gelöscht wird, wenn sich der Zustand eines DOIFs ändert, also ein andere DOIF-Zweig wahr wird.
Zitat von: Damian am 08 Juli 2020, 20:10:21
Ich würde nicht zu große Wait-Timer wählen, denn diese existieren nur temporär, dh. beim Restart des Systems sind sie weg. Zu bedenken ist zusätzlich, dass ein Timer gelöscht wird, wenn sich der Zustand eines DOIFs ändert, also ein andere DOIF-Zweig wahr wird.
Hast Du einen anderen Vorschlag?
Danke Fredi
Zitat von: amenomade am 08 Juli 2020, 19:53:00
[/code]
Ergebnis:
2020-07-08 19:48:37 wait_timer 11.07.2020 19:48:37 cmd_1 du
3 Tage passt.
EDIT: 30 und 300 und 30.000 Tage auch. Die Limit ist wahrscheinlich das grösste Perl integer : 2147483647 = ca. 68 Jahre
Danke, aber genau dieser wait_timer fehlt bei mir, daher habe ich gefragt.
Hier mal ein List:
Internals:
DEF ([22:40]
and [?WetterProplanta:fc0_tempMax:d] > 15)
(set Heizperiode off)
DOELSE (set Heizperiode on)
FUUID 5ea71aed-f33f-0af0-f243-4d87767196c49b96
MODEL FHEM
NAME SetHeizungSommerWinter.DI
NOTIFYDEV global
NR 526
NTFY_ORDER 50-SetHeizungSommerWinter.DI
STATE initialized
TYPE DOIF
VERSION 22195 2020-06-18 16:38:55
READINGS:
2020-07-08 22:45:33 cmd 0
2020-07-08 22:45:33 mode enabled
2020-07-08 22:45:33 state initialized
2020-07-08 22:45:33 timer_01_c01 09.07.2020 22:40:00
Regex:
accu:
attr:
cmdState:
wait:
0:
259200
1:
259200
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday) and ::ReadingValDoIf($hash,'WetterProplanta','fc0_tempMax','','d') > 15
days:
do:
0:
0 set Heizperiode off
1:
0 set Heizperiode on
helper:
DEVFILTER ^global$
NOTIFYDEV global
globalinit 1
last_timer 1
sleeptimer -1
intervalfunc:
localtime:
0 1594327200
realtime:
0 22:40:00
time:
0 22:40:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1594327200:
localtime 1594327200
hash:
uiState:
uiTable:
Attributes:
DbLogExclude .*
room Steuerung
wait 259200:259200
Zitat von: Fredi69 am 08 Juli 2020, 22:47:07
Danke, aber genau dieser wait_timer fehlt bei mir, daher habe ich gefragt.
Weil das DOIF noch nicht getriggert hat. Steht noch auf "initialized" / cmd0
Der Timer wird erst gesetzt, wenn er benötigt wird. Um den richtigen Timer zu setzen, muss er zuerst wissen, in welchem Zweig er soll.
Deswegen habe ich in meinem Test ein "set du on" gemacht.
Zitat von: amenomade am 08 Juli 2020, 23:17:21
Weil das DOIF noch nicht getriggert hat. Steht noch auf "initialized" / cmd0
Sorry, mein Fehler, das list im falschen Zustand, jetzt aber:
Internals:
DEF ([23:23]
and [?WetterProplanta:fc0_tempMax:d] > 15)
(set Heizperiode off)
DOELSE (set Heizperiode on)
FUUID 5ea71aed-f33f-0af0-f243-4d87767196c49b96
MODEL FHEM
NAME SetHeizungSommerWinter.DI
NOTIFYDEV global
NR 526
NTFY_ORDER 50-SetHeizungSommerWinter.DI
STATE cmd_2
TYPE DOIF
VERSION 22195 2020-06-18 16:38:55
READINGS:
2020-07-08 23:23:00 cmd 2
2020-07-08 23:23:00 cmd_event timer_1
2020-07-08 23:23:00 cmd_nr 2
2020-07-08 23:22:41 mode enabled
2020-07-08 23:23:00 state cmd_2
2020-07-08 23:23:00 timer_01_c01 09.07.2020 23:23:00
Regex:
accu:
attr:
cmdState:
wait:
0:
259200
1:
259200
waitdel:
condition:
0 ::DOIF_time_once($hash,0,$wday) and ::ReadingValDoIf($hash,'WetterProplanta','fc0_tempMax','','d') > 15
days:
do:
0:
0 set Heizperiode off
1:
0 set Heizperiode on
helper:
DEVFILTER ^global$
NOTIFYDEV global
event timer_1
globalinit 1
last_timer 1
sleeptimer -1
timerdev
timerevent timer_1
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: timer_1
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: timer_1
state: cmd_2
timerevents:
timer_1
timereventsState:
timer_1
triggerEvents:
timer_1
triggerEventsState:
timer_1
interval:
intervalfunc:
localtime:
0 1594329780
realtime:
0 23:23:00
time:
0 23:23:00
timeCond:
0 0
timer:
0 0
timers:
0 0
triggertime:
1594329780:
localtime 1594329780
hash:
uiState:
uiTable:
Attributes:
DbLogExclude .*
room Steuerung
wait 259200:259200
https://fhem.de/commandref_DE.html#DOIF_timerWithWait
Ich verstehe aber nicht ganz, was Du damit machen möchtest. Ich vermute, das wird nicht machen, was Du dir vorstellt
Zitat von: amenomade am 08 Juli 2020, 23:33:58
Ich verstehe aber nicht ganz, was Du damit machen möchtest. Ich vermute, das wird nicht machen, was Du dir vorstellt
Was soll es machen?
Nachts (in diesem Beispiel um 23:23 Uhr) wird geprüft ob die gemeldete Max Temperatur größer als 15 Grad ist, falls ja wird ein Dummy auf "off" gesetzt, falls nicht auf "on"
Es macht exakt was ich möchte, damit es aber nicht täglich hin und her wechselt, wollte ich ein wait von 3 Tagen einbauen, heißt erst wenn 3 Tage hintereinader mehr als 15 Grad gemeldet wird.
Das macht genau wass ich will nur das wait greift nicht.
Danke
Fredi
Dann eben timerWithWait setzen
Zitat von: amenomade am 09 Juli 2020, 00:02:43
Dann eben timerWithWait setzen
Danke, verstanden habe ich es nicht aber es scheint so zu funktionieren.
Standardmässig greift wait nicht auf Zeit-Bedingungen.
timerWithWait erlaubt das.