Mehrere DOIF triggern zur selben Zeit => Freeze mit disconnect von HM485

Begonnen von bmwfan, 21 November 2020, 17:40:01

Vorheriges Thema - Nächstes Thema

bmwfan

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
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Damian

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


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

bmwfan

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
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Ellert

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.

bmwfan

Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd