FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Fredi69 am 08 Juli 2020, 12:57:28

Titel: DOIF wait Maximalwert
Beitrag von: Fredi69 am 08 Juli 2020, 12:57:28
Gibt es bei dem wait Attribut einen Maximalwert zu beachten?
Ich möchte eine Verzögerung von 3 Tagen einrichten.
Titel: Antw:DOIF wait Maximalwert
Beitrag von: amenomade am 08 Juli 2020, 19:53:00
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
Titel: Antw:DOIF wait Maximalwert
Beitrag 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.
Titel: Antw:DOIF wait Maximalwert
Beitrag von: Fredi69 am 08 Juli 2020, 22:44:46
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
Titel: Antw:DOIF wait Maximalwert
Beitrag von: Fredi69 am 08 Juli 2020, 22:47:07
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
Titel: Antw:DOIF wait Maximalwert
Beitrag von: amenomade am 08 Juli 2020, 23:17:21
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.
Titel: Antw:DOIF wait Maximalwert
Beitrag von: Fredi69 am 08 Juli 2020, 23:24:59
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
Titel: Antw:DOIF wait Maximalwert
Beitrag von: amenomade am 08 Juli 2020, 23:33:58
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
Titel: Antw:DOIF wait Maximalwert
Beitrag von: Fredi69 am 09 Juli 2020, 00:01:30
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
Titel: Antw:DOIF wait Maximalwert
Beitrag von: amenomade am 09 Juli 2020, 00:02:43
Dann eben timerWithWait setzen
Titel: Antw:DOIF wait Maximalwert
Beitrag von: Fredi69 am 09 Juli 2020, 00:22:40
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.
Titel: Antw:DOIF wait Maximalwert
Beitrag von: amenomade am 09 Juli 2020, 00:30:49
Standardmässig greift wait nicht auf Zeit-Bedingungen.
timerWithWait erlaubt das.