einfaches DOIF wird nicht ausgeführt?

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

Vorheriges Thema - Nächstes Thema

Otto123

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
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

amenomade

@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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

baerm

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   

fast-eddy

#48
@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.
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

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


fast-eddy

@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.  :(
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|

Otto123

Und was ist das? cmdpause   87000:87000:0:0:0
Steht doch in deinem list?!
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

Stefan Knoll

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

fast-eddy

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.
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

...ich lasse das DOIF jetzt mal unverändert - keine weiteren Testst
Mal sehen was morgen früh passiert?
Ich wette wieder nichts :-|
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|

Otto123

Also war es doch dann heute kein Fehler? Da hab eich deinen Post falsch verstanden.
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

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

fast-eddy


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 ...?
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|

Otto123

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?!
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

Frank_Huber

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