FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Steffen am 25 April 2020, 06:20:02

Titel: einfaches DOIF wird nicht ausgeführt?
Beitrag von: Steffen am 25 April 2020, 06:20:02
Guten Morgen,

ich bin ein wenig ratlos, denn ich wollte jetzt mein DOIF was ich so schon im letzten Jahr aktiv hatte für meine Gartenbewässerung wieder aktivieren.

Doch leider reagiert das DOIF nicht mehr so wie letztes Jahr wo ich es über den Winter deaktiviert hatte.


(([05:00-05:30]) and ([WetterFalkensee:fc0_chOfRain06] < 50) and ([WetterFalkensee:fc0_chOfRain09] < 50) and ([WetterFalkensee:fc0_chOfRain12] < 50) and ([SensorRasen:moisture] < 23))
(set RegnerTeichSeite on)
DOELSEIF (([19:00-20:00]) and ([WetterFalkensee:fc0_chOfRain21] < 60 ) and ([SensorRasen:moisture] < 23 ))
(set RegnerTeichSeite on)
DOELSE (set RegnerTeichSeite off)


das was ich raus gefunden habe ist das "[SensorRasen:moisture]" was damit zu tun hat, denn wenn ich das so

(([06:05-06:30]) and ([SensorRasen:moisture] < 22))(set Test on)
teste, dann wird ein cmd 1 auch nicht ausgeführt.


Internals:
   BTMAC      C4:7C:8D:6A:D5:E3
   DEF        C4:7C:8D:6A:D5:E3
   FUUID      5cfe32b9-f33f-2a44-7b21-5e2d5cd34641a4cc
   FVERSION   74_XiaomiBTLESens.pm:v2.8.2-s20924/2020-01-10
   INTERVAL   300
   NAME       SensorRasen
   NOTIFYDEV  global,SensorRasen
   NR         60
   NTFY_ORDER 50-SensorRasen
   STATE      active
   TYPE       XiaomiBTLESens
   VERSION    v2.8.2
   loglevel   4
   READINGS:
     2020-04-24 21:16:12   batteryPercent  99
     2020-04-24 21:16:12   batteryState    ok
     2020-04-25 06:08:30   fertility       191
     2020-04-24 21:16:12   firmware        3.2.1
     2020-04-24 19:58:48   lastGattError   charWrite faild
     2020-04-25 06:08:30   lux             396
     2020-04-25 06:08:30   moisture        30
     2020-04-25 06:08:30   state           active
     2020-04-25 06:08:30   temperature     10
   helper:
     CallBattery 0
     CallSensDataCounter 0
     updateTimeCallBattery 1587755772.69462
     updateTimestampCallBattery 2020-04-24 21:16:12
Attributes:
   interval   1200
   model      flowerSens
   room       Garten,XiaomiBTLESens
   sshHost    pi@192.168.2.141


Das ist doch eigentlich total Simple aber das DOIF reagiert einfach nicht?!?

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Gisbert am 25 April 2020, 07:06:18
Hallo Steffen,

bin auch ratlos, deshalb müsste wohl ein Profi ran. Was mir aber auffällt - jedenfalls würde ich es anders machen -, ist die doppelte Klammerung in den Bedingungsteilen. Hier reicht eigentlich eine einzige Klammer.

Kannst du auch ein list des DOIFs anhängen? Wenn nicht das Attribut do always gesetzt wurde, wird die Ausführung nur einmal durchgeführt. Vielleicht könnte das die Ursache sein, warum es dann später nicht mehr klappt.

Viele​ Grüße​ Gisbert​
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: sash.sc am 25 April 2020, 10:44:48
Ich würde sich die doppelte klammerung raus nehmen.

Do always brauche da nicht gesetzt zu werden, da das doif durch jede Aktualisierung des Wetter Berichtes getriggert wird.

Gesendet von meinem MI 9 mit Tapatalk

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 25 April 2020, 11:53:00
Zitat(([06:05-06:30]) and ([SensorRasen:moisture] < 22))(set Test on)
teste, dann wird ein cmd 1 auch nicht ausgeführt.

Wenn moisture derzeit 30 ist, ist das Verhalten doch ok?

BTW: Es ist zwar trocken derzeit, aber am morgen Luftfeuchte unter 22? Da gibt es auch keinen Rasen mehr. :o

Gruß Otto
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Steffen am 25 April 2020, 13:14:18
Vielen Dank für eure Hinweise, doch so wie der Code oben steht hat er letzten Sommer durchgehend funktioniert.
Dann über Winter auf disable gesetzt und dieses Jahr will der Code nicht mehr.
Ich hatte jede Version probiert, dann gemerkt das es am SensorRasen kein cmd gibt.
Das ist ein Boden Sensor der die Feuchtigkeit im Boden messen tut und bei unter 22% sollen die Regner angehen was auch letzten Sommer so geklappt hat. Irgendwas muss sich in Fhem oder DOIF verändert haben?!
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 25 April 2020, 13:19:22
Aber so wie es aktuell steht ist die Bedingung: ([SensorRasen:moisture] < 22) -> (30 < 22) -> falsch -> keine Ausführung.

Um es zu testen solltest Du die Schwelle hochsetzen.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 25 April 2020, 13:43:23


Zitat von: Gisbert am 25 April 2020, 07:06:18
Kannst du auch ein list des DOIFs anhängen?

Und bitte den list noch liefern. Im "Fehlerzustand" am besten.

Gesendet von meinem S68Pro mit Tapatalk

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 25 April 2020, 23:26:58
Hallo zusammen,

anscheinend bin ich nicht der einzige mit diesem Problem - Habe schon angefangen an meinem Verstand zu zweifeln ;-)

Auch bei mir wird ein DOIF, mit dem ich ebenfalls seit längerem meine Gartenbewässerung erfolgreich steuere, plötzlich
nicht mehr ausgeführt. Auch bei mir war das DOIF über den Winter deaktiviert, hat aber nach re-initialisierung vor zwei
Wochen zumindest mal kurz funktioniert, dann nach einem Update aber auch seinen Dienst eingestellt. :-|

Gab es da evtl. eine Syntaxänderung, die ich nicht mitbekommen habe und die jetzt ggf. Ärger macht?

Hier mal ein List meines DOIF

Internals:
   DEF        ([{sunrise("CIVIL")}] and ($month >= 5 and $month <=8) and [NIEDERSCHLAG:statWaterHour72] <= 0.008)
(set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 1 erfüllt. Nächster Start in 48 Sunden!' '' 0 '' )
(set garten_SWC_02 on-for-timer 600)
(set garten_SWC_03 on-for-timer 600)

DOELSEIF ([{sunrise("CIVIL")}] and ($month < 5 or $month > 8) and [NIEDERSCHLAG:statWaterHour72] <= 0.004)
(set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 2 erfüllt. Nächster Start in 48 Sunden!' '' 0 '' )
(set garten_SWC_02 on-for-timer 600)
(set garten_SWC_03 on-for-timer 600)

DOELSEIF ([{sunrise("CIVIL")}] and [NIEDERSCHLAG:statWaterHour24] <= 0.002 and ([GARTEN:statTemperatureDayAvg] >= 22.0 or [GARTEN:statTemperatureDayMax] >= 28))
(set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 3 erfüllt.' '' 0 '' )
(set garten_SWC_02 on-for-timer 600)
(set garten_SWC_03 on-for-timer 600)

DOELSEIF ([NIEDERSCHLAG:basicSet] == 99 and ([garten_SWC_02:state] eq "on" or [garten_SWC_03:state] eq "on"))
(set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Beendet wegen Regen!' '' 0 '' )
(set garten_SWC_02 off, set garten_SWC_03 off)

DOELSE

   FUUID      5d388d65-f33f-d5e6-45eb-952d6ef7b2b122b4
   MODEL      FHEM
   NAME       controller_BEWAESSERUNG_GARTEN
   NOTIFYDEV  global,garten_SWC_03,garten_SWC_02,NIEDERSCHLAG,GARTEN
   NR         493
   NTFY_ORDER 50-controller_BEWAESSERUNG_GARTEN
   STATE      cmd_5
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-25 23:08:08   Device          GARTEN
     2020-04-25 23:08:08   cmd             5
     2020-04-25 23:08:08   cmd_event       GARTEN
     2020-04-25 23:08:08   cmd_nr          5
     2020-04-25 23:08:08   e_GARTEN_statTemperatureDayAvg 19.0
     2020-04-25 23:08:08   e_GARTEN_statTemperatureDayMax 26.2
     2020-04-25 22:59:55   e_NIEDERSCHLAG_statWaterHour24 0.0000
     2020-04-25 22:59:55   e_NIEDERSCHLAG_statWaterHour72 0.0000
     2020-04-25 22:55:38   e_garten_SWC_02_state off
     2020-04-25 22:55:40   e_garten_SWC_03_state off
     2020-04-25 22:51:21   mode            enabled
     2020-04-25 23:08:08   state           cmd_5
     2020-04-25 22:51:21   timer_01_c01    26.04.2020 05:38:18
     2020-04-25 22:51:21   timer_02_c02    26.04.2020 05:38:18
     2020-04-25 22:51:21   timer_03_c03    26.04.2020 05:38:18
     2020-04-25 22:52:29   wait_timer      no timer
   Regex:
     accu:
     cond:
       GARTEN:
         0:
         1:
         2:
           statTemperatureDayAvg ^GARTEN$:^statTemperatureDayAvg:
           statTemperatureDayMax ^GARTEN$:^statTemperatureDayMax:
         3:
       NIEDERSCHLAG:
         0:
           statWaterHour72 ^NIEDERSCHLAG$:^statWaterHour72:
         1:
           statWaterHour72 ^NIEDERSCHLAG$:^statWaterHour72:
         2:
           statWaterHour24 ^NIEDERSCHLAG$:^statWaterHour24:
         3:
           basicSet   ^NIEDERSCHLAG$:^basicSet:
       garten_SWC_02:
         0:
         1:
         2:
         3:
           state      ^garten_SWC_02$:^state:
       garten_SWC_03:
         0:
         1:
         2:
         3:
           state      ^garten_SWC_03$:^state:
   attr:
     cmdState:
     cmdpause:
       86400
       86400
       0
       0
       0
     wait:
       0:
         0
         0
         300
       1:
         0
         0
         300
       2:
         0
         0
         300
       3:
         0
         0
       4:
         0
         0
       5:
         0
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ($month >= 5 and $month <=8) and ::ReadingValDoIf($hash,'NIEDERSCHLAG','statWaterHour72') <= 0.008
     1          ::DOIF_time_once($hash,1,$wday) and ($month < 5 or $month > 8) and ::ReadingValDoIf($hash,'NIEDERSCHLAG','statWaterHour72') <= 0.004
     2          ::DOIF_time_once($hash,2,$wday) and ::ReadingValDoIf($hash,'NIEDERSCHLAG','statWaterHour24') <= 0.002 and (::ReadingValDoIf($hash,'GARTEN','statTemperatureDayAvg') >= 22.0 or ::ReadingValDoIf($hash,'GARTEN','statTemperatureDayMax') >= 28)
     3          ::ReadingValDoIf($hash,'NIEDERSCHLAG','basicSet') == 99 and (::ReadingValDoIf($hash,'garten_SWC_02','state') eq "on" or ::ReadingValDoIf($hash,'garten_SWC_03','state') eq "on")
   days:
   do:
     0:
       0          set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 1 erfüllt. Nächster Start in 48 Sunden!' '' 0 ''
       1          set garten_SWC_02 on-for-timer 600
       2          set garten_SWC_03 on-for-timer 600
     1:
       0          set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 2 erfüllt. Nächster Start in 48 Sunden!' '' 0 ''
       1          set garten_SWC_02 on-for-timer 600
       2          set garten_SWC_03 on-for-timer 600
     2:
       0          set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 3 erfüllt.' '' 0 ''
       1          set garten_SWC_02 on-for-timer 600
       2          set garten_SWC_03 on-for-timer 600
     3:
       0          set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Beendet wegen Regen!' '' 0 ''
       1          set garten_SWC_02 off, set garten_SWC_03 off
     4:
       0         
   helper:
     DEVFILTER  ^global$|^garten_SWC_03$|^NIEDERSCHLAG$|^garten_SWC_02$|^GARTEN$
     NOTIFYDEV  global|garten_SWC_03|NIEDERSCHLAG|garten_SWC_02|GARTEN
     event      battery: ok,humidity: 43,T: 11.0 H: 43,temperature: 11.0,dewpoint: -1.1,D: -1.1,statTemperatureDayAvg: 19.0,statTemperatureDayMax: 26.2
     globalinit 1
     last_timer 3
     sleepdevice set_cmd_3
     sleepsubtimer 2
     sleeptimer -1
     timerdev   GARTEN
     timerevent battery: ok,humidity: 43,T: 11.0 H: 43,temperature: 11.0,dewpoint: -1.1,D: -1.1,statTemperatureDayAvg: 19.0,statTemperatureDayMax: 26.2
     triggerDev GARTEN
     DOIF_eventa:
       cmd_nr: 5
       cmd: 5
       cmd_event: GARTEN
       cmd_5
     DOIF_eventas:
       cmd_nr: 5
       cmd: 5
       cmd_event: GARTEN
       state: cmd_5
     timerevents:
       battery: ok
       humidity: 43
       T: 11.0 H: 43
       temperature: 11.0
       dewpoint: -1.1
       D: -1.1
       statTemperatureDayAvg: 19.0
       statTemperatureDayMax: 26.2
     timereventsState:
       battery: ok
       humidity: 43
       state: T: 11.0 H: 43
       temperature: 11.0
       dewpoint: -1.1
       D: -1.1
       statTemperatureDayAvg: 19.0
       statTemperatureDayMax: 26.2
     triggerEvents:
       battery: ok
       humidity: 43
       T: 11.0 H: 43
       temperature: 11.0
       dewpoint: -1.1
       D: -1.1
       statTemperatureDayAvg: 19.0
       statTemperatureDayMax: 26.2
     triggerEventsState:
       battery: ok
       humidity: 43
       state: T: 11.0 H: 43
       temperature: 11.0
       dewpoint: -1.1
       D: -1.1
       statTemperatureDayAvg: 19.0
       statTemperatureDayMax: 26.2
   internals:
   intervalfunc:
   localtime:
     0          1587872298
     1          1587872298
     2          1587872298
   readings:
     all         NIEDERSCHLAG:statWaterHour72 NIEDERSCHLAG:statWaterHour24 GARTEN:statTemperatureDayAvg GARTEN:statTemperatureDayMax NIEDERSCHLAG:basicSet garten_SWC_02:state garten_SWC_03:state
   realtime:
     0          05:38:18
     1          05:38:18
     2          05:38:18
   time:
     0          {sunrise("CIVIL")}
     1          {sunrise("CIVIL")}
     2          {sunrise("CIVIL")}
   timeCond:
     0          0
     1          1
     2          2
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1
     2           2
   trigger:
   triggertime:
     1587872298:
       localtime  1587872298
       hash:
   uiState:
   uiTable:
Attributes:
   alias      BEWÄSSERUNG GARTEN
   cmdpause   86400:86400:0:0:0
   do         always
   group      Gartensteuerung
   room       STEUERUNG
   timerWithWait 1
   wait       0,0,300:0,0,300:0,0,300:0,0:0,0:0


Habe übrigens ein weiteres DOIF, sehr ähnlich aufgebaut aber sonst völlig unabhängig vom ersten, und das zeigt exakt das gleiche Verhalten. Das sieht für mich schon nach einem systemischen Problem aus. Mit meinen - eingeschränkten - debugging Kenntnissen bin ich zwischenzeitlich am Ende!

P.S. Ein Sache ist mit noch aufgefallen. Villeicht hilft das ja das Problem einzugrenzen.

Ein set NameDOIF cmd_1 oder ein setNameDOIF cmd_2 zeigt KEINE Reaktion ein setNameDOIF cmd_3 aber schon!?

Soweit ich die commandref verstanden habe sollte ein set cmd_x doch alle commands ohne Prüfung der Bedingungen ausführen, oder?

Ich denke ich habe das gleiche oder zumindest sehr ähnliches Problem wie Steffen. Auch bei mir lief alles lange Zeit ohne Probleme
und ohne Änderung dann (nach dem Update) plötzlich nicht mehr.
Hat jemand noch eine Idee was die Ursache sein könnte?

Mein Garten und ich sind für jede Hilfe dankbar.
Grüße,
Ralf

EDIT: Auch das hier hört sich nach dem gleichen Problem an  ???
https://forum.fhem.de/index.php/topic,110455.0.html
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 25 April 2020, 23:51:40
Hallo Ralf,

ich durchschau es nicht, aber ich würde generell folgendes empfehlen:
Es gibt für jeden Zweig den eindeutigen Trigger Sonnenaufgang - deshalb würde ich jeden anderen Trigger vermeiden. D.h. alle Ausdrücke [device:reading] würde ich ändern und damit nur abfragen [?device:reading]

Gruß Otto
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 26 April 2020, 12:37:16
Hallo Otto,

danke für Deinen Tipp! Wie immer schnell und direkt auf den Punkt :-)

Habe Deinen Vorschlag übernommen und so zumindest etwas mehr Ruhe in mein System bekommen, da nicht jeder neue Sensorwert die DOIF triggert.

Am eigentlichen Problem hat es aber leider nichts verändert - das DOIF startet nach wie vor nicht bei Sonnenaufgang, auch wenn alle anderen Bedingungen erfüllt sind.

Da im ersten und zweiten Zweig des DOIF auch set cmd_1 / cmd_2 nicht funktioniert hatte ich die Conditions and ($month >= 5 and $month <=8) bzw. ($month < 5 or $month > 8) im Verdacht, denn der Rest ist gleich zum dritten Zweig. Aber auch wenn ich die rausnehme ändert sich nix  :-\

Bis zum Update vor zwei Wochen hat das aber noch zuverlässig funktioniert - daher meine Vermutung, dass es zwischenzeitlich eine
Syntax Änderung im DOIF gegegen haben könnte. Ich muss zugeben, dass ich zuvor über sehr lange Zeit (mindestens 6 Monate) keine Updates mehr gefahren habe, da alles perfekt lief und ich aus WAF Überlegungen heraus dachte: "never touch a running system"  ;)

Hat sonst noch jemand eine Eingebung?

Grüße,
Ralf
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 26 April 2020, 13:09:52
... ich habe die Ursache entdeckt aber noch keine Lösung für das Problem gefunden.

Da ich die Bewässerung über die Niederschlagsmenge steuere, sollen die ersten beide Zweige meines DOIF nach Auslösung 24 Stunden pausieren und erst nach 48 Stunden neu getriggert werden.

Hierzu habe ich folgendes Attribut gesetzt
attr controller_BEWAESSERUNG_GARTEN cmdpause 86400:86400:0:0:0

Wie bereits erwähnt, hat dies über längere Zeit zuverlässig funktioniert. Setze ich das cmdpause Attribut jetzt auf "0" lässt sich das DOIF plötzlich auch wieder im ersten und zweiten Pfad manuell triggern. Soweit ich die commandref verstehe ist das syntaktisch korrekt - oder übersehe ich da was? Geändert habe ich daran aber definitiv nichts!


Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 26 April 2020, 21:23:17
Hi,
ich kann nur bestätigen, dass hier DOIFs in FHEM nicht gleich auslösen wie noch vor einiger Zeit. Anders kann ich mir nicht erklären, dass hier im Forum mittlerweile 3-4 Bewässerungs-DOIFs alle zeitgesteuert plötzlich nicht mehr funktionieren. Und das noch dazu bei diesem trockenen Frühling. Meine Variante geht auch nicht mehr. Ich setze die Startzeit über einen Dummy (Startzeit_BW1).

defmod di_Bewaesserung_BW1 DOIF ([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 )
attr di_Bewaesserung_BW1 room AUSSEN,KG->Maschinenraum
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 26 April 2020, 21:30:18
Zitat von: baerm am 26 April 2020, 21:23:17
Hi,
ich kann nur bestätigen, dass hier DOIFs in FHEM nicht gleich auslösen wie noch vor einiger Zeit. Anders kann ich mir nicht erklären, dass hier im Forum mittlerweile 3-4 Bewässerungs-DOIFs alle zeitgesteuert plötzlich nicht mehr funktionieren. Und das noch dazu bei diesem trockenen Frühling. Meine Variante geht auch nicht mehr. Ich setze die Startzeit über einen Dummy (Startzeit_BW1).

defmod di_Bewaesserung_BW1 DOIF ([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 )
attr di_Bewaesserung_BW1 room AUSSEN,KG->Maschinenraum

Bitte ein List des DOIF im "Fehlerzustand"

Anhand der RAW DEF kann man nut raten was der aktuelle Zustand ist.

Gesendet von meinem S68Pro mit Tapatalk

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 26 April 2020, 21:40:28
Was  mir auf Anhieb auffällt:
(set KNX_0503001 on ;; set KNX_0503002 off) ist falsch:
ZitatAngaben im Ausführungsteil (gilt nur für FHEM-Modus):   back

Der Ausführungsteil wird durch runde Klammern eingeleitet. Es werden standardmäßig FHEM-Befehle angegeben, wie z. B.: ...(set lamp on)

Sollen mehrere FHEM-Befehle ausgeführt werden, so werden sie mit Komma statt mit Semikolon angegeben ... (set lamp1 on, set lamp2 off)

Edit: Das dürfte auch falsch sein: [Startzeit_BW1] siehe Doku (https://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben).
Das könnte so funktionieren:[[Startzeit_BW1]]

falls das voriges Jahr noch lief: Es besteht kein Anspruch auf die Beibehaltung von Fehlern. ;)
Verschwörungen gegen Bewässerungs DOIFs in der trockenen Zeit würde ich ausschließen. ;)

Gruß Otto
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 26 April 2020, 22:45:25
Hallo Otto,
stimmt, das kann man optimieren. Warum ich mir das so angewöhnt habe mit zwei Semikolon statt einem Komma weiß ich nicht. Dies ist aber sicher nicht die Ursache für mein Problem. Ich habe ca. 50 DOIFs, die alle so aufgebaut sind und alle funktionieren prächtig. Nur das DOIF der Bewässerung sollte zu einen bestimmten Uhrzeit starten und das geht nicht mehr. Übrigens gibt es ein weiteres DOIF für den Mäher, das auch nicht läuft. Dieses sollte auch zu einer bestimmten Uhrzeit gestartet werden. Bei Betrachtung der anderen DOIFs im Forum, die angeblich auch gerade nicht mehr funktionieren, ist mir aufgefallen, dass alle zu einer fixen Uhrzeit eingeschaltet werden sollten. Hier die lists:

Internals:
   FUUID      5d83ec12-f33f-e2c0-b813-d376bc0b4b27cc0f
   FVERSION   98_dummy.pm:0.206650/2019-12-06
   NAME       Startzeit_BW1
   NR         505
   STATE      19:55
   TYPE       dummy
   READINGS:
     2020-04-26 19:49:39   state           19:55
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,global,Startzeit_BW1
   NR         906
   NTFY_ORDER 50-di_Bewaesserung_BW1
   STATE      cmd_3
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-26 19:59:53   Device          KNX_0503011
     2020-04-26 20:25:00   cmd             3
     2020-04-26 20:25:00   cmd_event       timer_2
     2020-04-26 20:25:00   cmd_nr          3
     2020-04-26 19:59:53   e_KNX_0503011_state on
     2020-04-26 19:49:39   e_Startzeit_BW1_STATE 19:55
     2020-04-21 21:08:49   mode            enabled
     2020-04-26 20:25:00   state           cmd_3
     2020-04-26 20:15:00   timer_01_c02    27.04.2020 20:15:00
     2020-04-26 20:25:00   timer_02_c03    27.04.2020 20:25:00
     2020-04-26 19:49:39   timer_03_c04    26.04.2020 20:55:00
     2020-04-26 19:49:39   timer_04_c05    26.04.2020 21:45: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$|^KNX_0503011$|^Startzeit_BW1$|^Bewaesserung1$
     NOTIFYDEV  global|KNX_0503011|Startzeit_BW1|Bewaesserung1
     event      timer_2
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   
     timerevent timer_2
     triggerDev
     timerevents:
       timer_2
     timereventsState:
       timer_2
     triggerEvents:
       timer_2
     triggerEventsState:
       timer_2
   internals:
     all         Startzeit_BW1:STATE Bewaesserung1:STATE
   interval:
   intervalfunc:
   intervaltimer:
   localtime:
     0          1588011300
     1          1588011900
     2          1587927300
     3          1587930300
   perlblock:
   readings:
     all         KNX_0503011:state
   realtime:
     0          20:15:00
     1          20:25:00
     2          20:55:00
     3          21:45: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:
     1587927300:
       localtime  1587927300
       hash:
     1587930300:
       localtime  1587930300
       hash:
     1588011300:
       localtime  1588011300
       hash:
     1588011900:
       localtime  1588011900
       hash:
   uiState:
   uiTable:
Attributes:
   room       AUSSEN,KG->Maschinenraum

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 26 April 2020, 22:50:19
[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
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 27 April 2020, 08:14:55
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
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Damian am 27 April 2020, 08:22:04
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
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 27 April 2020, 09:57:07
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
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 27 April 2020, 10:02:41
Du hast um 9.42 deinen dummy auf 8.45 gestellt?

Gesendet von meinem S68Pro mit Tapatalk

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 27 April 2020, 10:16:41
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
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 27 April 2020, 10:26:17
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")....
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 14:42:18
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?
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 27 April 2020, 14:46:25
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.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 15:13:12
@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.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 15:15:33
@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
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 27 April 2020, 15:18:43
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?
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 15:25:12
@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?!

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 27 April 2020, 15:27:49
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. :)
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 15:41:01
@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.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 27 April 2020, 15:44:33
mit 10Sek kann ich dein DOIF abfeuern. aber eben nur nach mehr als 10Sek jeweils.

Bin mir nicht ganz sicher, aber es kann auch sein dass die cmdpause erst losläuft wenn der Zweig abgearbeitet ist.
Da du aber 5 Minuten Pause wür den zweiten Wasserbefehl hast kommen die noch oben drauf.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 15:55:37
Zitat von: Frank_Huber am 27 April 2020, 15:44:33
mit 10Sek kann ich dein DOIF abfeuern. aber eben nur nach mehr als 10Sek jeweils.

...hmmm!?
Jetzt verwirrst Du mich etwas. Bei mir funktionieren nur max 9 Sekunden - ab 10 Sekunden tut sich gar nix mehr

ZitatBin mir nicht ganz sicher, aber es kann auch sein dass die cmdpause erst losläuft wenn der Zweig abgearbeitet ist.
Da du aber 5 Minuten Pause wür den zweiten Wasserbefehl hast kommen die noch oben drauf.

Das setzen von cmdpause sollte sich m.E. nur auf die ausführung des nächsten Triggers  auswirken. Das manuelle Auslösen
sollte dagegen alle Conditions ignorieren - so habe ich zumindest die commandref verstanden.


Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 27 April 2020, 16:06:07
Das wait Attribut gehört zum Ausführungsteil.

ohne das wait Attribut geht dein DOIF auch mit 100Sek in cmdpause.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 16:23:02
???
Das verstehe ich jetzt nicht!

Die 1. Frage ist doch warum lösen weder cmd_1 noch cmd_2 aus, wenn bei cmdpause x:y:0:0 mit x|y >9 ?
Wenn wait hier reinpfuscht würden ja nur 1.3 bzw 2.3 gar nicht oder verzögert auslösen

Und 2. was hat sich geändert, dass gleichzeitig mehrere DOIF mit dieser Konstruktion ohne Änderung
bei mir nicht mehr funktionieren?

Ich beharre ja nicht drauf, dass meine bisherige Konstruktion korrekt war oder um es mit Ottos Worten zu
formulieren
ZitatEs besteht kein Anspruch auf die Beibehaltung von Fehlern.
;)
Aber um es zu korrigieren, muss ich erst verstehen wo mein Fehler liegt und was ich anderes machen muss?
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 27 April 2020, 16:38:51
Wenn ich das jetzt richtig sehe läuft die Zeit der cmdpause los nachdem der ganze Zweig abgearbeitet ist.
Und das ist er erst nachdem cmd_x_3 ausgeführt wurde nach den 5 Minuten.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 17:02:05
Zitat von: Frank_Huber am 27 April 2020, 16:38:51
Wenn ich das jetzt richtig sehe läuft die Zeit der cmdpause los nachdem der ganze Zweig abgearbeitet ist.
Und das ist er erst nachdem cmd_x_3 ausgeführt wurde nach den 5 Minuten.

Soweit kann ich Dir folgen. Aber dazu muss das DOIF halt erst mal getriggert werden was es nicht tut (weder manuell noch via sunset_el) wenn die Verzögerung bei cmdpause > 9 Sekunden ist :-\
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 27 April 2020, 18:10:50
Ich bin mit euren Tests nicht mitgekommen.  ::)
Zwei Zitate aus der Doku:
Bei wait steht in der Doku:
ZitatDie Verzögerungszeit bezieht sich immer auf den vorherigen Befehl.

Bei cmdpause weiß ich nicht, ob es auch für manuell auslösen wirkt:
ZitatZwangspause für das Ausführen eines Kommandos seit der letzten Zustandsänderung   back

Mit dem Attribut cmdpause <Sekunden für cmd_1>:<Sekunden für cmd_2>:... wird die Zeitspanne in Sekunden angegeben für eine Zwangspause seit der letzten Zustandsänderung. In der angegebenen Zeitspanne wird ein Kommando nicht ausgeführt, auch wenn die dazugehörige Bedingung wahr wird.

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 27 April 2020, 22:48:42
Hallo Otto,

das Problem ist ja nicht, dass cmdpause nicht greift, dh. nicht pausiert wird, sondern dass die Zweige des DOIF überhaupt nicht getriggert werden (weder manuell noch zeitgesteuert) bei denen im im Attribut cmdpause Werte  >9 stehen.

Das Problem ist bei mir in mehreren DOIF reproduierbar und trat vor dem ersten Update nach langer Zeit, das ich vor zwei Wochen durchgeführt habe definitiv nicht auf. Hat das komplette letzte Jahr zuverlässig funktioniert.

Hast Du eine Idee was die Ursache sein könnte ? Hat sich da was am Wertebereich der Parameter bei cmdpause vereändert? Oder habe ich da etwa einen alten Syntaxfehler eingebaut, der sich erst jetzt auswirkt?

Bin gespannt auf dein Feedback...
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: amenomade am 28 April 2020, 01:23:37
Wie oft melden sich die andere Sensoren? NIEDERSCHLAG, GARTEN, garten_SWC_02 und 03?

Und wie stellst Du fest, dass "die Zweige des DOIF überhaupt nicht getriggert werden"? Wartest Du jedes Mal auf {sunrise} ?

Ich würde gerne ein "list" des DOIFs morgen früh sehen (nach sunrise)
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Damian am 28 April 2020, 07:40:18
Dass cmdpause > 9 nicht funktioniert, kann ich nicht nachvollziehen.

Gegenbeweis:

defmod di_test DOIF ([FS])
attr di_test cmdpause 10
attr di_test do always


FS ist ein Dummy, testen kann man es mit trigger FS.

Nach 10 Sekunden wird cmd_1 immer ausgeführt, wenn das Modul angetriggert wird.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 28 April 2020, 08:51:50
Guten Morgen,
mein gestern korrigiertes DOIF, dass einmal durchgelaufen ist, funktionierte heute Früh um 07:30 wieder nicht. Habs um 08:46 nochmal versucht und ist wieder nicht gelaufen. Was stimmt hier nicht?

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,global,Startzeit_BW1,Bewaesserung1
   NR         904
   NTFY_ORDER 50-di_Bewaesserung_BW1
   STATE      initialized
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-28 08:47:43   cmd             0
     2020-04-28 08:47:43   mode            enabled
     2020-04-28 08:47:43   state           initialized
     2020-04-28 08:47:43   timer_01_c01    29.04.2020 08:46:00
     2020-04-28 08:47:43   timer_02_c02    28.04.2020 09:06:00
     2020-04-28 08:47:43   timer_03_c03    28.04.2020 09:16:00
     2020-04-28 08:47:43   timer_04_c04    28.04.2020 09:46:00
     2020-04-28 08:47:43   timer_05_c05    28.04.2020 10:36: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:
     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:
   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
     globalinit 1
     last_timer 5
     sleeptimer -1
   internals:
     all         Bewaesserung1:STATE
   intervalfunc:
   localtime:
     0          1588142760
     1          1588057560
     2          1588058160
     3          1588059960
     4          1588062960
   readings:
     all         KNX_0503011:state
   realtime:
     0          08:46:00
     1          09:06:00
     2          09:16:00
     3          09:46:00
     4          10:36: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:
     1588057560:
       localtime  1588057560
       hash:
     1588058160:
       localtime  1588058160
       hash:
     1588059960:
       localtime  1588059960
       hash:
     1588062960:
       localtime  1588062960
       hash:
     1588142760:
       localtime  1588142760
       hash:
   uiState:
   uiTable:
Attributes:
   room       AUSSEN,KG->Maschinenraum
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 28 April 2020, 10:25:24
@ amenomade
Danke für Deine Antwort.

Zitat von: amenomade am 28 April 2020, 01:23:37
Wie oft melden sich die andere Sensoren? NIEDERSCHLAG, GARTEN, garten_SWC_02 und 03?
NIEDERSCHLAG ist ein Z-Wave Device und ziemlich faul - Meldet sich wenn es nicht regnet u.U. nur alle 24 Stunden
GARTEN und garten_SWC_x sind Homatic Geräte die sich i.d.R so alle 3 Minuten melden. Die Werte angezeigten sind auch plausibel...

ZitatUnd wie stellst Du fest, dass "die Zweige des DOIF überhaupt nicht getriggert werden"? Wartest Du jedes Mal auf {sunrise} ?

Indem ich set cmd_x absetze oder wie vermutet auf {sunrise} warte (da steh´ ich auf dem Schlauch wie ich das manuell triggern könnte   :-[  )

ZitatIch würde gerne ein "list" des DOIFs morgen früh sehen (nach sunrise)

Habe Deine Antwort gerade erst gesehen und in der Zwischenzeit war ich weiter am testen. Daher ist das "list" jetzt wohl leider nicht mehr wirklich aussagekräftig - werde gleich morgen früh eines "jungfräuliches" erstellen.

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 28 April 2020, 10:34:33
@Damian
Auch Dir danke für Deine Unterstützung!

ZitatDass cmdpause > 9 nicht funktioniert, kann ich nicht nachvollziehen.

...hmmm?
Vielleicht liegt es dann an meiner Formatierung? Ich habe ja cmdpause für mehrere commands gesetzt:
attr controller_BEWAESSERUNG_GARTEN cmdpause 86400:86400:0:0:0

Habe gestern Abend zum Testen mal
attr controller_BEWAESSERUNG_GARTEN cmdpause 0:0:0:0:0 gesetzt und schon läuft alles wie es soll  ?!



Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 28 April 2020, 14:33:44
@Matthias Du warst mit deinem Versuch aber zu spät :)
Zitat2020-04-28 08:47:43   timer_01_c01    29.04.2020 08:46:00
Damit wird der test den Du heute morgen wolltest erst morgen :)

Warum es heute morgen nicht ging kann ich nicht sagen. Es wäre ev. gut gewesen ohne Veränderung erstmal ein list zu machen, da sieht man eventuell woran es gelegen hat.

Gruß Otto
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 28 April 2020, 16:23:55
Hallo Otto,
Das list habe ich leider erst nach einer Änderung erstellt. Ich werde morgen den selben Test machen und das List vorher und nachher erstellen.
lg,
Matthias
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 28 April 2020, 16:42:57
Sorry Matthias, ich kenne auch einen Michael Baer :)

mir fällt noch folgendes auf, ich bin aber unsicher!
Dein erster Zweig hat einen Eventtrigger (Zeit) und den Zustand von Bewaesserung1.
([[Startzeit_BW1]] and [Bewaesserung1] eq "an")

Wenn sich der Zustand von Bewaesserung1 nie ändert und die anderen DOELSEIF Zweige auch nicht wahr werden, ändert sich der Zustand des DOIF nicht. Tritt dann folgendes ein?
ZitatIm FHEM-Modus arbeitet das Modul mit Zuständen, indem es den eigenen Status auswertet. Die Ausführung erfolgt standardmäßig nur ein mal, bis ein anderer DOIF-Zweig und damit eine Ändernung des eigenen Status erfolgt.
...
Wünscht man eine Ausführung des gleichen Befehls mehrfach nacheinander bei jedem Trigger, unabhängig davon welchen Status das DOIF-Modul hat,..., dann muss man das per "do always"-Attribut angeben:

Würde das "das einmal durchgelaufen ist" erklären ;)

Gruß Otto
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: amenomade am 28 April 2020, 18:35:03
@Otto: eigentlich bin ich auf einer ähnliche Spur:

- entweder befindet sich der DOIF in einem Zweig woraus er nicht mehr kommt (wäre der Fall für baer: kein DOELSE und kein do always)

- oder er wird durch eine andere Triggerung (nach sunrise) in einen anderen Zustand versetzt, was die Timer abbricht. (wäre der Fall für fast-eddy). Deswegen habe ich nach einem "list" des DOIFs im "falschen" Zustand nach sunrise nachgefragt. Da war auf jeden Fall deine Empfehlung, die andere Bedingungen von [...] auf [?...] zu ändern, nicht schlecht.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 28 April 2020, 22:08:25
Hallo Otto,
vielen Dank für den Hinweis. Do always habe ich sonst gesetzt, aber offensichtlich bei diesem nicht. hmmmm  :-\
Ich habe zwei Bedingungen im ersten Zweig und die Zeitangabe trifft zumindest einmal pro Tag zu. Wenn ich dafür das Do always benötige, werde ich es hinzufügen. Übrigens setze ich Bewaesserung1 über einen Dummy (setList) um damit diese Funktion ein und ausschalten zu können. Ich werde das Doif bis morgen noch so belassen, wie es ist. Heute habe ich es manuell gestartet. Morgen 8:55 sollte es wieder laufen.

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,global,Startzeit_BW1,Bewaesserung1
   NR         904
   NTFY_ORDER 50-di_Bewaesserung_BW1
   STATE      cmd_5
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-28 09:11:01   Device          KNX_0503011
     2020-04-28 10:45:00   cmd             5
     2020-04-28 10:45:00   cmd_event       timer_5
     2020-04-28 10:45:00   cmd_nr          5
     2020-04-28 09:11:01   e_KNX_0503011_state on
     2020-04-28 08:47:43   mode            enabled
     2020-04-28 10:45:00   state           cmd_5
     2020-04-28 09:10:46   timer_01_c01    29.04.2020 08:55:00
     2020-04-28 09:15:00   timer_02_c02    29.04.2020 09:15:00
     2020-04-28 09:25:00   timer_03_c03    29.04.2020 09:25:00
     2020-04-28 09:55:00   timer_04_c04    29.04.2020 09:55:00
     2020-04-28 10:45:00   timer_05_c05    29.04.2020 10:45: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:
     itimer:
       Startzeit_BW1:
         itimer:
           &STATE     ^Startzeit_BW1$
   attr:
     cmdState:
     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:
   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_5
     globalinit 1
     last_timer 5
     sleeptimer -1
     timerdev   
     timerevent timer_5
     triggerDev
     timerevents:
       timer_5
     timereventsState:
       timer_5
   internals:
     all         Bewaesserung1:STATE
   interval:
   intervalfunc:
   intervaltimer:
   localtime:
     0          1588143300
     1          1588144500
     2          1588145100
     3          1588146900
     4          1588149900
   readings:
     all         KNX_0503011:state
   realtime:
     0          08:55:00
     1          09:15:00
     2          09:25:00
     3          09:55:00
     4          10:45: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
   trigger:
   triggertime:
     1588143300:
       localtime  1588143300
       hash:
     1588144500:
       localtime  1588144500
       hash:
     1588145100:
       localtime  1588145100
       hash:
     1588146900:
       localtime  1588146900
       hash:
     1588149900:
       localtime  1588149900
       hash:
   uiState:
   uiTable:
Attributes:
   room       AUSSEN,KG->Maschinenraum


Ich werde dann entscheiden ob ich das DOIF umbaue und im ersten Zeig auf sunrise statt fixer Uhrzeit umstellt, bzw auch noch die Aussentemperatur als weitere Bedingung hineinnehme.
Ich werde berichten.
lg,
Matthias   
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 29 April 2020, 07:58:08
@amenomade

Hier nun das List nach einem erneuten sunrise. Ausgelöst hat das DOIF aber erwartungsgemäß nicht. Na wenigstens ist der Fehler
reproduzierbar  ::)

Internals:
   DEF        ([{sunrise("CIVIL")}] and ($month >= 5 and $month <=8) and [?NIEDERSCHLAG:statWaterHour72] <= 0.008)
(set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 1 erfüllt. Nächster Start in 48 Sunden!' '' 0 '' )
(set garten_SWC_02 on-for-timer 600)
(set garten_SWC_03 on-for-timer 600)

DOELSEIF ([{sunrise("CIVIL")}] and ($month < 5 or $month > 8) and [?NIEDERSCHLAG:statWaterHour72] <= 0.004)
(set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 2 erfüllt. Nächster Start in 48 Sunden!' '' 0 '' )
(set garten_SWC_02 on-for-timer 600)
(set garten_SWC_03 on-for-timer 600)

DOELSEIF ([{sunrise("CIVIL")}] and [?NIEDERSCHLAG:statWaterHour24] <= 0.002 and ([?GARTEN:statTemperatureDayAvg] >= 22.0 or [?GARTEN:statTemperatureDayMax] >= 28))
(set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 3 erfüllt.' '' 0 '' )
(set garten_SWC_02 on-for-timer 600)
(set garten_SWC_03 on-for-timer 600)

DOELSEIF ([NIEDERSCHLAG:basicSet] == 99 and ([?garten_SWC_02:state] eq "on" or [?garten_SWC_03:state] eq "on"))
(set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Beendet wegen Regen!' '' 0 '' )
(set garten_SWC_02 off, set garten_SWC_03 off)

DOELSE

   FUUID      5d388d65-f33f-d5e6-45eb-952d6ef7b2b122b4
   MODEL      FHEM
   NAME       controller_BEWAESSERUNG_GARTEN
   NOTIFYDEV  NIEDERSCHLAG,global
   NR         493
   NTFY_ORDER 50-controller_BEWAESSERUNG_GARTEN
   STATE      cmd_2
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-28 05:39:27   cmd             2.3
     2020-04-28 05:39:27   cmd_event       timer_2
     2020-04-28 05:39:27   cmd_nr          2
     2020-04-28 05:39:27   cmd_seqnr       3
     2020-04-27 15:29:56   mode            enabled
     2020-04-28 05:39:27   state           cmd_2
     2020-04-29 05:32:32   timer_01_c01    30.04.2020 05:30:39
     2020-04-29 05:32:32   timer_02_c02    30.04.2020 05:30:39
     2020-04-29 05:32:32   timer_03_c03    30.04.2020 05:30:39
   Regex:
     accu:
     cond:
       NIEDERSCHLAG:
         3:
           basicSet   ^NIEDERSCHLAG$:^basicSet:
   attr:
     cmdpause:
       87000
       87000
       0
       0
       0
     wait:
       0:
         0
         0
         300
       1:
         0
         0
         300
       2:
         0
         0
         300
       3:
         0
         0
       4:
         0
         0
       5:
         0
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ($month >= 5 and $month <=8) and ::ReadingValDoIf($hash,'NIEDERSCHLAG','statWaterHour72') <= 0.008
     1          ::DOIF_time_once($hash,1,$wday) and ($month < 5 or $month > 8) and ::ReadingValDoIf($hash,'NIEDERSCHLAG','statWaterHour72') <= 0.004
     2          ::DOIF_time_once($hash,2,$wday) and ::ReadingValDoIf($hash,'NIEDERSCHLAG','statWaterHour24') <= 0.002 and (::ReadingValDoIf($hash,'GARTEN','statTemperatureDayAvg') >= 22.0 or ::ReadingValDoIf($hash,'GARTEN','statTemperatureDayMax') >= 28)
     3          ::ReadingValDoIf($hash,'NIEDERSCHLAG','basicSet') == 99 and (::ReadingValDoIf($hash,'garten_SWC_02','state') eq "on" or ::ReadingValDoIf($hash,'garten_SWC_03','state') eq "on")
   days:
   do:
     0:
       0          set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 1 erfüllt. Nächster Start in 48 Sunden!' '' 0 ''
       1          set garten_SWC_02 on-for-timer 600
       2          set garten_SWC_03 on-for-timer 600
     1:
       0          set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 2 erfüllt. Nächster Start in 48 Sunden!' '' 0 ''
       1          set garten_SWC_02 on-for-timer 600
       2          set garten_SWC_03 on-for-timer 600
     2:
       0          set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Gestartet: Bedingung 3 erfüllt.' '' 0 ''
       1          set garten_SWC_02 on-for-timer 600
       2          set garten_SWC_03 on-for-timer 600
     3:
       0          set pushmsg msg 'BEWÄSSERUNG GARTEN' 'Beendet wegen Regen!' '' 0 ''
       1          set garten_SWC_02 off, set garten_SWC_03 off
     4:
       0         
   helper:
     DEVFILTER  ^global$|^NIEDERSCHLAG$
     NOTIFYDEV  global|NIEDERSCHLAG
     event      timer_2
     globalinit 1
     last_timer 3
     sleeptimer -1
     timerdev   
     timerevent timer_2
     triggerDev
     timerevents:
       timer_2
     timereventsState:
       timer_2
     triggerEvents:
       timer_2
     triggerEventsState:
       timer_2
   interval:
   intervalfunc:
   localtime:
     0          1588217439
     1          1588217439
     2          1588217439
   perlblock:
   readings:
     all         NIEDERSCHLAG:basicSet
   realtime:
     0          05:30:39
     1          05:30:39
     2          05:30:39
   time:
     0          {sunrise("CIVIL")}
     1          {sunrise("CIVIL")}
     2          {sunrise("CIVIL")}
   timeCond:
     0          0
     1          1
     2          2
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1
     2           2
   triggertime:
     1588217439:
       localtime  1588217439
       hash:
   uiState:
   uiTable:
Attributes:
   alias      BEWÄSSERUNG GARTEN
   cmdpause   87000:87000:0:0:0
   do         always
   group      Gartensteuerung
   room       STEUERUNG
   timerWithWait 1
   wait       0,0,300:0,0,300:0,0,300:0,0:0,0:0


Ich hoffe du findest darin einen Hinweis, dem ich weiter nachgehen kann. Ich konnte beim ersten Durchschauen leider keine Auffälligkeiten feststellen.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 29 April 2020, 08:15:56
Dem doif nach wurde cmd2 gestern ausgeführt.
Heute zum trigger zeitpunkt war die cmdpause noch nicht vorbei. Also keine Auslösung ist korrekt.

Gesendet von meinem S68Pro mit Tapatalk

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 29 April 2020, 11:16:27
@Frank
Gestern wurde gar keine Pause ausgelöst!

Wie ich gestern geschrieben habe, hatte ich das Attribut zum Testen auf "0:0:0:0:0" gesetzt -> DOIF triggert wie es soll!
Dann hatte ich das Attribut zum Vergleich auf die Werte "87000:87000:0:0:0" gesetz -> DOIF triggert NICHT!

Und auch im LOG ist kein Eintrag in diesem Zusammenhang zu finden.  :(
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 29 April 2020, 11:30:53
Und was ist das? cmdpause   87000:87000:0:0:0
Steht doch in deinem list?!
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Stefan Knoll am 29 April 2020, 11:33:51
Hallo,

bei mir tritt ein solches Problem ebenfalls auf, seit ich FHEM vor etwa zwei Wochen zum letzten Mal aktualisiert hatte. Ich bin inzwischen soweit, dass ich festgestellt habe, dass es Ausführungen des DOIF gibt, die zwar das dort enthaltene Kommando einwandfrei ausführen, dabei aber die Readings cmd und cmd_nr nicht aktualisieren. Damit werden dann weitere Ausführungen des Kommandos in Abhängigkeit von Attributen, die die Wiederholungszahl beeinflussen unterbunden und auch Abhängigkeiten von [?$SELF:cmd] funktionieren nicht mehr.

Grüße
Stefan
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 29 April 2020, 13:02:00
Hallo Otto,

Zitat von: Otto123 am 29 April 2020, 11:30:53
Und was ist das? cmdpause   87000:87000:0:0:0
Steht doch in deinem list?!

Ja - deshalb hat das DOIF ja heute morgen auch nicht ausgelöst ;)
Als ich gestern morgen noch (testhalber) cmdpause 0:0:0:0:0 drin hatte aber schon.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 29 April 2020, 13:04:45
...ich lasse das DOIF jetzt mal unverändert - keine weiteren Testst
Mal sehen was morgen früh passiert?
Ich wette wieder nichts :-|
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 29 April 2020, 19:05:27
Also war es doch dann heute kein Fehler? Da hab eich deinen Post falsch verstanden.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: baerm am 29 April 2020, 19:19:55
Hallo Otto,
kurzes Update von meiner Seite. Heute morgen lief das DOIF ganz normal. Ich lasse es noch bis morgen und wenn es wieder läuft, paßt eigentlich alles. Do Always ist dann aber wie es aussieht auch nicht notwendig.
lg,
Matthias
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 29 April 2020, 21:38:24

Hallo Otto,

Zitat von: Otto123 am 29 April 2020, 19:05:27
Also war es doch dann heute kein Fehler? Da hab eich deinen Post falsch verstanden.

... leider doch - es hat nur mein Fehlerbild bestätigt:

cmd 87000:87000:0:0:0 -> DOIF löst NICHT aus und kein Eintrag im Log
cmd 0:0:0:0:0  -> DOIF löst aus mit korrektem Eintrag im Log

Frank hatte den state: cmd_2 von gestern fäschlicherweise als korrekte Auslösung von heute morgen interpretiert
Mal sehen was morgen früh passiert ...?
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Otto123 am 29 April 2020, 21:44:56
Ich verstehe es nicht. Und Frank sicher auch nicht. Wenn es Gestern ausgelöst hat und du einen Tag cmdpause hast, dann ist es doch richtig, dass er Heute nicht ausgelöst hat. Er sollte erst morgen wieder auslösen?!
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Frank_Huber am 29 April 2020, 21:47:15
Ja, ich sehe da momentan keine Probleme nach den gegebenen Angaben.

Das cmdpause Attribut wird wohl on the fly übernommen, also sobald gesetzt geht nic mehr.

Bin auf das List von morgen früh gespannt.

Gesendet von meinem S68Pro mit Tapatalk

Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 29 April 2020, 22:24:11
Zitat von: Otto123 am 29 April 2020, 21:44:56
Ich verstehe es nicht. Und Frank sicher auch nicht. Wenn es Gestern ausgelöst hat und du einen Tag cmdpause hast, dann ist es doch richtig, dass er Heute nicht ausgelöst hat. Er sollte erst morgen wieder auslösen?!

...zugegeben durch die verschiedenen Threads in einem Thema ging es etwas durcheinander:

Gestern hat das DOIF ausgelöst weil zum Zeitpunkt sunrise das attribut cmdpause die Werte 0:0:0:0:0 hatte.
Wie weiter oben geschrieben habe ich das vorgestern testhalber so gesetzt! D.h. cmdpause konnte also gestern gar nicht greifen (und somit heute eine Pause auslösen) weil nicht gesetzt!

Im zweiten Schritt habe ich das attribut cmdpause dann gestern (nach sunrise) auf 87000:87000:0:0:0 gesetzt, um zu prüfen ob meine Fehlerbeobachtung reproduzierbar ist. Das hat sich ja auch bestätigt, denn heute Morgen zu sunrise hat das DOIF ja eben nicht ausgelöst.

Da sich der Zustand des DOIF von gestern auf heute nicht geändert hat, ist der Wert auf cmd_2 stehen geblieben.

Selbst wenn cmdpause 0:0:0:0:0 gestern eine Verzögerung ausgelöst haben sollte, müsste das DOIF spätestens morgen früh wieder getriggert werden da timer_02_c02 30.04.2020 05:30:39
Ich bin gespannt!

Ich halte Euch auf dem Laufenden - Danke für Eure Geduld!
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Damian am 29 April 2020, 22:41:22
ZitatGestern hat das DOIF ausgelöst weil zum Zeitpunkt sunrise das attribut cmdpause die Werte 0:0:0:0:0 hatte.
Wie weiter oben geschrieben habe ich das vorgestern testhalber so gesetzt! D.h. cmdpause konnte also gestern gar nicht greifen (und somit heute eine Pause auslösen) weil nicht gesetzt!

Im zweiten Schritt habe ich das attribut cmdpause dann gestern (nach sunrise) auf 87000:87000:0:0:0 gesetzt, um zu prüfen ob meine Fehlerbeobachtung reproduzierbar ist. Das hat sich ja auch bestätigt, denn heute Morgen zu sunrise hat das DOIF ja eben nicht ausgelöst.

Es funktioniert alles, wie programmiert.

Du kannst auch morgen paar Sekunden vor sunrise 87000:87000:0:0:0 setzen und es wird nicht funktionieren.

Das Modul schaut erst beim Trigger nach dem Datum des Status, errechnet dann die Zeitdifferenz und vergleicht sie mit cmdpause. Da die Tage z. Zt. unter 600 Sekunden länger werden (87000-86400=600), ist die Zeitdifferenz unter 87000 und dadurch wird das Modul nur jeden zweiten Tag auslösen.
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: fast-eddy am 02 Mai 2020, 12:21:43
Hallo zusammen,

ich wollte mich ja mit einem Status zurückmelden.
Um nicht noch mehr Verwirrung zu stiften habe ich das DOIF jetzt mal drei Tage "untouched" gelassen, so dass ein kompletter Zyklus duchlaufen konnte.

Und was soll ich sagen: MEA CULPA!!! Es funktioniert!

Anscheinend hatte ich vor meinem ersten Post ein generelles Problem mit meinem FHEM da verschiedene "Regeln", ob mit oder ohne DOIF, nicht sauber funktioniert haben. Und in meinem Debugging Wahn habe ich dann zu viele Dinge in zu kurzer Zeit ausprobiert - Geduld ist nicht unbedingt meine Stärke  ::)

RETRO:
Der entscheidende Tipp kam m.E. von Frank und zwar der Hinweis auf die z.Z. schnell länger werdenden Tage!
Ich habe es nicht auf Anhieb kapiert aber nachdem ich die Verzögerung über cmdpause nun auf 87000 Sekunden (d.h. 24 Stunden und 10 Minuten) gesetzt habe, sollte es auch dauerhaft klappen, da in meinen Breitengraden das maximale tägliche Delta der Tageslänge etwa 5 Minuten beträgt.

Mein Tipp an alle: Bei der Fehlersuche im Zusammenhang mit sunrise triggern hilft nur Geduld!  8)

Sorry wenn ich da etwas Chaos verursacht habe. Vielen Dank an alle Mitdenker und Fehlersucher und vor allem vielen Dank für EURE Geduld!   ;)
Titel: Antw:einfaches DOIF wird nicht ausgeführt?
Beitrag von: Damian am 02 Mai 2020, 12:34:56
Hier mal zur Information:

Bei Angaben der Art [{meineZeitFunktion}] braucht man sich beim DOIF keine Gedanken zum doppelten Triggern am gleichen Tag machen. DOIF erkennt den Triggertag und verschiebt den nächsten Trigger auf den nächsten Tag, auch wenn die neu errechnete Zeit noch am gleichen Tag liegen sollte. Das gilt allerdings nur für DOIF und nicht für at, dort muss die Funktion selbst dafür Sorge tragen, die Zeit auf den nächsten Tag zu verschieben.