DOIF Abfrage AT und WE gehen nicht mehr

Begonnen von RatisBow, 26 April 2024, 07:56:43

Vorheriges Thema - Nächstes Thema

RatisBow

Hallo zusammen,

seit einer der letzten Updates wird in einem DOIF der AT (8) und WE (9) nicht mehr ausgewertet.
Im Wike steht:
Wochentagsteuerung

Hinter der Zeitangabe kann ein oder mehrere Wochentage getrennt mit einem Pipezeichen | angegeben werden. Die Syntax lautet:

[<time>|0123456789X] mit 0 Sonntag, 1 Montag, ... bis 6 Samstag, 7 Wochenende und Feiertage (entspricht $we), 8 Arbeitstag (entspricht !$we),9 Wochenende oder Feiertag morgen (entspricht intern $twe), X Arbeitstag morgen (entspricht intern !$twe)

Wenn man AT für Arbeitstag einsetzt wird die Anweisung nicht getriggert und mit der 8 funktioniert es auch nicht. Wurde da etwas bei den letzten Updates verändert, was ich nicht über die Suchanfrage gefunden habe?

Beispiel:

([05:30-18:00 |AT])
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
DOELSEIF ([05:30-18:00 |8])
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
DOELSE
   (set EG.WohnEsszimmer desired-temp 18.0)

Beide werden nicht ausgeführt. Es wir immer die DOELSE Abfrage ausgeführt.

Gruß
RatisBow


Damian

Bei mir funktioniert alles, wie programmiert. Abgesehen davon ist das keine sinnvolle Definition bei dir, du hast zwei gleiche Zeitintervalle definiert (AT entspricht 8 ). Ausgeführt wird immer nur ein Zweig, nämlich der erste Treffer in der Definition hier also der erste Zweig. Im DOIF-Perlmodus kannst auch unabhängige Zweige definieren, die durch den gleichen Trigger "gleichzeitig" ausgeführt werden.

Evtl. aber stimmt etwas mit deiner Systemzeit nicht.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

RatisBow

Das ist nur ein Beispiel, das beide nicht funktionieren. In meinem Code habe ich da keine Zeitliche Überschneidung drinnen.

Vollständig schaut der so aus:
## 1
(([05:30-7:00|AT]) and ([Anwesenheit] eq "present"))
  (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 2
DOELSEIF (([08:00-11:00|Fr WE]) and (([Anwesenheit] eq "present") or ([myEGHeadWohnz] eq "on")) and ([myTemperatur] eq "on"))
  (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 3
DOELSEIF (([11:00-13:00]) and (([Anwesenheit] eq "present") or ([myEGHeadWohnz] eq "on")) and ([myTemperatur] eq "on"))
  (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 4
DOELSEIF (([13:00-15:00|Fr WE]) and (([Anwesenheit] eq "present") or ([myEGHeadWohnz] eq "on")) and ([myTemperatur] eq "on"))
  (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 5
DOELSEIF (([15:00-21:30]) and (([Anwesenheit] eq "present") or ([Anwesenheit] eq "absent") or [myEGHeadWohnz] eq "on") and ([myTemperatur] eq "on"))
  (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 6
DOELSEIF (([21:30-23:00|Fr WE]) and (([Anwesenheit] eq "present") or ([myEGHeadWohnz] eq "on")) and ([myTemperatur] eq "on"))
  (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 7
DOELSE
  ## (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
  (set EG.WohnEsszimmer desired-temp 18.0)


Die Anweisung habe ich jetzt schon über Jahre und hatte bisher funktioniert. 
Hier das Listing:

Internals:
   DEF        ## 1.2
([05:30-8:00 |8])
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 1
(([05:30-7:00|AT]) and ([Anwesenheit] eq "present"))
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 2
DOELSEIF (([08:00-11:00|Fr WE]) and (([Anwesenheit] eq "present") or ([myEGHeadWohnz] eq "on")) and ([myTemperatur] eq "on"))
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 3
DOELSEIF (([11:00-13:00]) and (([Anwesenheit] eq "present") or ([myEGHeadWohnz] eq "on")) and ([myTemperatur] eq "on"))
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 4
DOELSEIF (([13:00-15:00|Fr WE]) and (([Anwesenheit] eq "present") or ([myEGHeadWohnz] eq "on")) and ([myTemperatur] eq "on"))
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 5
DOELSEIF (([15:00-21:30]) and (([Anwesenheit] eq "present") or ([Anwesenheit] eq "absent") or [myEGHeadWohnz] eq "on") and ([myTemperatur] eq "on"))
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 6
DOELSEIF (([21:30-23:00|Fr WE]) and (([Anwesenheit] eq "present") or ([myEGHeadWohnz] eq "on")) and ([myTemperatur] eq "on"))
   (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
## 7
DOELSE
   ## (set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll])
   (set EG.WohnEsszimmer desired-temp 18.0)
   FUUID      5d788ab6-f33f-7b43-b3de-31b4749d5c646ddb
   MODEL      FHEM
   NAME       EG.WohnEsszimmer_01
   NOTIFYDEV  global,myTemperatur,Anwesenheit,myEGHeadWohnz
   NR         297
   NTFY_ORDER 50-EG.WohnEsszimmer_01
   STATE      cmd_7
   TYPE       DOIF
   VERSION    28546 2024-02-23 20:11:05
   eventCount 28
   READINGS:
     2024-04-26 08:37:08   Device          Anwesenheit
     2024-04-26 07:35:02   cmd             7
     2024-04-26 07:35:02   cmd_event       Anwesenheit
     2024-04-26 07:35:02   cmd_nr          7
     2024-04-26 08:37:08   e_Anwesenheit_STATE present
     2024-04-26 07:34:43   mode            enabled
     2024-04-26 07:35:02   state           cmd_7
     2024-04-26 08:00:02   timer_01_c01    27.04.2024 05:30:00|8
     2024-04-26 08:00:02   timer_02_c01    27.04.2024 08:00:00|8
     2024-04-26 07:34:43   timer_03_c02    26.04.2024 08:00:00|FrWE
     2024-04-26 07:34:43   timer_04_c02    26.04.2024 11:00:00|FrWE
     2024-04-26 07:34:43   timer_05_c03    26.04.2024 11:00:00
     2024-04-26 07:34:43   timer_06_c03    26.04.2024 13:00:00
     2024-04-26 07:34:43   timer_07_c04    26.04.2024 13:00:00|FrWE
     2024-04-26 07:34:43   timer_08_c04    26.04.2024 15:00:00|FrWE
     2024-04-26 07:34:43   timer_09_c05    26.04.2024 15:00:00
     2024-04-26 07:34:43   timer_10_c05    26.04.2024 21:30:00
     2024-04-26 07:34:43   timer_11_c06    26.04.2024 21:30:00|FrWE
     2024-04-26 07:34:43   timer_12_c06    26.04.2024 23:00:00|FrWE
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       Anwesenheit:
         0:
         1:
           &STATE     ^Anwesenheit$
         2:
           &STATE     ^Anwesenheit$
         3:
           &STATE     ^Anwesenheit$
         4:
           &STATE     ^Anwesenheit$
         5:
           &STATE     ^Anwesenheit$
       myEGHeadWohnz:
         1:
           &STATE     ^myEGHeadWohnz$
         2:
           &STATE     ^myEGHeadWohnz$
         3:
           &STATE     ^myEGHeadWohnz$
         4:
           &STATE     ^myEGHeadWohnz$
         5:
           &STATE     ^myEGHeadWohnz$
       myTemperatur:
         1:
           &STATE     ^myTemperatur$
         2:
           &STATE     ^myTemperatur$
         3:
           &STATE     ^myTemperatur$
         4:
           &STATE     ^myTemperatur$
         5:
           &STATE     ^myTemperatur$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms,"8")
     1          (::DOIF_time($hash,2,3,$wday,$hms,"FrWE")) and ((::InternalDoIf($hash,'Anwesenheit','STATE') eq "present") or (::InternalDoIf($hash,'myEGHeadWohnz','STATE') eq "on")) and (::InternalDoIf($hash,'myTemperatur','STATE') eq "on")
     2          (::DOIF_time($hash,4,5,$wday,$hms)) and ((::InternalDoIf($hash,'Anwesenheit','STATE') eq "present") or (::InternalDoIf($hash,'myEGHeadWohnz','STATE') eq "on")) and (::InternalDoIf($hash,'myTemperatur','STATE') eq "on")
     3          (::DOIF_time($hash,6,7,$wday,$hms,"FrWE")) and ((::InternalDoIf($hash,'Anwesenheit','STATE') eq "present") or (::InternalDoIf($hash,'myEGHeadWohnz','STATE') eq "on")) and (::InternalDoIf($hash,'myTemperatur','STATE') eq "on")
     4          (::DOIF_time($hash,8,9,$wday,$hms)) and ((::InternalDoIf($hash,'Anwesenheit','STATE') eq "present") or (::InternalDoIf($hash,'Anwesenheit','STATE') eq "absent") or ::InternalDoIf($hash,'myEGHeadWohnz','STATE') eq "on") and (::InternalDoIf($hash,'myTemperatur','STATE') eq "on")
     5          (::DOIF_time($hash,10,11,$wday,$hms,"FrWE")) and ((::InternalDoIf($hash,'Anwesenheit','STATE') eq "present") or (::InternalDoIf($hash,'myEGHeadWohnz','STATE') eq "on")) and (::InternalDoIf($hash,'myTemperatur','STATE') eq "on")
   days:
     0          8
     1          8
     10         FrWE
     11         FrWE
     2          FrWE
     3          FrWE
     6          FrWE
     7          FrWE
   do:
     0:
       0          set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll]
       1          ([05:30-7:00|AT]) and ([Anwesenheit] eq "present")
       2          set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll]
     1:
       0          set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll]
     2:
       0          set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll]
     3:
       0          set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll]
     4:
       0          set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll]
     5:
       0          set EG.WohnEsszimmer desired-temp [MQTT2_ESP32Client:temperatur_W_soll]
     6:
       0          set EG.WohnEsszimmer desired-temp 18.0
   helper:
     NOTIFYDEV  global,myTemperatur,Anwesenheit,myEGHeadWohnz
     event      present
     globalinit 1
     last_timer 12
     sleeptimer -1
     timerdev   Anwesenheit
     timerevent present
     triggerDev Anwesenheit
     timerevents:
       present
     timereventsState:
       state: present
     triggerEvents:
       present
     triggerEventsState:
       state: present
   internals:
     all         Anwesenheit:STATE myEGHeadWohnz:STATE myTemperatur:STATE
   interval:
     0          -1
     1          0
     10         -1
     11         10
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
     8          -1
     9          8
   intervalfunc:
   intervaltimer:
   localtime:
     0          1714188600
     1          1714197600
     10         1714159800
     11         1714165200
     2          1714111200
     3          1714122000
     4          1714122000
     5          1714129200
     6          1714129200
     7          1714136400
     8          1714136400
     9          1714159800
   readings:
   realtime:
     0          05:30:00
     1          08:00:00
     10         21:30:00
     11         23:00:00
     2          08:00:00
     3          11:00:00
     4          11:00:00
     5          13:00:00
     6          13:00:00
     7          15:00:00
     8          15:00:00
     9          21:30:00
   time:
     0          05:30:00
     1          8:00
     10         21:30:00
     11         23:00:00
     2          08:00:00
     3          11:00:00
     4          11:00:00
     5          13:00:00
     6          13:00:00
     7          15:00:00
     8          15:00:00
     9          21:30:00
   timeCond:
     0          0
     1          0
     10         5
     11         5
     2          1
     3          1
     4          2
     5          2
     6          3
     7          3
     8          4
     9          4
   timer:
     0          0
     1          0
     10         0
     11         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timers:
     0           0  1
     1           2  3
     2           4  5
     3           6  7
     4           8  9
     5           10  11
   trigger:
   triggertime:
     1714122000:
       localtime  1714122000
       hash:
     1714129200:
       localtime  1714129200
       hash:
     1714136400:
       localtime  1714136400
       hash:
     1714159800:
       localtime  1714159800
       hash:
     1714165200:
       localtime  1714165200
       hash:
     1714188600:
       localtime  1714188600
       hash:
     1714197600:
       localtime  1714197600
       hash:
   uiState:
   uiTable:
Attributes:
   checkall   all
   room       EG.Esszimmer,EG.Wohnzimmer,Testraum

Gruß
RatisBow



RatisBow

Die Systemzeit auf dem FHEM läuft stimmt auch. Habe ich gerade noch überprüft.

RatisBow

Damian

Du solltest auch das Attribut do always setzen, damit bei deinen Tests eine Wiederholung des gleichen Zweiges möglich ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

RatisBow

Das beantwortet aber nicht mein Problem.

Hier ein einfaches Besipiel, das schon nicht funktioniert!

([08:00-21:00|AT])
(set DOIF_Dum1 "Arbeitstag")
DOELSE
(set DOIF_Dum1 "Wochenende")

Das Listing:

Internals:
   DEF        ([08:00-21:00|AT])
(set DOIF_Dum1 "Arbeitstag")
DOELSE
(set DOIF_Dum1 "Wochenende")

   FUUID      5dbefce6-f33f-7b43-092f-2810cd773123eff5
   MODEL      FHEM
   NAME       DOIF_Dummy
   NOTIFYDEV  global
   NR         380
   NTFY_ORDER 50-DOIF_Dummy
   STATE      cmd_2
   TYPE       DOIF
   VERSION    28546 2024-02-23 20:11:05
   eventCount 6
   READINGS:
     2024-04-26 10:10:49   cmd             2
     2024-04-26 10:10:49   cmd_event       DOIF_Dummy
     2024-04-26 10:10:49   cmd_nr          2
     2024-04-26 10:10:37   mode            enabled
     2024-04-26 10:10:49   state           cmd_2
     2024-04-26 10:10:37   timer_01_c01    27.04.2024 08:00:00|AT
     2024-04-26 10:10:37   timer_02_c01    26.04.2024 21:00:00|AT
   Regex:
     accu:
     bar:
     barAvg:
     collect:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms,"AT")
   days:
     0          AT
     1          AT
   do:
     0:
       0          set DOIF_Dum1 "Arbeitstag"
     1:
       0          set DOIF_Dum1 "Wochenende"
   helper:
     NOTIFYDEV  global
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: DOIF_Dummy
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: DOIF_Dummy
       state: cmd_2
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1714197600
     1          1714158000
   realtime:
     0          08:00:00
     1          21:00:00
   time:
     0          08:00:00
     1          21:00:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1714158000:
       localtime  1714158000
       hash:
     1714197600:
       localtime  1714197600
       hash:
   uiState:
   uiTable:
Attributes:
   room       Testraum

Das sollte doch heute als Arbeitstag funktionieren!

RatisBow


Per

Einen Urlaubskalender hast du nicht zufällig eingebunden?