einfaches DOIF wird nicht ausgeführt?

Begonnen von Steffen, 25 April 2020, 06:20:02

Vorheriges Thema - Nächstes Thema

Otto123

[Startzeit_BW1] war voriges Jahr schon syntaktisch falsch und erzeugt auch keinen Timer timer_01_c01:
Zitat2020-04-26 20:25:00   state           cmd_3
2020-04-26 20:15:00   timer_01_c02    27.04.2020 20:15:00
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

baerm

Also nun mit korrigiertem DOIF probiert. Wie vermutet machte dies keinen Unterschied.

Startzeit 07:00 und DOIF steht in "inizialized" und es tut sich um 07:00 nichts....

Internals:
   FUUID      5d83ec12-f33f-e2c0-b813-d376bc0b4b27cc0f
   FVERSION   98_dummy.pm:0.206650/2019-12-06
   NAME       Startzeit_BW1
   NR         505
   STATE      07:00
   TYPE       dummy
   READINGS:
     2020-04-26 22:46:10   state           07:00
Attributes:
   group      Bewässerung
   icon       time_timer
   room       AUSSEN


Internals:
   DEF        ([Startzeit_BW1] and [Bewaesserung1] eq "an") (set KNX_0503002 on, set MessageTxt Bewaesserung_1 Start )
DOELSEIF ([([Startzeit_BW1] + [0:20])] and [Bewaesserung1] eq "an" and [KNX_0503011:state] eq "on") (set KNX_0503001 on, set KNX_0503002 off)
DOELSEIF ([([Startzeit_BW1] + [0:30])] and [Bewaesserung1] eq "an" and [KNX_0503011:state] eq "on") (set KNX_0503003 on, set KNX_0503001 off)
DOELSEIF ([([Startzeit_BW1] + [01:00])] and [Bewaesserung1] eq "an" and [KNX_0503011:state] eq "on") (set KNX_0503000 on, set KNX_0503003 off)
DOELSEIF ([([Startzeit_BW1] + [01:50])] and [Bewaesserung1] eq "an" and [KNX_0503011:state] eq "on") (set KNX_0503000 off, set KNX_0503011 off, set MessageTxt Bewaesserung_1 Ende )
   FUUID      5e9f434a-f33f-e2c0-1dd9-285490e95a58c7f6
   FVERSION   98_DOIF.pm:0.212240/2020-02-18
   MODEL      FHEM
   NAME       di_Bewaesserung_BW1
   NOTIFYDEV  KNX_0503011,Bewaesserung1,global,Startzeit_BW1
   NR         906
   NTFY_ORDER 50-di_Bewaesserung_BW1
   STATE      initialized
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-27 02:00:00   Device          KNX_0503011
     2020-04-26 22:46:43   cmd             0
     2020-04-26 22:46:10   cmd_event       Startzeit_BW1
     2020-04-26 22:46:10   cmd_nr          1
     2020-04-27 02:00:00   e_KNX_0503011_state off
     2020-04-26 22:46:10   e_Startzeit_BW1_STATE 07:00
     2020-04-26 22:46:43   mode            enabled
     2020-04-26 22:46:43   state           initialized
     2020-04-27 07:20:00   timer_01_c02    28.04.2020 07:20:00
     2020-04-27 07:30:00   timer_02_c03    28.04.2020 07:30:00
     2020-04-27 08:00:00   timer_03_c04    28.04.2020 08:00:00
     2020-04-26 22:46:43   timer_04_c05    27.04.2020 08:50:00
   Regex:
     accu:
     cond:
       Bewaesserung1:
         0:
           &STATE     ^Bewaesserung1$
         1:
           &STATE     ^Bewaesserung1$
         2:
           &STATE     ^Bewaesserung1$
         3:
           &STATE     ^Bewaesserung1$
         4:
           &STATE     ^Bewaesserung1$
       KNX_0503011:
         0:
         1:
           state      ^KNX_0503011$:^state:
         2:
           state      ^KNX_0503011$:^state:
         3:
           state      ^KNX_0503011$:^state:
         4:
           state      ^KNX_0503011$:^state:
       Startzeit_BW1:
         0:
           &STATE     ^Startzeit_BW1$
     itimer:
       Startzeit_BW1:
         itimer:
           &STATE     ^Startzeit_BW1$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'Startzeit_BW1','STATE') and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an"
     1          ::DOIF_time_once($hash,0,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an" and ::ReadingValDoIf($hash,'KNX_0503011','state') eq "on"
     2          ::DOIF_time_once($hash,1,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an" and ::ReadingValDoIf($hash,'KNX_0503011','state') eq "on"
     3          ::DOIF_time_once($hash,2,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an" and ::ReadingValDoIf($hash,'KNX_0503011','state') eq "on"
     4          ::DOIF_time_once($hash,3,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an" and ::ReadingValDoIf($hash,'KNX_0503011','state') eq "on"
   days:
   devices:
   do:
     0:
       0          set KNX_0503002 on, set MessageTxt Bewaesserung_1 Start
     1:
       0          set KNX_0503001 on, set KNX_0503002 off
     2:
       0          set KNX_0503003 on, set KNX_0503001 off
     3:
       0          set KNX_0503000 on, set KNX_0503003 off
     4:
       0          set KNX_0503000 off, set KNX_0503011 off, set MessageTxt Bewaesserung_1 Ende
     5:
   helper:
     DEVFILTER  ^global$|^Startzeit_BW1$|^KNX_0503011$|^Bewaesserung1$
     NOTIFYDEV  global|Startzeit_BW1|KNX_0503011|Bewaesserung1
     event      timer_3
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
     triggerEvents:
       timer_3
     triggerEventsState:
       timer_3
   internals:
     all         Startzeit_BW1:STATE Bewaesserung1:STATE
   interval:
   intervalfunc:
   localtime:
     0          1588051200
     1          1588051800
     2          1588053600
     3          1587970200
   readings:
     all         KNX_0503011:state
   realtime:
     0          07:20:00
     1          07:30:00
     2          08:00:00
     3          08:50:00
   time:
     0          ([Startzeit_BW1]+[0:20])
     1          ([Startzeit_BW1]+[0:30])
     2          ([Startzeit_BW1]+[01:00])
     3          ([Startzeit_BW1]+[01:50])
   timeCond:
     0          1
     1          2
     2          3
     3          4
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     1           0
     2           1
     3           2
     4           3
   trigger:
   triggertime:
     1587970200:
       localtime  1587970200
       hash:
     1588051200:
       localtime  1588051200
       hash:
     1588051800:
       localtime  1588051800
       hash:
     1588053600:
       localtime  1588053600
       hash:
   uiState:
   uiTable:
Attributes:
   room       AUSSEN,KG->Maschinenraum

Damian

Du musst schon die korrekte Syntax für indirekte Timer benutzen, so wie sie Otto bereits vorgeschlagen hat, siehe https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

baerm

Sorry, das ist jetzt wirklich mein Fehler. :o Ursprünglich hatte ich folgende Syntax für die erste Bedingung: ([([Startzeit_BW1])] and [Bewaesserung1] eq "an") und im Zuge meines Herumprobierens auf ([Startzeit_BW1] and [Bewaesserung1] eq "an") geändert, was nicht korrekt ist. Das habe ich nicht bemerkt.

Ich habe jetzt die erste Bedingung wieder korrigiert (diesmal mit ([[Startzeit_BW1]] and [Bewaesserung1] eq "an") um mich genau an die Vorgabe zu halten und ich sehe wieder alle timer_01 bis timer_05 (wie es auch schon in der Vergangenheit war - hat ja so längste Zeit funktioniert). Mit der jetzt eingebrachten Korrektur hat es aber wieder nicht funktioniert. Dummy auf 08:45 gesetzt und DOIF war auf "initialized". Was ist hier noch immer falsch?

Internals:
   FUUID      5d83ec12-f33f-e2c0-b813-d376bc0b4b27cc0f
   FVERSION   98_dummy.pm:0.206650/2019-12-06
   NAME       Startzeit_BW1
   NR         505
   STATE      08:45
   TYPE       dummy
   READINGS:
     2020-04-27 09:42:43   state           08:45
Attributes:
   group      Bewässerung
   icon       time_timer
   room       AUSSEN


Internals:
   DEF        ([[Startzeit_BW1]] and [Bewaesserung1] eq "an") (set KNX_0503002 on, set MessageTxt Bewaesserung_1 Start )
DOELSEIF ([([Startzeit_BW1] + [0:20])] and [Bewaesserung1] eq "an" and [KNX_0503011:state] eq "on") (set KNX_0503001 on, set KNX_0503002 off)
DOELSEIF ([([Startzeit_BW1] + [0:30])] and [Bewaesserung1] eq "an" and [KNX_0503011:state] eq "on") (set KNX_0503003 on, set KNX_0503001 off)
DOELSEIF ([([Startzeit_BW1] + [01:00])] and [Bewaesserung1] eq "an" and [KNX_0503011:state] eq "on") (set KNX_0503000 on, set KNX_0503003 off)
DOELSEIF ([([Startzeit_BW1] + [01:50])] and [Bewaesserung1] eq "an" and [KNX_0503011:state] eq "on") (set KNX_0503000 off, set KNX_0503011 off, set MessageTxt Bewaesserung_1 Ende )
   FUUID      5e9f434a-f33f-e2c0-1dd9-285490e95a58c7f6
   FVERSION   98_DOIF.pm:0.212240/2020-02-18
   MODEL      FHEM
   NAME       di_Bewaesserung_BW1
   NOTIFYDEV  Bewaesserung1,KNX_0503011,Startzeit_BW1,global
   NR         906
   NTFY_ORDER 50-di_Bewaesserung_BW1
   STATE      initialized
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-27 09:35:00   Device          KNX_0503011
     2020-04-27 09:39:10   cmd             0
     2020-04-27 09:35:00   e_KNX_0503011_state off
     2020-04-27 09:39:10   mode            enabled
     2020-04-27 09:39:10   state           initialized
     2020-04-27 09:42:43   timer_01_c01    28.04.2020 08:45:00
     2020-04-27 09:42:43   timer_02_c02    28.04.2020 09:05:00
     2020-04-27 09:42:43   timer_03_c03    28.04.2020 09:15:00
     2020-04-27 09:45:00   timer_04_c04    28.04.2020 09:45:00
     2020-04-27 09:42:43   timer_05_c05    27.04.2020 10:35:00
   Regex:
     accu:
     cond:
       Bewaesserung1:
         0:
           &STATE     ^Bewaesserung1$
         1:
           &STATE     ^Bewaesserung1$
         2:
           &STATE     ^Bewaesserung1$
         3:
           &STATE     ^Bewaesserung1$
         4:
           &STATE     ^Bewaesserung1$
       KNX_0503011:
         1:
           state      ^KNX_0503011$:^state:
         2:
           state      ^KNX_0503011$:^state:
         3:
           state      ^KNX_0503011$:^state:
         4:
           state      ^KNX_0503011$:^state:
     itimer:
       Startzeit_BW1:
         itimer:
           &STATE     ^Startzeit_BW1$
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an"
     1          ::DOIF_time_once($hash,1,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an" and ::ReadingValDoIf($hash,'KNX_0503011','state') eq "on"
     2          ::DOIF_time_once($hash,2,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an" and ::ReadingValDoIf($hash,'KNX_0503011','state') eq "on"
     3          ::DOIF_time_once($hash,3,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an" and ::ReadingValDoIf($hash,'KNX_0503011','state') eq "on"
     4          ::DOIF_time_once($hash,4,$wday) and ::InternalDoIf($hash,'Bewaesserung1','STATE') eq "an" and ::ReadingValDoIf($hash,'KNX_0503011','state') eq "on"
   days:
   devices:
   do:
     0:
       0          set KNX_0503002 on, set MessageTxt Bewaesserung_1 Start
     1:
       0          set KNX_0503001 on, set KNX_0503002 off
     2:
       0          set KNX_0503003 on, set KNX_0503001 off
     3:
       0          set KNX_0503000 on, set KNX_0503003 off
     4:
       0          set KNX_0503000 off, set KNX_0503011 off, set MessageTxt Bewaesserung_1 Ende
     5:
   helper:
     DEVFILTER  ^global$|^KNX_0503011$|^Bewaesserung1$|^Startzeit_BW1$
     NOTIFYDEV  global|KNX_0503011|Bewaesserung1|Startzeit_BW1
     event      timer_4
     globalinit 1
     last_timer 5
     sleeptimer -1
     triggerDev
     triggerEvents:
       timer_4
     triggerEventsState:
       timer_4
   internals:
     all         Bewaesserung1:STATE
   interval:
   intervalfunc:
   intervaltimer:
   localtime:
     0          1588056300
     1          1588057500
     2          1588058100
     3          1588059900
     4          1587976500
   readings:
     all         KNX_0503011:state
   realtime:
     0          08:45:00
     1          09:05:00
     2          09:15:00
     3          09:45:00
     4          10:35:00
   time:
     0          [Startzeit_BW1]
     1          ([Startzeit_BW1]+[0:20])
     2          ([Startzeit_BW1]+[0:30])
     3          ([Startzeit_BW1]+[01:00])
     4          ([Startzeit_BW1]+[01:50])
   timeCond:
     0          0
     1          1
     2          2
     3          3
     4          4
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   timers:
     0           0
     1           1
     2           2
     3           3
     4           4
   triggertime:
     1587976500:
       localtime  1587976500
       hash:
     1588056300:
       localtime  1588056300
       hash:
     1588057500:
       localtime  1588057500
       hash:
     1588058100:
       localtime  1588058100
       hash:
     1588059900:
       localtime  1588059900
       hash:
   uiState:
   uiTable:
Attributes:
   room       AUSSEN,KG->Maschinenraum

Frank_Huber

Du hast um 9.42 deinen dummy auf 8.45 gestellt?

Gesendet von meinem S68Pro mit Tapatalk


Otto123

Und der entscheidende Schalter ging aus, deswegen kommen die anderen Zweige auch nicht zum Zug.
    2020-04-27 09:35:00   e_KNX_0503011_state off
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

baerm

Ups. Ist mir schon peinlich. Werde in Zukunft erst posten, wenn ich alles genau überprüft habe.
Funktioniert jetzt wie es soll. e_KNX_0503011_state ist in der ersten Bedingung nicht relevant und wird über ein zweites DOIF gesteuert.

Danke für Eure Hilfe. Verstehen tue ich es trotzdem nicht warum es plötzlich nicht mehr funktioniert hat. Eventuell war folgende Syntax nicht mehr ok ([([Startzeit_BW1])] and [Bewaesserung1] eq "an")....

fast-eddy

Auch bei mir gibt es neue Erkenntnisse.

Wie vermutet scheint das Attribut cmdpause der Übeltäter zu sein.
Setze ich die "Wartezeit" auf "0" ,

d.h.

attr controller_BEWAESSERUNG_GARTEN cmdpause 0:0:0:0:0

statt

attr controller_BEWAESSERUNG_GARTEN cmdpause 86400:86400:0:0:0
funktioniert auch das Triggern des DOIF bei Sonnenaufgang wie es soll.

Kann es sein, dass der Wert mit 24 Stunden =  86400 Sekunden zu groß ist?
Wurde evtl. mit einem der Updates (in den letzten Monaten  8)) der Wertebereich dieser Variablen geändert?

Hat jemand eine Idee wie sich das Problem beseitigen lässt? Oder evtl. einen Vorschlag wie ich das "Pausieren" anders abbilden könnte?
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

Frank_Huber

Zitat von: fast-eddy am 27 April 2020, 14:42:18
Kann es sein, dass der Wert mit 24 Stunden =  86400 Sekunden zu groß ist?

Na ja,
Momentan werden die Tage länger. d.h. der morgige SA ist weniger als 86400 Sekunden nach dem heutigen.
nach dem 21. Juni dagegen werden die Tage wieder kürzer. da ist der jeweils morgige SA mehr als 86400 Sek entfernt und das DOIF dürfte wieder funktionieren.

fast-eddy

@Frank: AUTSCH!  :-[
Das macht absolut Sinn, da kann ich den Fehler lange in der Syntax suchen falls Deine Vermutung zutrifft!

Dagegen spricht allerdings, dass das DOIF dann halt einen Tag verzögert auslösen müsste - was es aber soweit ich es beobachtet habe nicht tut.
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

fast-eddy

#25
@Frank:
Auch die Tatsache, dass sich die ersten beiden CMD Zweige nicht manuell triggern lassen wenn das ein großer Wert
in cmdpause steht spricht leider gegen Deine Theorie.

EDIT: Habe es gerade noch mal ausprobiert. Es liegt definitiv am cmdpause selbst!?

Das DOIF löst grundsätzlich nicht aus wenn das Attribut cmdpause einen zweistelligen Wert mitbekommt :o
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

Frank_Huber

Kann auch sein dass das deine Absicht war. Zumindest sagt deine Benachrichtigung in CMD1 und CMD2 "nächster Start in 48 Std".

Wenn Du mit "set DOIF CMD_1" den Zweig nicht manuell starten kannst ist auch bei den Befehlen was faul.
Was sagt denn das FHEM Log nach dem manuellen Versuch?

fast-eddy

@Frank:
Du warst schneller (siehe EDIT oben)

Das DOIF löst grundsätzlich nicht aus wenn das Attribut cmdpause einen zweistelligen Wert mitbekommt

Zu Deiner letzten Frage:
ZitatKann auch sein dass das deine Absicht war. Zumindest sagt deine Benachrichtigung in CMD1 und CMD2 "nächster Start in 48 Std".
Wenn das DOIF 24h aussetzt dann ist die nächste Auslösung in 48 Stunden ;)

ZitatWas sagt denn das FHEM Log nach dem manuellen Versuch?
Gar nichts! Kein Eintrag?!

Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|

Frank_Huber

Zitat von: fast-eddy am 27 April 2020, 15:25:12
@Frank:
Zu Deiner letzten Frage:Wenn das DOIF 24h aussetzt dann ist die nächste Auslösung in 48 Stunden ;)
Aber nur bis zum 21. Juni, da ist Sonnenwende und die Tage werden kürzer und das DOIF startet alle 24 Std. :)

fast-eddy

@Frank:

Ich steh´da gerade auf dem Schlauch aber ich vermute Du hast recht.
Hast Du eine Idee wie man das anders (dynamisch?) abbilden könnte?

Das Problem das cmdpause nur Werte < 10 Sekunden verträgt hat
damit imho aber erst mal nichts tun. Konnte das Verhalten gerade auch bei
zwei anderen DOIF verifizieren :-|

Das hat bis vor kurzem definitiv in mehreren DOIF zuverlässig funktioniert.
Raspberry Pi | HMUART | HMLAN | JeeLink | HUE | Z-WAVE.ME | HM-LC-Bl1PBU-FM | HM-PB-2-WM55 HM-CC-RT-DN | HM-LC-SW4-SM | HM-WDS10-TH-O HM-WDS30-T-O | HM-LC-SW4-DR | HM-Sen-MDIR-O-2 | HM-SEC-SCo |  Technoline TX 29 DT-HT|