FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Starsurfer am 21 April 2020, 17:59:30

Titel: DOIF Gartenbewässerung macht nichts
Beitrag von: Starsurfer am 21 April 2020, 17:59:30
Moin,
ich habe mir ein DOIF für meine Gartenbewässerung zusammen gebaut, allerdings löst es nicht wie vorgesehen aus. Es passiert einfach gar nichts, keine Fehlermeldung nichts.
Manuell angestoßen, läuft es ganz normal durch.
Ich finde einfach keinen Fehler, vielleicht kann ja mal jemand drüber schauen?

Das DOIF:
([05:50] and [Beregnungsautomatik:state] eq "An" and ([RegenMengeGestern:state]+[RegenMengeHeute:state] < 10) and ([RegenwarscheinlickeitProTag:state] >= 40))
(set Telegram msg Gewächshaus Bewasserung wird gestartet;
set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60};
set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state]*60)}; sleep {([Dauer_Gewaechshaus:state]*60)};
set $SELF cmd_3;
)
DOELSEIF
([05:50] and [Beregnungsautomatik:state] eq "An" and ([RegenMengeGestern:state]+[RegenMengeHeute:state] > 10) and ([RegenwarscheinlickeitProTag:state] < 40))
(set Telegram msg Außen Bewasserung wird gestartet;
set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]+[Dauer_FeWo_Einfahrt:state])*60};
set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state]*60)}; sleep {([Dauer_Gewaechshaus:state])*60};
set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60}; sleep {([Dauer_Hochbeet:state])*60};
set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60}; sleep {([Dauer_Gemuese:state])*60};
set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60}; sleep {([Dauer_FeWo_Einfahrt:state])*60};
set $SELF cmd_3;
)
DOELSE
(
set Sonoff_Hunter_Ventil1 OFF;
set Sonoff_Hunter_Ventil2 OFF;
set Sonoff_Hunter_Ventil3 OFF;
set Sonoff_Hunter_Ventil4 OFF;
set Garten_Pumpe off;
)


Das List dazu:
Internals:
   DEF        ([05:50] and [Beregnungsautomatik:state] eq "An" and ([RegenMengeGestern:state]+[RegenMengeHeute:state] < 10) and ([RegenwarscheinlickeitProTag:state] >= 40))
(set Telegram msg Gewächshaus Bewasserung wird gestartet;
set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60};
set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state]*60)}; sleep {([Dauer_Gewaechshaus:state]*60)};
set $SELF cmd_3;
)
DOELSEIF
([05:50] and [Beregnungsautomatik:state] eq "An" and ([RegenMengeGestern:state]+[RegenMengeHeute:state] > 10) and ([RegenwarscheinlickeitProTag:state] < 40))
(set Telegram msg Außen Bewasserung wird gestartet;
set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]+[Dauer_FeWo_Einfahrt:state])*60};
set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state]*60)}; sleep {([Dauer_Gewaechshaus:state])*60};
set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60}; sleep {([Dauer_Hochbeet:state])*60};
set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60}; sleep {([Dauer_Gemuese:state])*60};
set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60}; sleep {([Dauer_FeWo_Einfahrt:state])*60};
set $SELF cmd_3;
)
DOELSE
(
set Sonoff_Hunter_Ventil1 OFF;
set Sonoff_Hunter_Ventil2 OFF;
set Sonoff_Hunter_Ventil3 OFF;
set Sonoff_Hunter_Ventil4 OFF;
set Garten_Pumpe off;
)
   FUUID      5d0ba348-f33f-ae29-f731-9dffd25b330ba731
   MODEL      FHEM
   NAME       do_Bewaesserung
   NOTIFYDEV  RegenMengeHeute,RegenMengeGestern,global,RegenwarscheinlickeitProTag,Beregnungsautomatik
   NR         103
   NTFY_ORDER 50-do_Bewaesserung
   STATE      cmd_3
   TYPE       DOIF
   VERSION    21224 2020-02-18 18:45:49
   READINGS:
     2020-04-21 01:00:00   Device          RegenwarscheinlickeitProTag
     2020-04-21 06:25:28   cmd             3
     2020-04-21 06:25:28   cmd_event       set_cmd_3
     2020-04-21 06:25:28   cmd_nr          3
     2020-04-21 01:00:00   e_RegenMengeGestern_state 0
     2020-04-21 01:00:00   e_RegenMengeHeute_state 0
     2020-04-21 01:00:00   e_RegenwarscheinlickeitProTag_state 0
     2020-04-19 19:21:14   mode            enabled
     2020-04-21 06:25:28   state           cmd_3
     2020-04-21 05:50:00   timer_01_c01    22.04.2020 05:50:00
     2020-04-21 05:50:00   timer_02_c02    22.04.2020 05:50:00
   Regex:
     accu:
     cond:
       Beregnungsautomatik:
         0:
           state      ^Beregnungsautomatik$:^state:
         1:
           state      ^Beregnungsautomatik$:^state:
       RegenMengeGestern:
         0:
           state      ^RegenMengeGestern$:^state:
         1:
           state      ^RegenMengeGestern$:^state:
       RegenMengeHeute:
         0:
           state      ^RegenMengeHeute$:^state:
         1:
           state      ^RegenMengeHeute$:^state:
       RegenwarscheinlickeitProTag:
         0:
           state      ^RegenwarscheinlickeitProTag$:^state:
         1:
           state      ^RegenwarscheinlickeitProTag$:^state:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) and ::ReadingValDoIf($hash,'Beregnungsautomatik','state') eq "An" and (::ReadingValDoIf($hash,'RegenMengeGestern','state')+::ReadingValDoIf($hash,'RegenMengeHeute','state') < 10) and (::ReadingValDoIf($hash,'RegenwarscheinlickeitProTag','state') >= 40)
     1          ::DOIF_time_once($hash,1,$wday) and ::ReadingValDoIf($hash,'Beregnungsautomatik','state') eq "An" and (::ReadingValDoIf($hash,'RegenMengeGestern','state')+::ReadingValDoIf($hash,'RegenMengeHeute','state') > 10) and (::ReadingValDoIf($hash,'RegenwarscheinlickeitProTag','state') < 40)
   days:
   do:
     0:
       0          set Telegram msg Gewächshaus Bewasserung wird gestartet;  set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60}; set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state]*60)}; sleep {([Dauer_Gewaechshaus:state]*60)}; set do_Bewaesserung cmd_3;
     1:
       0          set Telegram msg Außen Bewasserung wird gestartet; set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]+[Dauer_FeWo_Einfahrt:state])*60}; set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state]*60)}; sleep {([Dauer_Gewaechshaus:state])*60}; set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60}; sleep {([Dauer_Hochbeet:state])*60}; set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60}; sleep {([Dauer_Gemuese:state])*60}; set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60}; sleep {([Dauer_FeWo_Einfahrt:state])*60}; set do_Bewaesserung cmd_3;
     2:
       0           set Sonoff_Hunter_Ventil1 OFF; set Sonoff_Hunter_Ventil2 OFF; set Sonoff_Hunter_Ventil3 OFF; set Sonoff_Hunter_Ventil4 OFF; set Garten_Pumpe off;
   helper:
     DEVFILTER  ^global$|^Beregnungsautomatik$|^RegenMengeGestern$|^RegenMengeHeute$|^RegenwarscheinlickeitProTag$
     NOTIFYDEV  global|Beregnungsautomatik|RegenMengeGestern|RegenMengeHeute|RegenwarscheinlickeitProTag
     event      timer_2
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent timer_2
     timerevents
     timereventsState
     triggerDev
     DOIF_eventa:
       cmd_nr: 3
       cmd: 3
       cmd_event: set_cmd_3
       cmd_3
     DOIF_eventas:
       cmd_nr: 3
       cmd: 3
       cmd_event: set_cmd_3
       state: cmd_3
   internals:
   interval:
   intervalfunc:
   localtime:
     0          1587527400
     1          1587527400
   readings:
     all         Beregnungsautomatik:state RegenMengeGestern:state RegenMengeHeute:state RegenwarscheinlickeitProTag:state
   realtime:
     0          05:50:00
     1          05:50:00
   time:
     0          05:50:00
     1          05:50:00
   timeCond:
     0          0
     1          1
   timer:
     0          0
     1          0
   timers:
     0           0
     1           1
   trigger:
   triggertime:
     1587527400:
       localtime  1587527400
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   cmdIcon    cmd_1:audio_play
   do         always
   group      Bewässerung
   icon       control_arrow_turn_right
   room       Garten
   verbose    5
   webCmd     cmd_1
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: rabehd am 21 April 2020, 18:20:28
ZitatManuell angestoßen, läuft es ganz normal durch.
Vermutlich: "Wenn ich die Zweige separat anstoße, dann laufen sie durch"

Also treffen Deine Bedingungen wohl nicht ein. Hast Du die einzelnen Bedingungen zur Ausführungszeit geprüft?
Wenn ich das List nehme, dann trifft Zweig 1 nicht, weil RegenwarscheinlickeitProTag kleiner als 40 ist. Und bei Zweig 2 ist diesumme der Regenmengen 0+0=0 also kleiner als 10.

Das DOIF macht was Du ihm vorgegeben hast.
Sleep im DOIF finde ich nicht schön.
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: Damian am 21 April 2020, 18:27:08
Was zum Nachdenken:

([RegenMengeGestern:state]+[RegenMengeHeute:state] < 10)

siehe: http://www.dcs.ed.ac.uk/home/perl5/pod/perlop.html
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: Starsurfer am 21 April 2020, 18:50:09
Zitat von: rabehd am 21 April 2020, 18:20:28
Vermutlich: "Wenn ich die Zweige separat anstoße, dann laufen sie durch"
Ja das ist richtig.

ZitatAlso treffen Deine Bedingungen wohl nicht ein. Hast Du die einzelnen Bedingungen zur Ausführungszeit geprüft?
Ich hatte das letztes Jahr schon am laufen, wo es funktionierte. Ich bin mir nicht sicher ob ich seitdem etwas geändert habe. Es war ja jetzt den ganzen Winter über dealtiviert.


ZitatWenn ich das List nehme, dann trifft Zweig 1 nicht, weil RegenwarscheinlickeitProTag kleiner als 40 ist. Und bei Zweig 2 ist diesumme der Regenmengen 0+0=0 also kleiner als 10.
Ok mal wieder > und < vertauscht

Zitat
Sleep im DOIF finde ich nicht schön.

Wie würdest du das lösen?
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: Starsurfer am 21 April 2020, 19:20:35
Zitat von: Damian am 21 April 2020, 18:27:08
Was zum Nachdenken:

([RegenMengeGestern:state]+[RegenMengeHeute:state] < 10)

siehe: http://www.dcs.ed.ac.uk/home/perl5/pod/perlop.html

Ok sollte dann wohl so sein:
(([RegenMengeGestern:state]+[RegenMengeHeute:state]) < 10)
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: rabehd am 21 April 2020, 21:01:39
Zitat von: Starsurfer am 21 April 2020, 18:50:09

Wie würdest du das lösen?

Da ich mir nicht sicher bin, was Du eigentlich bezweckst (Anwendungsfall) halte ich mich da lieber zurück.
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: Starsurfer am 21 April 2020, 21:51:52
Die Bewässerungszeit der einzelnen Ventile sind einstellbar und ändern sich ab und zu. Die Ventile können nur einzeln angesprochen werden. Deshalb muss zwischen den einzelnen Set Befehlen eine Pause sein, die halt so lange sein muss, wie der einzelne Kreis an ist.
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: Damian am 21 April 2020, 22:55:18
Zitat von: Starsurfer am 21 April 2020, 21:51:52
Die Bewässerungszeit der einzelnen Ventile sind einstellbar und ändern sich ab und zu. Die Ventile können nur einzeln angesprochen werden. Deshalb muss zwischen den einzelnen Set Befehlen eine Pause sein, die halt so lange sein muss, wie der einzelne Kreis an ist.

Das machst du eleganter mit wait-Attribut.

Dort kannst du angeben:

attr wait [Dauer_Gewaechshaus:state]*60:...
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: baerm am 26 April 2020, 21:11:45
Hallo Starsurfer,
hast Du das Problem nun lösen können?
Ich habe ein ähnliches Problem, wobei mein Doif in der Vergangenheit funktioniert hat und inzwischen aber nicht mehr auslöst und ich weiß nicht warum.
Bei mir geht es auch um das Bewässern. Die Startzeit setze ich über einen Dummy.

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


Die erste Bedingung ist definitiv erfüllt gewesen (Uhrzeit und [Bewaesserung1] eq "an") aber KNX_0503002 wurde nicht auf on gesetzt. Ich habe dann KNX_0503002 manuell eingeschaltet (über ein zweites DOIF wird der Status KNX_0503011 auch auf on gesetzt). Damit werden die weiteren Bedingungen nach der Reihe erfüllt und laufen durch. Also nur die erste Bedingung hat ein Problem.
Ich bin für jeden Hinweis dankbar.

Mich würde auch interessieren wo Du die RegenMengeGestern und RegenwarscheinlickeitProTag nimmst. Proplanta?
lg,
Matthias
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: Starsurfer am 26 April 2020, 22:21:43
Moin,
ich habe meine Bewässerung gerade hier gepostet:
https://forum.fhem.de/index.php/topic,99324.msg1047296.html#msg1047296 (https://forum.fhem.de/index.php/topic,99324.msg1047296.html#msg1047296)
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: baerm am 26 April 2020, 22:35:35
Vielen Dank. Sehe ich mir genauer an.
lg,
Matthias
Titel: Antw:DOIF Gartenbewässerung macht nichts
Beitrag von: Otto123 am 26 April 2020, 22:47:33
Zitat von: baerm am 26 April 2020, 21:11:45
Ich habe ein ähnliches Problem, wobei mein Doif in der Vergangenheit funktioniert hat und inzwischen aber nicht mehr auslöst und ich weiß nicht warum.
Hallo Matthias,

ich glaube das nicht, das es je funktioniert hat. Vielleicht irgendwas gemacht, aber es enthält einige Syntax Fehler. Habe ich im anderen Thread (https://forum.fhem.de/index.php/topic,110559.msg1047422.html#msg1047422) geschrieben.

Gruß Otto