DOIF funktioniert nur von Sonntag auf Montag nicht

Begonnen von oelidoc, 27 April 2020, 20:46:34

Vorheriges Thema - Nächstes Thema

oelidoc

Hallo,
ich habe hier ein kleines DOIF, mit dem ich eine Warmwasser-Umwälzpumpe in Abhängigkeit von unserer Anwesenheit, der Uhrzeit und dem Wochentag steuere.
Alles funktioniert soweit, ausser daß die Pumpe in der Nacht von Sonntag auf Montag halbstündlich durchläuft, statt bis zum frühen Montagmorgen auszubleiben. Alles nicht kriegsentscheidend, aber ich würde halt gerne verstehen, was ich da falsch gemacht habe....
Hier das List des DOIF:
Internals:
   DEF        ([07:00-00:00|7] and [rgr_Residents:presence] eq "present") (set Zirkulationspumpe on) (set Zirkulationspumpe off)
DOELSEIF ([06:00-23:30|8] and [rgr_Residents:presence] eq "present") (set Zirkulationspumpe on) (set Zirkulationspumpe off)
DOELSE (set Zirkulationspumpe off)
   FUUID      5c65c109-f33f-74ea-bffe-1d2a37268b51daad
   MODEL      FHEM
   NAME       zirkulationspumpe
   NOTIFYDEV  rgr_Residents,global
   NR         422
   NTFY_ORDER 50-zirkulationspumpe
   STATE      WT
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-27 16:23:22   Device          rgr_Residents
     2020-04-27 20:25:24   cmd             2.2
     2020-04-27 20:25:24   cmd_event       rgr_Residents
     2020-04-27 20:25:24   cmd_nr          2
     2020-04-27 20:25:24   cmd_seqnr       2
     2020-04-27 16:23:22   e_rgr_Residents_presence present
     2020-04-24 17:56:44   mode            enabled
     2020-04-27 20:25:24   state           WT
     2020-04-27 00:00:00   timer_01_c01    27.04.2020 07:00:00|7
     2020-04-27 00:00:00   timer_02_c01    28.04.2020 00:00:00|7
     2020-04-26 23:30:00   timer_03_c02    27.04.2020 06:00:00|8
     2020-04-26 23:30:00   timer_04_c02    27.04.2020 23:30:00|8
     2020-04-27 20:25:24   wait_timer      27.04.2020 20:53:24 cmd_2_1 rgr_Residents
   Regex:
     accu:
     cond:
       rgr_Residents:
         0:
           presence   ^rgr_Residents$:^presence:
         1:
           presence   ^rgr_Residents$:^presence:
   attr:
     cmdState:
       0:
         WE
         WE
       1:
         WT
         WT
       2:
         Abwesend
     repeatcmd:
       1680
       1680
     wait:
       0:
         0
         120
       1:
         0
         120
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms,"7") and ::ReadingValDoIf($hash,'rgr_Residents','presence') eq "present"
     1          ::DOIF_time($hash,2,3,$wday,$hms,"8") and ::ReadingValDoIf($hash,'rgr_Residents','presence') eq "present"
   days:
     0          7
     1          7
     2          8
     3          8
   devices:
   do:
     0:
       0          set Zirkulationspumpe on
       1          set Zirkulationspumpe off
     1:
       0          set Zirkulationspumpe on
       1          set Zirkulationspumpe off
     2:
       0          set Zirkulationspumpe off
   helper:
     DEVFILTER  ^global$|^rgr_Residents$
     NOTIFYDEV  global|rgr_Residents
     event      presence: present
     globalinit 1
     last_timer 4
     sleepdevice rgr_Residents
     sleepsubtimer 0
     sleeptimer 1
     timerdev   rgr_Residents
     timerevent presence: present
     triggerDev rgr_Residents
     DOIF_eventa:
       cmd_nr: 2
       cmd_seqnr: 2
       cmd_event: rgr_Residents
       WT
     DOIF_eventas:
       cmd_nr: 2
       cmd_seqnr: 2
       cmd_event: rgr_Residents
       state: WT
     timerevents:
       presence: present
     timereventsState:
       presence: present
     triggerEvents:
       presence: present
     triggerEventsState:
       presence: present
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   intervaltimer:
   localtime:
     0          1587963600
     1          1588024800
     2          1587960000
     3          1588023000
   readings:
     all         rgr_Residents:presence
   realtime:
     0          07:00:00
     1          00:00:00
     2          06:00:00
     3          23:30:00
   time:
     0          07:00:00
     1          00:00:00
     2          06:00:00
     3          23:30:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1
     1           2  3
   trigger:
   triggertime:
     1588023000:
       localtime  1588023000
       hash:
     1588024800:
       localtime  1588024800
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   WE,WE|WT,WT|Abwesend
   do         always
   icon       helper_doif
   repeatcmd  1680:1680
   room       Heizung
   startup    set $SELF checkall
   wait       0,120:0,120

Bin für jede Hilfe dankbar
oelidoc

Otto123

#1
Hi,

von heute aus gesehen ist 00:00 morgen, 23:59 wäre noch heute. Ich denke Du musst:
07:00-23:59 machen.

Vielleicht auch 07:00-24:00 ;) Ich glaube da gab es mal einen Beitrag von Damian dazu ...

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

oelidoc

#2
Hallo Otto,
daran hatte ich als "Krücke" auch schon gedacht....
Aber die Zeitdefinition darf doch lt. Commandref durchaus über die Tagesgrenze hinweggehen:
ZitatZeitintervalle über Mitternacht:

define di_light DOIF ([22:00-07:00]) (set light on) DOELSE (set light off)

in Verbindung mit Wochentagen (einschalten am Freitag ausschalten am Folgetag):

define di_light DOIF ([22:00-07:00|5]) (set light on) DOELSE (set light off)

Und 1:00 Montagmorgen ist doch nicht definiert oder?

07:00-24:00 hatte ich auch schon - gleicher Fehler.

Gruß und Dank
oelidoc

Otto123

Darf es, aber ich glaube in Kombination mit dem Wochentag kommt es da zu "Irritationen". Aber vielleicht hat Damian noch den richtigen Tipp.

Ich bilde mir ein er bleibt dann bis 00:00 nächstes WE?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

oelidoc

Zitat von: Otto123 am 27 April 2020, 21:20:35
Ich bilde mir ein er bleibt dann bis 00:00 nächstes WE?
Oha, das könnte natürlich sein. Aber wie geht´s dann richtig?
Und wie gesagt 07:00-24:00 geht ja auch nicht  :(

Otto123

#5
Du findest 1 min vor 12 ist eine extreme Einschränkung? Geht nicht auch 23:59:59?
Oder eben nicht WE sondern 5 und 6 :)

Aber ich weiß es nicht genau :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

oelidoc

Na klar geht das. Werde ich ausprobieren.
Aber was wäre, wenn die Pumpe Sa und So bis sagen wir mal 01:00 laufen soll. Laut Commanref müsste das ja gehen. Wo ist dann der Unterschied zu 00:00 oder 24:00?

KernSani

Scheint für mich logisch zu sein, wenn man von einer Püfung auf Uhrzeit am Wochenende ausgeht, muss das Uhrzeitintervall UND die Prüfung auf Wochende erfüllt sein. Das Wochenende endet 23:59:59. Wenn das an anderen Wochentagen funktioniert (also Montags bis 01:00 geht tatsächlich bis Dienstag 01:00) dann hat Damian das Wochenende vergessen;-)


Kurz, weil mobil....
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

oelidoc

Zitat von: KernSani am 27 April 2020, 22:00:09
... dann hat Damian das Wochenende vergessen;-)
Das könnte natürlich sein, kann ich aber nicht beurteilen.
Vielleicht meldet sich Damian ja gelegntlich zu diesem Problem.
Gruß
oelidoc

Damian

#9
Zitat von: oelidoc am 27 April 2020, 22:03:07
Das könnte natürlich sein, kann ich aber nicht beurteilen.
Vielleicht meldet sich Damian ja gelegntlich zu diesem Problem.
Gruß
oelidoc

Ich befürchte, dass [22:00-07:00|5] schon seit geraumer Zeit nicht mehr funktioniert.

Früher mal hat das Modul um 07:00 getriggert. Unabhängig vom Wochentag wurde die Bedingung ausgewertet, das Modul lief dann zwangsläufig in den DOELSE-Fall. Inzwischen wird vorher geschaut, ob der Wochentag passt und wenn der Wochentag nicht passt, dann wird die Bedingung gar nicht erst ausgewertet.

Daher muss ich dieses Beispiel aus der Doku entfernen.

Vielleicht erweitere ich die Syntax mal, damit so etwas funktioniert:

[22:00|5-07:00|6]


00:00 dürfte bereits der Folgetag sein.

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

oelidoc

Hallo Damian,
dann ist die Lösung also 23:59:59?
Was mich aber wundert, ist, daß es von Samstag auf Sonntag mit 00:00 klappt, aber nicht von Sonntag auf Montag. Oder habe ich da was nicht verstanden?

Damian

Zitat von: oelidoc am 27 April 2020, 23:04:02
Hallo Damian,
dann ist die Lösung also 23:59:59?
Was mich aber wundert, ist, daß es von Samstag auf Sonntag mit 00:00 klappt, aber nicht von Sonntag auf Montag. Oder habe ich da was nicht verstanden?

([07:00-00:00|7]

bedeutet:

07:00 Samstag->Trigger, 00:00 ist schon Sonntag->Trigger, 07:00 Sonntag->Trigger, 00:00 ist Montag -> kein Trigger
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

oelidoc

Zitat von: Damian am 27 April 2020, 23:09:47
07:00 Samstag->Trigger, 00:00 ist schon Sonntag->Trigger, 07:00 Sonntag->Trigger, 00:00 ist Montag -> kein Trigger
Oje, ich glaub ich versteh´s wirklich nicht. Müsste denn bei Montag -> kein Trigger nicht das DOELSE Pumpe aus zuschlagen?

Damian

Zitat von: oelidoc am 27 April 2020, 23:17:18
Oje, ich glaub ich versteh´s wirklich nicht. Müsste denn bei Montag -> kein Trigger nicht das DOELSE Pumpe aus zuschlagen?

Nein, weil, wie ich schon geschrieben habe, um 00:00 von Sonntag auf Montag die Bedingung nicht ausgewertet wird. Früher mal (vor paar Jahren) wurde immer getriggert, das war aber oft unerwünscht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

oelidoc

Okay, vielen Dank.

Dann warte ich mal auf
Zitat von: Damian am 27 April 2020, 22:57:26
Vielleicht erweitere ich die Syntax mal, damit so etwas funktioniert:
[22:00|5-07:00|6]
;) ;)

Gute Nacht
oelidoc