Shelly+Sonoff+Doif -> sleep Gartenbewässerung

Begonnen von Starsurfer, 04 April 2019, 19:59:46

Vorheriges Thema - Nächstes Thema

Starsurfer

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.
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com


Starsurfer

Moin,
Bonn mir gerade nicht sicher, ob ich das nicht schon getestet habe. Aber ich werde das heute Abend mal testen.
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Ellert

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

Starsurfer

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
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Starsurfer

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;
)
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Starsurfer

Aber so wie ich es jetzt gemacht habe, ist es korrekt?
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Damian

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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Starsurfer

Wie bekomme ich den die Variablen sleeps ins wait? Das sind ja einstellbare Dummys.
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Starsurfer

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
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

#13
Thema Bewässerung und tausend Bedingungen? Wurde schon mal abgearbeitet ;)

Starsurfer

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
FHEM Server: Fujitsu Esprimo q920 + LaCrosseGateway + HM-MOD-RPI-PCB WLAN + ConBee
HomeMatic HM-CC-RT-DN - Sonoff Tasmota
LaCrosse TX29DTH - Innr SP120 - Osram Smart+ Plug
Arduino Mega - MQTT - Pluggit 300
https://www.diy-robot-lawn-mower.com