Hallo,
ich würde gerne wissen, wie Ihr das Problem gelöst habt wenn zum selben Zeitpunkt mehrere DOIF triggern und es dadurch zu einem längeren freeze kommt.
Problem:
Ich habe einige DOIF, die morgens um 07:00 triggern können. Da in den jeweiligen DOIF auch andere Bedingungen erfüllt sein müssen, habe ich bisher nie bemerkt dass das ein Problem werden könnte. Heute morgen hat sich jedoch mein HM485, der für die Jalouisesteuerung zuständig ist, disconnected. Im Log steht ein freeze mit 42 Sekunden.
2020.11.21 07:00:42.560 1: [Freezemon] myFreezemon: possible freeze starting at 07:00:00, delay is 42.559 possibly caused by: tmr-DOIF_TimerTrigger(di_Heiz_WZ) tmr-DOIF_TimerTrigger(di_Traffic_Juergen_Arbeit) tmr-DOIF_TimerTrigger(di_ZirkuPumpe_AN) tmr-DOIF_TimerTrigger(di_AZ_Rollo) tmr-DOIF_TimerTrigger(di_EG_WZ_Jal_Fest_SuedWest) tmr-DOIF_TimerTrigger(di_EG_KU_Jal_Sued) tmr-DOIF_TimerTrigger(di_Heiz_Kue) tmr-DOIF_TimerTrigger(di_EG_KU_Jal_Ost) tmr-DOIF_TimerTrigger(di_Gara_Auto_Auf) tmr-DOIF_TimerTrigger(di_Beschattung_Haus_morgens) tmr-DOIF_TimerTrigger(di_Robby_Control)
2020.11.21 07:00:42.721 1: 192.168.178.47:1000 disconnected, waiting to reappear (HM485_LAN)
2020.11.21 07:00:44.374 3: HM485_LAN: connected to device 192.168.178.47:1000
2020.11.21 07:00:44.374 1: 192.168.178.47:1000 reappeared (HM485_LAN)
Ich wollte jetzt den Zeitpunkt 07:00 dadurch entschärfen, dass ich eine Zufallszeit dazu addiere (Ausschnitt aus dem DOIF).
DOELSEIF ([?du_Rollo_Master] eq "an" and [du_Beschattung_Haus_Mittag] eq "nein" and [?Jal_WZ_Fest_SuedWest_03:level] <= 4 and ([du_Tageslicht] eq "hell" and ([([07:00-09:00]+int(rand(300)))|1234] and !$we) or [09:00-09:30|57])) (set Jal_WZ_Fest_SuedWest_03 level 100) ##3 Oeffnen morgens wenn Jalousie nicht manuell eingestellt wurde und Automatik auf an steht. Damit nicht im Urlaub
Vorteil: Ich muss mir nicht bei jeder Zeitangabe Gedanken machen, wie häufig ich diese Zeit schon verwendet habe.
Nachteil: Doch ziemlich aufwendig.
Bevor ich alle Änderungen durchführe wollte ich einmal in die Runde fragen, wie Ihr das gelöst habt. Ich bin ja sicher nicht der Einzige, der in mehreren DOIF auf dieselbe Zeit triggert.
Grüße Jürgen
Zitat von: bmwfan am 21 November 2020, 17:40:01
Hallo,
ich würde gerne wissen, wie Ihr das Problem gelöst habt wenn zum selben Zeitpunkt mehrere DOIF triggern und es dadurch zu einem längeren freeze kommt.
Problem:
Ich habe einige DOIF, die morgens um 07:00 triggern können. Da in den jeweiligen DOIF auch andere Bedingungen erfüllt sein müssen, habe ich bisher nie bemerkt dass das ein Problem werden könnte. Heute morgen hat sich jedoch mein HM485, der für die Jalouisesteuerung zuständig ist, disconnected. Im Log steht ein freeze mit 42 Sekunden.
2020.11.21 07:00:42.560 1: [Freezemon] myFreezemon: possible freeze starting at 07:00:00, delay is 42.559 possibly caused by: tmr-DOIF_TimerTrigger(di_Heiz_WZ) tmr-DOIF_TimerTrigger(di_Traffic_Juergen_Arbeit) tmr-DOIF_TimerTrigger(di_ZirkuPumpe_AN) tmr-DOIF_TimerTrigger(di_AZ_Rollo) tmr-DOIF_TimerTrigger(di_EG_WZ_Jal_Fest_SuedWest) tmr-DOIF_TimerTrigger(di_EG_KU_Jal_Sued) tmr-DOIF_TimerTrigger(di_Heiz_Kue) tmr-DOIF_TimerTrigger(di_EG_KU_Jal_Ost) tmr-DOIF_TimerTrigger(di_Gara_Auto_Auf) tmr-DOIF_TimerTrigger(di_Beschattung_Haus_morgens) tmr-DOIF_TimerTrigger(di_Robby_Control)
2020.11.21 07:00:42.721 1: 192.168.178.47:1000 disconnected, waiting to reappear (HM485_LAN)
2020.11.21 07:00:44.374 3: HM485_LAN: connected to device 192.168.178.47:1000
2020.11.21 07:00:44.374 1: 192.168.178.47:1000 reappeared (HM485_LAN)
Ich wollte jetzt den Zeitpunkt 07:00 dadurch entschärfen, dass ich eine Zufallszeit dazu addiere (Ausschnitt aus dem DOIF).
DOELSEIF ([?du_Rollo_Master] eq "an" and [du_Beschattung_Haus_Mittag] eq "nein" and [?Jal_WZ_Fest_SuedWest_03:level] <= 4 and ([du_Tageslicht] eq "hell" and ([([07:00-09:00]+int(rand(300)))|1234] and !$we) or [09:00-09:30|57])) (set Jal_WZ_Fest_SuedWest_03 level 100) ##3 Oeffnen morgens wenn Jalousie nicht manuell eingestellt wurde und Automatik auf an steht. Damit nicht im Urlaub
Vorteil: Ich muss mir nicht bei jeder Zeitangabe Gedanken machen, wie häufig ich diese Zeit schon verwendet habe.
Nachteil: Doch ziemlich aufwendig.
Bevor ich alle Änderungen durchführe wollte ich einmal in die Runde fragen, wie Ihr das gelöst habt. Ich bin ja sicher nicht der Einzige, der in mehreren DOIF auf dieselbe Zeit triggert.
Grüße Jürgen
Du könntest für alle betroffen DOIFs setzen:
attr meine_DOIF.* wait rand(5)
attr meine_DOIF.* timerWithWait 1
Hallo Damian,
aber abgefragt wird doch trotzdem um 07:00 (um bei dem Beispiel zu bleiben), nur der set-Befehl wird verzögert. Das nimmt doch nicht die Last von Raspi wenn die DOIF weiter alle um 07:00 abgefragt werden.
ZitatDu könntest für alle betroffen DOIFs setzen:
attr meine_DOIF.* wait rand(5)
attr meine_DOIF.* timerWithWait 1
Komme mit der Syntax nicht klar. Das muss ich dann ja bei jedem DOIF eingeben, da je mehrere DOELSEIF-Verzweigungen vorhanden sein können.
Internals:
DEF (([15:00|12345] and !$we) or [([07:00]+int(rand(300)))|7]) (set Thermostat_WZ datapoint 1.SET_POINT_TEMPERATURE 22) ## Solltemperatur auf 22 °C stellen. BDG: Temp. in Web-UI auf konstant 21°C eingestellt.
DOELSEIF ([23:59])
FUUID 5e9343a1-f33f-6b6f-f49e-7bf9cdbbeaeabdbd
MODEL FHEM
NAME di_Heiz_WZ
NOTIFYDEV global
NR 1792
NTFY_ORDER 50-di_Heiz_WZ
STATE Erhöht 22°
TYPE DOIF
VERSION 22913 2020-10-04 21:46:02
READINGS:
2020-11-21 17:49:47 cmd 1
2020-11-21 17:49:47 cmd_event set_cmd_1
2020-11-21 17:49:47 cmd_nr 1
2020-11-21 17:49:39 mode enabled
2020-11-21 17:49:47 state Erhöht 22°
2020-11-21 17:49:39 timer_01_c01 22.11.2020 15:00:00|12345
2020-11-21 17:49:39 timer_02_c01 22.11.2020 07:04:06|7
2020-11-21 17:49:39 timer_03_c02 21.11.2020 23:59:00
Attributes:
cmdState Erhöht 22° | Unverändert 21°
group Heizung und Temperaturen
room 1.1_Wohnzimmer,9.8.1_DOIF
müsste
attr wait rand(5):0
ergänzt werden.
Muss attr timerwithwait 1 immer zusätzlich oder alternativ gesetzt werden?
Grüße Jürgen
https://commandref.fhem.de/commandref_DE.html#DOIF_timerWithWait
Ich würde versuchen den Timer zu ermittelnn, der wirklich für den Freeze verantwortlich ist und vielleicht eine blockierende Aktion ausführt und nicht alle möglicherweise in Frage kommenden Timer verändern.
di_Traffic_Juergen_Arbeit hat vielleicht das Potenzial für Freezes.
Danke für die Tips. Mache mich auf die Suche.