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
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.
Was zum Nachdenken:
([RegenMengeGestern:state]+[RegenMengeHeute:state] < 10)
siehe: http://www.dcs.ed.ac.uk/home/perl5/pod/perlop.html
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?
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)
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.
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.
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:...
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
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)
Vielen Dank. Sehe ich mir genauer an.
lg,
Matthias
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