FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Starsurfer am 04 April 2019, 19:59:46

Titel: Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 04 April 2019, 19:59:46
Moin Leute,
ich bin gerade dabei meine Steuerung für die Gartenbewässerung fertig zu stellen.
Dazu verwende ich einen Shelly1 (MQTT) um die Pumpe anzuschalten und einen Sonoff 4CH Pro (Tasmota MQTT) um 4 Hunter Magnetventile anzusteuern.
Beide unterstützen meines Wissens nach kein on-for-timer, deshalb benutze ich sleep im DOIF.

Das DOIF welches ich bis jetzt benutzt habe und welches funktioniert:


([05:50] and [Beregnungsautomatik:state] eq "An") (
set Garten_Pumpe on;
set Sonoff_Hunter_Ventil1 ON; sleep 600; set Sonoff_Hunter_Ventil1 OFF;
IF ([RegenwarscheinlickeitProTag:STATE] > 50) {
set Sonoff_Hunter_Ventil2 ON; sleep 1200; set Sonoff_Hunter_Ventil2 OFF;
set Sonoff_Hunter_Ventil3 ON; sleep 600; set Sonoff_Hunter_Ventil3 OFF;
set Sonoff_Hunter_Ventil4 ON; sleep 600; set Sonoff_Hunter_Ventil4 OFF;
}
) DOELSEIF ([06:50]) (
set Garten_Pumpe OFF;
set Sonoff_Hunter_Ventil1 OFF;
set Sonoff_Hunter_Ventil2 OFF;
set Sonoff_Hunter_Ventil3 OFF;
set Sonoff_Hunter_Ventil4 OFF;)


Jetzt habe ich mir für die einzelnen Kreise einen Dummy angelegt, an dem ich die Dauer der Bewässerung in Minuten einstellen will und habe das DOIF entsprechend umgebaut:
([05:50] and [Beregnungsautomatik:state] eq "An") (
set Garten_Pumpe on;
set Sonoff_Hunter_Ventil1 ON; sleep ([Dauer_Gewaechshaus:state]*60); set Sonoff_Hunter_Ventil1 OFF;
set Sonoff_Hunter_Ventil2 ON; sleep ([Dauer_Hochbeet:state]*60); set Sonoff_Hunter_Ventil2 OFF;
set Sonoff_Hunter_Ventil3 ON; sleep ([Dauer_Gemuese:state]*60); set Sonoff_Hunter_Ventil3 OFF;
set Sonoff_Hunter_Ventil4 ON; sleep ([Dauer_FeWo_Einfahrt:state]*60); set Sonoff_Hunter_Ventil4 OFF;
) DOELSEIF ([06:50]) (
set Sonoff_Garten_Pumpe OFF;
set Sonoff_Hunter_Ventil1 OFF;
set Sonoff_Hunter_Ventil2 OFF;
set Sonoff_Hunter_Ventil3 OFF;
set Sonoff_Hunter_Ventil4 OFF;)


Ich bekomme aber die Meldung: Cannot interpret (5*60) as seconds

Kann mir vielleicht jemand auf die Sprünge helfen, wie ich das hinbekomme?

Danke schon mal im voraus.
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Ellert am 04 April 2019, 20:46:06
versuch mal geschweifte Klammern https://commandref.fhem.de/commandref_DE.html#DOIF_Berechnungen_im_Ausfuehrungsteil
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 05 April 2019, 09:02:08
Moin,
Bonn mir gerade nicht sicher, ob ich das nicht schon getestet habe. Aber ich werde das heute Abend mal testen.
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Ellert am 05 April 2019, 12:10:16
Zitat von: Starsurfer am 05 April 2019, 09:02:08
Moin,
Bonn mir gerade nicht sicher, ob ich das nicht schon getestet habe. Aber ich werde das heute Abend mal testen.
Sonst kannst Du auch die Variante 3 der Befehlsausführung nutzen, s. https://commandref.fhem.de/commandref_DE.html#command
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 05 April 2019, 22:29:50
Moin,
kurze Rückmeldung, so funktioniert es jetzt anscheinend:
([05:50] and [Beregnungsautomatik:state] eq "An") (
set Garten_Pumpe on;
set Sonoff_Hunter_Ventil1 ON; sleep {([Dauer_Gewaechshaus:state])*60}; set Sonoff_Hunter_Ventil1 OFF;
set Sonoff_Hunter_Ventil2 ON; sleep {([Dauer_Hochbeet:state])*60}; set Sonoff_Hunter_Ventil2 OFF;
set Sonoff_Hunter_Ventil3 ON; sleep {([Dauer_Gemuese:state])*60}; set Sonoff_Hunter_Ventil3 OFF;
set Sonoff_Hunter_Ventil4 ON; sleep {([Dauer_FeWo_Einfahrt:state])*60}; set Sonoff_Hunter_Ventil4 OFF;
set Garten_Pumpe off;
)DOELSEIF (
set Sonoff_Hunter_Ventil1 OFF;
set Sonoff_Hunter_Ventil2 OFF;
set Sonoff_Hunter_Ventil3 OFF;
set Sonoff_Hunter_Ventil4 OFF;
set Sonoff_Garten_Pumpe OFF;
)


Jetzt muss ich nur noch ein if dazwischen bekommen um die Aussenbeete nur bei schonen Wetter und kein Regen zu bewässern.

Danke erstmal
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 06 April 2019, 10:04:47
Moin,
so ich habe mal wieder ein bißchen gebastelt und so scheint es jetzt zu funktionieren:
([05:50] and [Beregnungsautomatik:state] eq "An") (
set Garten_Pumpe on;
set Sonoff_Hunter_Ventil1 ON; sleep {([Dauer_Gewaechshaus:state])*60}; set Sonoff_Hunter_Ventil1 OFF;
set Garten_Pumpe off;
IF ([RegenwarscheinlickeitProTag:state] < 50) (
set Garten_Pumpe on,
set Sonoff_Hunter_Ventil2 ON, sleep {([Dauer_Hochbeet:state])*60}, set Sonoff_Hunter_Ventil2 OFF,
set Sonoff_Hunter_Ventil3 ON, sleep {([Dauer_Gemuese:state])*60}, set Sonoff_Hunter_Ventil3 OFF,
set Sonoff_Hunter_Ventil4 ON, sleep {([Dauer_FeWo_Einfahrt:state])*60}, set Sonoff_Hunter_Ventil4 OFF,
set Garten_Pumpe off)
)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;
)
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Damian am 06 April 2019, 10:50:10
Die Tücke ist, dass Komma hinter sleep blockiert. Nur bei IF funktioniert es mit Komma korrekt, dort wird es erkannt und intern in ein Semikolon gewandelt.
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 06 April 2019, 11:37:13
Aber so wie ich es jetzt gemacht habe, ist es korrekt?
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Damian am 06 April 2019, 11:41:14
Zitat von: Starsurfer am 06 April 2019, 11:37:13
Aber so wie ich es jetzt gemacht habe, ist es korrekt?

Im Prinzip ja.

Verzögerungen ohne IF kann man elegant auch mit wait definieren.

Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 06 April 2019, 12:15:18
Wie bekomme ich den die Variablen sleeps ins wait? Das sind ja einstellbare Dummys.
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Damian am 06 April 2019, 12:32:45
Zitat von: Starsurfer am 06 April 2019, 12:15:18
Wie bekomme ich den die Variablen sleeps ins wait? Das sind ja einstellbare Dummys.
so, wie es in der Commanref zu wait steht, schon gelesen? ;) https://fhem.de/commandref_DE.html#DOIF_wait
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 06 April 2019, 12:39:12
Hm habe ich wohl irgendwie überlesen  :-[
Also müsste ich mir ein notify basteln, welches sich die Zeiten der einzelnen Kreise holt und diese zu einem wait zusammen setzt.
Mal sehen ob ich das hinbekomme...

Danke
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Damian am 06 April 2019, 12:47:48
Zitat von: Starsurfer am 06 April 2019, 12:39:12
Hm habe ich wohl irgendwie überlesen  :-[
Also müsste ich mir ein notify basteln, welches sich die Zeiten der einzelnen Kreise holt und diese zu einem wait zusammen setzt.
Mal sehen ob ich das hinbekomme...

Danke

Du brauchst kein notify, der ist schon in DOIF eingebaut :)

Bevor wir hier noch lange diskutieren:

([05:50] and [Beregnungsautomatik:state] eq "An")
(set Garten_Pumpe on; set Sonoff_Hunter_Ventil1 ON)
(set Sonoff_Hunter_Ventil1 OFF;
set Garten_Pumpe off;
IF ([RegenwarscheinlickeitProTag:state] < 50) (
set Garten_Pumpe on,
set Sonoff_Hunter_Ventil2 ON, sleep {([Dauer_Hochbeet:state])*60}, set Sonoff_Hunter_Ventil2 OFF,
set Sonoff_Hunter_Ventil3 ON, sleep {([Dauer_Gemuese:state])*60}, set Sonoff_Hunter_Ventil3 OFF,
set Sonoff_Hunter_Ventil4 ON, sleep {([Dauer_FeWo_Einfahrt:state])*60}, set Sonoff_Hunter_Ventil4 OFF,
set Garten_Pumpe off)
)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;
)

attr wait 0,[Dauer_Gewaechshaus:state]*60


Es wird immer der aktuelle Wert aus [Dauer_Gewaechshaus:state] genommen.
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Per am 08 April 2019, 13:21:58
Thema Bewässerung und tausend Bedingungen? Wurde schon mal (https://forum.fhem.de/index.php/topic,70043.msg633894.html#msg633894) abgearbeitet ;)
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 09 Mai 2019, 16:40:29
Ich brauche doch noch einmal Hilfe.
Und zwar habe ich mein DOIF jetzt auf on-for-timer umgebaut, aber irgendwie scheint die Syntax der Berechnung falsch zu sein:

Zitat
set Garten_Pumpe on-for-timer {1+1+1+1*60}; set Sonoff_Hunter_Ventil1 on-for-timer 60; set Sonoff_Hunter_Ventil2 on-for-timer 60; set Sonoff_Hunter_Ventil3 on-for-timer 60; set Sonoff_Hunter_Ventil4 on-for-timer 60; : on-for-timer requires a number as argument

([05:50] && [Beregnungsautomatik:state] eq "An" && [RegenwarscheinlickeitProTag:state] > 50) (
set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60};
set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state])*60};
)
DOELSEIF([05:50] && [Beregnungsautomatik:state] eq "An" && [RegenwarscheinlickeitProTag:state] < 51) (
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};
set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60};
set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60};
set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60};
)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;
)


Und ein List:
Internals:
   DEF        ([05:50] && [Beregnungsautomatik:state] eq "An" && [RegenwarscheinlickeitProTag:state] > 50) (
set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60};
set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state])*60};
)
DOELSEIF([05:50] && [Beregnungsautomatik:state] eq "An" && [RegenwarscheinlickeitProTag:state] < 51) (
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};
set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60};
set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60};
set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60};
)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      5ca51125-f33f-f054-804b-7798348fef637871
   MODEL      FHEM
   NAME       do_Bewaesserung
   NR         350
   NTFY_ORDER 50-do_Bewaesserung
   STATE      cmd_3
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-05-09 01:00:00   Device          RegenwarscheinlickeitProTag
     2019-05-08 20:48:41   cmd             3
     2019-05-08 20:48:41   cmd_event       Beregnungsautomatik
     2019-05-08 20:48:41   cmd_nr          3
     2019-05-08 20:48:40   e_Beregnungsautomatik_state Aus
     2019-05-09 01:00:00   e_RegenwarscheinlickeitProTag_state 40
     2019-05-08 18:59:06   mode            enabled
     2019-05-08 20:48:41   state           cmd_3
     2019-05-09 05:50:00   timer_01_c01    10.05.2019 05:50:00
     2019-05-09 05:50:00   timer_02_c02    10.05.2019 05:50:00
   Regex:
     accu:
   attr:
     cmdState:
     wait:
       0:
         wait 0
         1; 0
         1
         [Dauer_Gewaechshaus:state]*60
         [Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]*60
         [Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]*60
         [Dauer_Gewaechshaus:state]*60+[Dauer_Hochbeet:state]*60+[Dauer_Gemuese:state]*60+[Dauer_FeWo_Einfahrt:state]*60
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) && ::ReadingValDoIf($hash,'Beregnungsautomatik','state') eq "An" && ::ReadingValDoIf($hash,'RegenwarscheinlickeitProTag','state') > 50
     1          ::DOIF_time_once($hash,1,$wday) && ::ReadingValDoIf($hash,'Beregnungsautomatik','state') eq "An" && ::ReadingValDoIf($hash,'RegenwarscheinlickeitProTag','state') < 51
   days:
   devices:
     0           Beregnungsautomatik RegenwarscheinlickeitProTag
     1           Beregnungsautomatik RegenwarscheinlickeitProTag
     all         Beregnungsautomatik RegenwarscheinlickeitProTag
   do:
     0:
       0           set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60};  set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state])*60};
     1:
       0           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}; set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60}; set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60}; set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60};
     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:
     event      timer_2
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent timer_2
     triggerDev
     DOIF_eventas:
       cmd_nr: 3
       cmd: 3
       cmd_event: Beregnungsautomatik
       state: cmd_3
     timerevents:
       timer_2
     timereventsState:
       state: 40
     triggerEvents:
       timer_2
     triggerEventsState:
       state: 40
   internals:
   interval:
   intervalfunc:
   itimer:
   localtime:
     0          1557460200
     1          1557460200
   readings:
     0           Beregnungsautomatik:state RegenwarscheinlickeitProTag:state
     1           Beregnungsautomatik:state RegenwarscheinlickeitProTag:state
     all         Beregnungsautomatik: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:
     1557460200:
       localtime  1557460200
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   cmdIcon    cmd_1:audio_play
   group      Bewässerung
   icon       control_arrow_turn_right
   room       Garten
   verbose    5
   wait       wait 0,1; 0,1,[Dauer_Gewaechshaus:state]*60,[Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]*60,[Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]*60,[Dauer_Gewaechshaus:state]*60+[Dauer_Hochbeet:state]*60+[Dauer_Gemuese:state]*60+[Dauer_FeWo_Einfahrt:state]*60
   webCmd     cmd_1
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Damian am 09 Mai 2019, 16:48:02
set Garten_Pumpe on-for-timer {[...

und

set Sonoff_Hunter_Ventil1 on-for-timer {([...

fällt dir was auf?
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 09 Mai 2019, 17:36:01
Hm habe gestern wohl zuviel probiert  :o
Ich werde das nachher mal testen
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 09 Mai 2019, 18:48:10
Ok so scheint es jetzt zu funktionieren:


([05:50] && [Beregnungsautomatik:state] eq "An" && [RegenwarscheinlickeitProTag:state] > 50) (
set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60};
set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state])*60};
)
DOELSEIF([05:50] && [Beregnungsautomatik:state] eq "An" && [RegenwarscheinlickeitProTag:state] < 51) (
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};
set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60};
set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60};
set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60};
)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;
)


Ich habe aber noch ein Problem mit dem Wait, das funktioniert noch nicht richtig. Beim cmd_2 Event schaltet er die Pumpe an und dann laufen die Ventile 1-3 einmal schnell durch nur Ventil 4 bleibt die angegebene Zeit an. Der Sonoff 4CH PRo kann nur einen Kanal gleichzeitig, deshalb sollen die nacheinander die gewünschte Zeit angehen.
cmd_1 funktioniert so wie es soll.
0,1:0,1,[Dauer_Gewaechshaus:state]*60,[Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]*60,[Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]*60,[Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]+[Dauer_FeWo_Einfahrt:state]*60

List:
Internals:
   DEF        ([05:50] && [Beregnungsautomatik:state] eq "An" && [RegenwarscheinlickeitProTag:state] > 50) (
set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60};
set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state])*60};
)
DOELSEIF([05:50] && [Beregnungsautomatik:state] eq "An" && [RegenwarscheinlickeitProTag:state] < 51) (
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};
set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60};
set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60};
set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60};
)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      5ca51125-f33f-f054-804b-7798348fef637871
   MODEL      FHEM
   NAME       do_Bewaesserung
   NR         350
   NTFY_ORDER 50-do_Bewaesserung
   STATE      cmd_3
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-05-09 18:38:55   cmd             3
     2019-05-09 18:38:55   cmd_event       do_Bewaesserung
     2019-05-09 18:38:55   cmd_nr          3
     2019-05-09 18:32:18   mode            enabled
     2019-05-09 18:38:55   state           cmd_3
     2019-05-09 18:32:18   timer_01_c01    10.05.2019 05:50:00
     2019-05-09 18:32:18   timer_02_c02    10.05.2019 05:50:00
   Regex:
     accu:
   attr:
     cmdState:
     wait:
       0:
         0
         1
       1:
         0
         1
         [Dauer_Gewaechshaus:state]*60
         [Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]*60
         [Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]*60
         [Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]+[Dauer_FeWo_Einfahrt:state]*60
     waitdel:
   condition:
     0          ::DOIF_time_once($hash,0,$wday) && ::ReadingValDoIf($hash,'Beregnungsautomatik','state') eq "An" && ::ReadingValDoIf($hash,'RegenwarscheinlickeitProTag','state') > 50
     1          ::DOIF_time_once($hash,1,$wday) && ::ReadingValDoIf($hash,'Beregnungsautomatik','state') eq "An" && ::ReadingValDoIf($hash,'RegenwarscheinlickeitProTag','state') < 51
   days:
   devices:
     0           Beregnungsautomatik RegenwarscheinlickeitProTag
     1           Beregnungsautomatik RegenwarscheinlickeitProTag
     all         Beregnungsautomatik RegenwarscheinlickeitProTag
   do:
     0:
       0           set Garten_Pumpe on-for-timer {([Dauer_Gewaechshaus:state])*60};  set Sonoff_Hunter_Ventil1 on-for-timer {([Dauer_Gewaechshaus:state])*60};
     1:
       0           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}; set Sonoff_Hunter_Ventil2 on-for-timer {([Dauer_Hochbeet:state])*60}; set Sonoff_Hunter_Ventil3 on-for-timer {([Dauer_Gemuese:state])*60}; set Sonoff_Hunter_Ventil4 on-for-timer {([Dauer_FeWo_Einfahrt:state])*60};
     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:
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   
     timerevent
     timerevents
     timereventsState
     triggerDev
     DOIF_eventas:
       cmd_nr: 3
       cmd: 3
       cmd_event: do_Bewaesserung
       state: cmd_3
   internals:
   intervalfunc:
   itimer:
   localtime:
     0          1557460200
     1          1557460200
   readings:
     0           Beregnungsautomatik:state RegenwarscheinlickeitProTag:state
     1           Beregnungsautomatik:state RegenwarscheinlickeitProTag:state
     all         Beregnungsautomatik: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
   triggertime:
     1557460200:
       localtime  1557460200
       hash:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   cmdIcon    cmd_1:audio_play
   group      Bewässerung
   icon       control_arrow_turn_right
   room       Garten
   verbose    5
   wait       0,1:0,1,[Dauer_Gewaechshaus:state]*60,[Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]*60,[Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]*60,[Dauer_Gewaechshaus:state]+[Dauer_Hochbeet:state]+[Dauer_Gemuese:state]+[Dauer_FeWo_Einfahrt:state]*60
   webCmd     cmd_1

Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: smile7779 am 24 April 2020, 06:57:30
Hallo Starsurfer,

ich bin auf diesen sehr interessanten Beitrag gestoßen. Ich bin bei weitem nicht so ein Profi um folgende Aufgabe zu lösen. Vielleicht kannst Du mir ein paar Tipps geben.
Ich habe ein Sonoff 4CH pro zur Steuerung der 4 Hunterventile. Außerdem habe ich ein Sonoff switch um einfach die Stromversorgung sicherzustellen, was in Deinem Fall die Gartenpumpe ist. (soll bei mir später auch noch integriert werden) Der Wunsch ist es ein DOIF zu kreieren und in einer bestimmten Reihenfolge zu einer bestimmten Zeit, besser noch in Abhängigkeit von Wetterdaten (eben bei Regen nicht) die 4 Hunter Ventile 2 gleichzeitig für 10 Minuten, danach das 3. für 10 Minuten und dann das 4. am Schluss für 10 Minuten anzusteuern.
Vielleicht kannst Du mir Deine Definitionszeile senden, damit ich diese auf meine Gegebenheiten anpassen kann.

Vielen Dank im Voraus ;-)
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 26 April 2020, 15:35:45
Moin,
beim Sonoff 4ch pro kann bei 24V nur ein Kanal gleichzeitig an sein, 2 Kreise zur gleichen Zeit geht nicht.

Ich versuche das mal raus zu suchen.
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 26 April 2020, 15:49:11
So hier mal ein paar Details, aber gleich vorweg, es gibt da bestimmt noch Verbesserungsbedarf und teile davon sind hier im Forum zusammen gesammelt.
Der Dummy Beregnungsautomatik:
Hier wird die Automatik an und aus geschaltet.

defmod Beregnungsautomatik dummy
attr Beregnungsautomatik DbLogExclude .*
attr Beregnungsautomatik devStateIcon An:rc_GREEN:Aus Aus:rc_RED:An
attr Beregnungsautomatik eventMap An:An Aus:Aus
attr Beregnungsautomatik group Bewässerung
attr Beregnungsautomatik icon humidity
attr Beregnungsautomatik room Garten
attr Beregnungsautomatik sortby 1
attr Beregnungsautomatik userReadings Automatik_Aktiv,Aktiver_Regner
attr Beregnungsautomatik webCmd An:Aus


Regenmenge Gestern, Daten von Proplanta:
defmod RegenMengeGestern dummy
attr RegenMengeGestern DbLogExclude .*
attr RegenMengeGestern group Bewässerung
attr RegenMengeGestern room Garten
attr RegenMengeGestern stateFormat state mm


Regenmenge gestern:
defmod RegenMengeHeute dummy
attr RegenMengeHeute DbLogExclude .*
attr RegenMengeHeute group Bewässerung
attr RegenMengeHeute room Garten
attr RegenMengeHeute stateFormat state mm


Regenwarscheinlichkeit:
defmod RegenwarscheinlickeitProTag dummy
attr RegenwarscheinlickeitProTag DbLogExclude .*
attr RegenwarscheinlickeitProTag DbLogInclude state
attr RegenwarscheinlickeitProTag group Bewässerung
attr RegenwarscheinlickeitProTag room Garten
attr RegenwarscheinlickeitProTag stateFormat state %


at um die Regendummys zu füllen:
defmod Regendummy at *01:00:00 {myWeatherData()}
attr Regendummy DbLogExclude .*
attr Regendummy group Bewässerung
attr Regendummy room Garten


99_myUtils.pm:

#Wetterdaten generieren und auslesen
#myWeatherData();

sub myWeatherData(){
  my $faktor;

  my $RegenMengeGestern = (ReadingsVal("RegenMengeHeute", "state", 0));
  fhem("set RegenMengeGestern $RegenMengeGestern");

  my $RegenMengeHeute = (ReadingsVal("WetterProplanta","fc0_rain",0));
  fhem("set RegenMengeHeute $RegenMengeHeute");

  my $w1 = ReadingsVal("WetterProplanta","fc0_weather00",0);
  my $w2 = ReadingsVal("WetterProplanta","fc0_weather03",0);
  my $w3 = ReadingsVal("WetterProplanta","fc0_weather06",0);
  my $w4 = ReadingsVal("WetterProplanta","fc0_weather09",0);
  my $w5 = ReadingsVal("WetterProplanta","fc0_weather12",0);
  my $w6 = ReadingsVal("WetterProplanta","fc0_weather15",0);
  my $w7 = ReadingsVal("WetterProplanta","fc0_weather18",0);
  my $w8 = ReadingsVal("WetterProplanta","fc0_weather20",0); 
 
  $faktor += ($w1 =~ m/leichter Reg/i)? 20: 0;
  $faktor += ($w2 =~ m/leichter Reg/i)? 20: 0;
  $faktor += ($w3 =~ m/leichter Reg/i)? 20: 0;
  $faktor += ($w4 =~ m/leichter Reg/i)? 20: 0;
  $faktor += ($w5 =~ m/leichter Reg/i)? 20: 0;
  $faktor += ($w6 =~ m/leichter Reg/i)? 20: 0;
  $faktor += ($w7 =~ m/leichter Reg/i)? 20: 0;
  $faktor += ($w8 =~ m/leichter Reg/i)? 20: 0;


  my $regenwarscheinlichkeit = ($faktor > 0)? ((ReadingsVal("WetterProplanta","fc0_chOfRainDay",0)) /100) * $faktor : (ReadingsVal("WetterProplanta","fc0_chOfRainDay",0));

  fhem("set RegenwarscheinlickeitProTag $regenwarscheinlichkeit");

return $regenwarscheinlichkeit;
}


Und die Dauer der einzelnen Kreise einstellbar, hier nur ein Kreis als Beispiel:
defmod Dauer_Gewaechshaus dummy
attr Dauer_Gewaechshaus DbLogExclude .*
attr Dauer_Gewaechshaus group Bewässerungsdauer Kreise
attr Dauer_Gewaechshaus icon hourglass
attr Dauer_Gewaechshaus readingList state
attr Dauer_Gewaechshaus room Garten
attr Dauer_Gewaechshaus setList state:0,1,5,7,10,12,14,16,18,20,25,30,35,40,45,50,55,60
attr Dauer_Gewaechshaus sortby 1
attr Dauer_Gewaechshaus webCmd state


Das DOIF für die Bewässerung (Optimierungsbedürftig -> sleep -> wait)
defmod do_Bewaesserung 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;;\
)
attr do_Bewaesserung DbLogExclude .*
attr do_Bewaesserung cmdIcon cmd_1:audio_play
attr do_Bewaesserung do always
attr do_Bewaesserung group Bewässerung
attr do_Bewaesserung icon control_arrow_turn_right
attr do_Bewaesserung room Garten
attr do_Bewaesserung verbose 5
attr do_Bewaesserung webCmd cmd_1


Sollte am Ende dann ungefähr, wie auf dem Screenshot aussehen.
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: baerm am 30 April 2020, 22:43:13
Hi Starsurfer,
Deine Implementierung gefällt mir!
Ich habe mir Deine myUtil installiert und auch in Betrieb genommen. Ich würde einen Teil davon verwenden, vorallem die Proplanta Integration fehlt bei mir komplett und könnte ich leicht dazubauen.
Ich habe aber eine Frage zu: 
$faktor += ($w1 =~ m/leichter Reg/i)? 20: 0;
Wenn ich das richtig verstehe, ignorierst Du damit "Regen" und "Regenschauer" oder was macht dieser Code? Hat das einen bestimmten Grund?
lg,
Matthias
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: smile7779 am 01 Mai 2020, 09:28:50
Vielen Dank Starsurfer für die vielen Informationen. Dann werde ich mich da mal heranwagen.

Beste Grüße  :)
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 01 Mai 2020, 13:47:24
Zitat von: baerm am 30 April 2020, 22:43:13
Hi Starsurfer,
Deine Implementierung gefällt mir!
Ich habe mir Deine myUtil installiert und auch in Betrieb genommen. Ich würde einen Teil davon verwenden, vorallem die Proplanta Integration fehlt bei mir komplett und könnte ich leicht dazubauen.
Ich habe aber eine Frage zu: 
$faktor += ($w1 =~ m/leichter Reg/i)? 20: 0;
Wenn ich das richtig verstehe, ignorierst Du damit "Regen" und "Regenschauer" oder was macht dieser Code? Hat das einen bestimmten Grund?
lg,
Matthias

Der Code stammt hier irgendwo aus dem Forum, ich kann dir gar nicht sagen, ob das so richtig ist.

Hier der orignal Code: https://blog.moneybag.de/fhem-automatische-gartenbewaesserung-mit-fhem-und-gardena-laufendes-projekt-gastbeitrag/ (https://blog.moneybag.de/fhem-automatische-gartenbewaesserung-mit-fhem-und-gardena-laufendes-projekt-gastbeitrag/)
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: baerm am 01 Mai 2020, 14:39:35
Danke. Irgenwann war ich auch schon auf der Seite, habe aber den Code nie betrachtet. Laut der Beschreibung kann ich nicht ganz nachvollziehen, warum das so gemacht wurde. Ich denke ich werde das hernehmen und entsprechend umbauen.

Ich möchte eigentlich die Regenwahrscheinlichkeit und Regenmenge zur Berechnung der Bewässerungsdauer verwenden. Aktuell noch manuell gesteuert. bereits gefallene Regenmenge nehme ich von der Netatmo Seite (ist noch einzubauen). Hier mein aktueller Code:

defmod Intensitaet dummy
attr Intensitaet alias Bewässerungs Intensität
attr Intensitaet group Bewässerung
attr Intensitaet icon weather_rain_gauge
attr Intensitaet setList state:slider,0,1,100
attr Intensitaet sortby 1
attr Intensitaet stateFormat state%</br>Kreis 1: Kreis1 min</br>Kreis 2: Kreis2 min</br>Kreis 3: Kreis3 min</br>Kreis 4: Kreis4 min
attr Intensitaet userReadings Kreis1 {sprintf("%1.f",(60/100*ReadingsVal("Intensitaet","state",100)))}, Kreis2 {sprintf("%1.f",(120/100*ReadingsVal("Intensitaet","state",100)))}, Kreis3 {sprintf("%1.f",(180/100*ReadingsVal("Intensitaet","state",100)))}, Kreis4 {sprintf("%1.f",(240/100*ReadingsVal("Intensitaet","state",100)))}, Last
attr Intensitaet webCmd state


defmod di_Bewaesserung_Test DOIF ([([Startzeit_BW2])] and [Bewaesserung2] eq "an" and [Temperatur:WERT] > 10 and [RegenwahrscheinlichkeitProTag:state] < 80) (set MessageTxt Bewaesserung_Test Start ) \
DOELSEIF ([([Startzeit_BW2] + ReadingsVal("Intensitaet","Kreis1",100))] and [Bewaesserung2] eq "an" ) (set MessageTxt Bewaesserung_Test) \
DOELSEIF ([([Startzeit_BW2] + ReadingsVal("Intensitaet","Kreis2",100))] and [Bewaesserung2] eq "an" ) (set MessageTxt Bewaesserung_Test) \
DOELSEIF ([([Startzeit_BW2] + ReadingsVal("Intensitaet","Kreis3",100))] and [Bewaesserung2] eq "an" ) (set MessageTxt Bewaesserung_Test) \
DOELSEIF ([([Startzeit_BW2] + ReadingsVal("Intensitaet","Kreis4",100))] and [Bewaesserung2] eq "an" ) (set MessageTxt Bewaesserung_Test Ende )
attr di_Bewaesserung_Test cmdIcon cmd_1:audio_play
attr di_Bewaesserung_Test group Bewässerung
attr di_Bewaesserung_Test icon control_arrow_turn_right
attr di_Bewaesserung_Test room AUSSEN,KG->Maschinenraum
attr di_Bewaesserung_Test webCmd cmd_1

Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: smile7779 am 01 Mai 2020, 15:43:35
Hallo Starsurfer,
ich habe jetzt mal versucht den DOIF auf meine Geräte anzupassen, aber irgendwie sind da wohl Fehler drin. Ich kann den DOIF nicht in Fhem integrieren. Vielleicht kann Du mal ein Auge darauf werfen wo der Fehler ist. Ich muss natürlich noch etwas umbauen, weil Bewaesserung_vorn_1 und Bewaesserung_vorn_3 mit einem kurzen wait zur gleichen Zeit auf Timer laufen sollen. Vielen Dank

defmod do_Bewaesserung DOIF ([05:50] and [Beregnungsautomatik:state] eq "An" and (([RegenMengeGestern:state]+[RegenMengeHeute:state]) > 10) and ([RegenwarscheinlickeitProTag:state] >= 40)) \
(set Telegram msg Bewasserung wird gestartet;; \
set Gartenwasser on-for-timer {([Dauer_Gartenwasser_an :state])*60};;\
set Bewaesserung_vorn_1 on-for-timer {([Dauer_Bewaesserung_vorn_1:state])*60};; sleep {([Dauer_Bewaesserung_vorn_1: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 Gartenwasser on-for-timer {([Dauer_Gartenwasser_an :state]+[ Dauer_Bewaesserung_vorn_1:state]+[ Dauer_Bewaesserung_vorn_2:state]+[ Dauer_Bewaesserung_vorn_3:state])*60};;\
set Bewaesserung_vorn_1 on-for-timer {([ Dauer_Bewaesserung_vorn_1:state]*60)};; sleep {([Dauer_Bewaesserung_vorn_1:state])*60};;\
set Bewaesserung_vorn_2 on-for-timer {([ Dauer_Bewaesserung_vorn_1:state])*60};; sleep {([Dauer_Bewaesserung_vorn_1:state])*60};;\
set Bewaesserung_vorn_3 on-for-timer {([ Dauer_Bewaesserung_vorn_2:state])*60};; sleep {([Dauer_Bewaesserung_vorn_2:state])*60};;\
set Bewaesserung_vorn_4 on-for-timer {([ Dauer_Bewaesserung_vorn_3:state])*60};; sleep {([Dauer_Bewaesserung_vorn_3:state])*60};;\
set $SELF cmd_3;;\
)\
DOELSE\
(\
set Bewaesserung_vorn_1 OFF;;\
set Bewaesserung_vorn_2 OFF;;\
set Bewaesserung_vorn_3 OFF;;\
set Bewaesserung_vorn_4 OFF;;\
set Gartenwasser off;;\
)
attr do_Bewaesserung DbLogExclude .*
attr do_Bewaesserung cmdIcon cmd_1:audio_play
attr do_Bewaesserung do always
attr do_Bewaesserung group Bewässerung
attr do_Bewaesserung icon control_arrow_turn_right
attr do_Bewaesserung room Garten
attr do_Bewaesserung verbose 5
attr do_Bewaesserung webCmd cmd_1
Titel: Antw:Shelly+Sonoff+Doif -> sleep Gartenbewässerung
Beitrag von: Starsurfer am 01 Mai 2020, 16:09:37
Da sind meiner Meinung nach Leerzeichen, wo keine sein sollten.
Z.b. ([Dauer_Gartenwasser_an   :state]