FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: holle75 am 03 April 2017, 17:43:09

Titel: [gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 03 April 2017, 17:43:09
Hallo, ich habe mal eine Beregnung gebastelt die in der Dauer einstellbar und in Abhängigkeit des Sonnenstandes schaltet. Da immer nur bestimmte Kreise gleichzeitig von der Pumpe bedient werden können, aktivieren sich diese zT nacheinander oder gleichzeitig. Jeder Kreis ist in die Automatik integrierbar oder auch nicht. Jeder Kreis ist einzeln an- und auszuschalten. Der Start- und Endmonat ist auswählbar. Die Beregnung spricht über Squeezebox mit mir. Kombiniert ist die Beregnung (die über eine Zisterne versorgt wird) mit einer Tiefenpumpe um den Nachschub zu sichern. Siehe https://forum.fhem.de/index.php/topic,69466.0.html (https://forum.fhem.de/index.php/topic,69466.0.html) (danke an Per)

Der Code ist meines Erachtens ausgesprochen häßlich (und laaaang .... aber funktioniert) und ich würde mich über eure Inputs freuen. Wie kann man die selbe (oder ausgeweitete Funktionalität) in schöner hinbekommen?

Schlecht gelöst ist im Moment auch noch das Verhindern des direkten Loslaufens der Automatik bei Aktivierung und nicht erst am nächsten Tag (BeregnungHystereseDOIF).

das kommt direkt aus der fhem.cfg:

######################################## BEREGNUNG ############################################

define myTwilight Twilight 42.xxxx 11.xxxx x yyyyyy
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#----------------------------------------------------------------#

define Beregnung_Zitronen dummy
attr Beregnung_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Zitronen group Beregnung
attr Beregnung_Zitronen room Beregnung
attr Beregnung_Zitronen webCmd auto:on:off
#attr Beregnung_Zitronen devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_Zitronen setList auto on off

define Beregnung_CampeggioOben dummy
attr Beregnung_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_CampeggioOben group Beregnung
attr Beregnung_CampeggioOben room Beregnung
attr Beregnung_CampeggioOben webCmd auto:on:off
#attr Beregnung_CampeggioOben devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_CampeggioOben setList auto on off

define Beregnung_CampeggioUnten dummy
attr Beregnung_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_CampeggioUnten group Beregnung
attr Beregnung_CampeggioUnten room Beregnung
attr Beregnung_CampeggioUnten webCmd auto:on:off
#attr Beregnung_CampeggioUnten devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_CampeggioUnten setList auto on off

define Beregnung_Blauregen dummy
attr Beregnung_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Blauregen group Beregnung
attr Beregnung_Blauregen room Beregnung
attr Beregnung_Blauregen webCmd auto:on:off
#attr Beregnung_Blauregen devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_Blauregen setList auto on off

define Beregnung_HinterKueche dummy
attr Beregnung_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_HinterKueche group Beregnung
attr Beregnung_HinterKueche room Beregnung
attr Beregnung_HinterKueche webCmd auto:on:off
#attr Beregnung_HinterKueche devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_HinterKueche setList auto on off

define Beregnung_Waschhaus dummy
attr Beregnung_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Waschhaus group Beregnung
attr Beregnung_Waschhaus room Beregnung
attr Beregnung_Waschhaus webCmd auto:on:off
#attr Beregnung_Waschhaus devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_Waschhaus setList auto on off

define Beregnung_Startmonat dummy
attr Beregnung_Startmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr Beregnung_Startmonat group Beregnung
attr Beregnung_Startmonat room Beregnung
attr Beregnung_Startmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr Beregnung_Startmonat sortby 5
attr Beregnung_Startmonat webCmd state

define Beregnung_Endmonat dummy
attr Beregnung_Endmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr Beregnung_Endmonat group Beregnung
attr Beregnung_Endmonat room Beregnung
attr Beregnung_Endmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr Beregnung_Endmonat sortby 6
attr Beregnung_Endmonat webCmd state

define Beregnung_Standarddauer dummy
attr Beregnung_Standarddauer group Beregnung
attr Beregnung_Standarddauer room Beregnung
attr Beregnung_Standarddauer setList state:slider,1,1,60
attr Beregnung_Standarddauer sortby 4
attr Beregnung_Standarddauer webCmd state

define Beregnung_Startelevation dummy
attr Beregnung_Startelevation group Beregnung
attr Beregnung_Startelevation room Beregnung
attr Beregnung_Startelevation setList state:slider,1,1,30
attr Beregnung_Startelevation sortby 3
attr Beregnung_Startelevation webCmd state

#-----------------------------------------------------------------------#

define Beregnung_Durchlauf_AN_AUS_AUTO dummy
attr Beregnung_Durchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Durchlauf_AN_AUS_AUTO group Beregnung
attr Beregnung_Durchlauf_AN_AUS_AUTO room Beregnung
attr Beregnung_Durchlauf_AN_AUS_AUTO sortby 2
attr Beregnung_Durchlauf_AN_AUS_AUTO webCmd auto:on:off

define BeregnungNachSonneDOIF DOIF ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat])) (set Beregnung_TRIGGER_Ablauf on)
attr BeregnungNachSonneDOIF group Beregnung
attr BeregnungNachSonneDOIF room Beregnung

define BeregnungHystereseDOIF DOIF ([Beregnung_Durchlauf_AN_AUS_AUTO] eq "on") (set Beregnung_TRIGGER_Ablauf on,set BeregnungNachSonneDOIF disable) \
DOELSEIF ([Beregnung_Durchlauf_AN_AUS_AUTO] eq "off") (set Beregnung_TRIGGER_Ablauf off,set BeregnungNachSonneDOIF disable) \
DOELSEIF ([01:00] and [Beregnung_Durchlauf_AN_AUS_AUTO] eq "auto")(set BeregnungNachSonneDOIF initialize)
attr BeregnungHystereseDOIF do always
attr BeregnungHystereseDOIF group Beregnung
attr BeregnungHystereseDOIF room Beregnung

#---------------------------------------------------------------------#

define Beregnung_TRIGGER_Ablauf dummy
attr Beregnung_TRIGGER_Ablauf group Beregnung

define Beregnung_TRIGGER_Blauregen dummy
attr Beregnung_TRIGGER_Blauregen group Beregnung

define Beregnung_TRIGGER_HinterKueche dummy
attr Beregnung_TRIGGER_HinterKueche group Beregnung

define Beregnung_TRIGGER_CampeggioOben dummy
attr Beregnung_TRIGGER_CampeggioOben group Beregnung

define Beregnung_TRIGGER_Waschhaus dummy
attr Beregnung_TRIGGER_Waschhaus group Beregnung

define Beregnung_TRIGGER_CampeggioUnten dummy
attr Beregnung_TRIGGER_CampeggioUnten group Beregnung

#-----------------------------------------------------------------------#

define BeregnungZitronenDOIF DOIF ([Beregnung_TRIGGER_Ablauf] eq "on" and [?Beregnung_Zitronen] eq "auto") (set BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on, set Beregnung_TRIGGER_Blauregen on,set Beregnung_TRIGGER_CampeggioUnten on,set SqueezeBoxPlayer.* talk Beregnung Zitronen gestartet) (set BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off) \
DOELSEIF ([Beregnung_TRIGGER_Ablauf] eq "on" and [?Beregnung_Zitronen] eq "off") (set Beregnung_TRIGGER_Blauregen on) \
DOELSEIF ([Beregnung_TRIGGER_Ablauf] eq "off") (set BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off) \
DOELSEIF ([Beregnung_Zitronen] eq "on") (set BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on,set SqueezeBoxPlayer.* talk Beregnung Zitronen gestartet) \
DOELSEIF ([Beregnung_Zitronen] eq "off") (set BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off)
attr BeregnungZitronenDOIF do always
attr BeregnungZitronenDOIF group Beregnung
attr BeregnungZitronenDOIF wait 0,[Beregnung_Standarddauer:state]*60:0:0:0:0

define BeregnungCampeggioUntenDOIF DOIF ([Beregnung_TRIGGER_CampeggioUnten] eq "on" and [?Beregnung_CampeggioUnten] eq "auto") (set BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 on,set SqueezeBoxPlayer.* talk Beregnung Campingplatz Unten gestartet) (set BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 off) \
DOELSEIF ([Beregnung_TRIGGER_CampeggioUnten] eq "on" and [?Beregnung_CampeggioUnten] eq "off") (set SqueezeBoxPlayer.* talk test) \
DOELSEIF ([Beregnung_TRIGGER_Ablauf] eq "off") (set BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 off) \
DOELSEIF ([Beregnung_CampeggioUnten] eq "on") (set BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 on,set SqueezeBoxPlayer.* talk Beregnung Campingplatz Unten gestartet) \
DOELSEIF ([Beregnung_CampeggioUnten] eq "off") (set BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 off)
attr BeregnungCampeggioUntenDOIF do always
attr BeregnungCampeggioUntenDOIF group Beregnung
attr BeregnungCampeggioUntenDOIF wait 0,[Beregnung_Standarddauer:state]*60:0:0:0:0

define BeregnungBlauregenDOIF DOIF ([Beregnung_TRIGGER_Blauregen] eq "on" and [?Beregnung_Blauregen] eq "auto") (set BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 on,set SqueezeBoxPlayer.* talk Beregnung Blauregen gestartet) (set BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 off,set Beregnung_TRIGGER_HinterKueche on) \
DOELSEIF ([Beregnung_TRIGGER_Blauregen] eq "on" and [?Beregnung_Blauregen] eq "off") (set Beregnung_TRIGGER_HinterKueche on) \
DOELSEIF ([Beregnung_TRIGGER_Ablauf] eq "off") (set BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 off) \
DOELSEIF ([Beregnung_Blauregen] eq "on") (set BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 on,set SqueezeBoxPlayer.* talk Beregnung Blauregen gestartet) \
DOELSEIF ([Beregnung_Blauregen] eq "off") (set BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 off)
attr BeregnungBlauregenDOIF do always
attr BeregnungBlauregenDOIF group Beregnung
attr BeregnungBlauregenDOIF wait 0,[Beregnung_Standarddauer:state]*60:0:0:0:0

define BeregnungHinterKuecheDOIF DOIF ([Beregnung_TRIGGER_HinterKueche] eq "on" and [?Beregnung_HinterKueche] eq "auto") (set BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 on,set SqueezeBoxPlayer.* talk Beregnung Kueche gestartet) (set BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 off,set Beregnung_TRIGGER_CampeggioOben on) \
DOELSEIF ([Beregnung_TRIGGER_HinterKueche] eq "on" and [?Beregnung_HinterKueche] eq "off") (set Beregnung_TRIGGER_CampeggioOben on) \
DOELSEIF ([Beregnung_TRIGGER_Ablauf] eq "off") (set BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 off) \
DOELSEIF ([Beregnung_HinterKueche] eq "on") (set BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 on,set SqueezeBoxPlayer.* talk Beregnung Kueche gestartet) \
DOELSEIF ([Beregnung_HinterKueche] eq "off") (set BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 off)
attr BeregnungHinterKuecheDOIF do always
attr BeregnungHinterKuecheDOIF group Beregnung
attr BeregnungHinterKuecheDOIF wait 0,[Beregnung_Standarddauer:state]*60:0:0:0:0

define BeregnungCampeggioObenDOIF DOIF ([Beregnung_TRIGGER_CampeggioOben] eq "on" and [?Beregnung_CampeggioOben] eq "auto") (set BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 on,set SqueezeBoxPlayer.* talk Beregnung Campingplatz Oben gestartet) (set BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 off,set Beregnung_TRIGGER_Waschhaus on) \
DOELSEIF ([Beregnung_TRIGGER_CampeggioOben] eq "on" and [?Beregnung_CampeggioOben] eq "off") (set Beregnung_TRIGGER_Waschhaus on) \
DOELSEIF ([Beregnung_TRIGGER_Ablauf] eq "off") (set BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 off) \
DOELSEIF ([Beregnung_CampeggioOben] eq "on") (set BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 on,set SqueezeBoxPlayer.* talk Beregnung Campingplatz Oben gestartet) \
DOELSEIF ([Beregnung_CampeggioOben] eq "off") (set BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 off)
attr BeregnungCampeggioObenDOIF do always
attr BeregnungCampeggioObenDOIF group Beregnung
attr BeregnungCampeggioObenDOIF wait 0,[Beregnung_Standarddauer:state]*60:0:0:0:0

define BeregnungWaschhausDOIF DOIF ([Beregnung_TRIGGER_Waschhaus] eq "on" and [?Beregnung_Waschhaus] eq "auto") (set BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 on,set SqueezeBoxPlayer.* talk Beregnung Waschhaus gestartet) (set BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 off,set SqueezeBoxPlayer.* talk Beregnung beendet) \
DOELSEIF ([Beregnung_TRIGGER_Waschhaus] eq "on" and [?Beregnung_Waschhaus] eq "off") (set SqueezeBoxPlayer.* talk Beregnung beendet) \
DOELSEIF ([Beregnung_TRIGGER_Ablauf] eq "off") (set BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 off) \
DOELSEIF ([Beregnung_Waschhaus] eq "on") (set BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 on,set SqueezeBoxPlayer.* talk Beregnung Waschhaus gestartet) \
DOELSEIF ([Beregnung_Waschhaus] eq "off") (set BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 off)
attr BeregnungWaschhausDOIF do always
attr BeregnungWaschhausDOIF group Beregnung
attr BeregnungWaschhausDOIF wait 0,[Beregnung_Standarddauer:state]*60:0:0:0:0



#---------------------------------------------------------------------------#

define FileLog_Beregnung FileLog ./log/Beregnung-%Y-%m.log BEREGNUNG.*:(on|off)|PozzoHauptOben_PUMPE_Pozzo:(on|off)
attr FileLog_Beregnung group Beregnung
attr FileLog_Beregnung logtype text

define SVG_FileLog_Beregnung_1 SVG FileLog_Beregnung:SVG_FileLog_Beregnung_1:CURRENT
attr SVG_FileLog_Beregnung_1 group Beregnung
attr SVG_FileLog_Beregnung_1 room Beregnung
attr SVG_FileLog_Beregnung_1 sortby 1








########################################################################
########################### Neue Beregnung #################################
########################################################################

Das ist jetzt der Erguss aus diesem Thread. Der Code entstammt primär Pers Hirn und Fingern und ich habe als Ideengeber und Tester fungiert. ;) ... nochmal Danke dafür, Per!

Die Funktionalität entspricht der ursprünglichen, plus einer Zisternenpumpe die sich bei Beginn der Automatik anschaltet (nur wenn sie vorher aus war) und nach Beendigung der Beregnung wieder ausschaltet. Zusätzlich wird noch eine Brunnenpumpe entsprechend der Laufzeit der Beregnung aktiviert. Insgesamt soll diese 30 Minuten am Tag laufen und da in meinem Falle Solarstrom Mittags am meisten vorhanden ist, die fehlende Zeit dann substituieren.

Weiterhin schaltet die Brunnenpumpe bei sonstigem übermäßigen Strombezug ab und macht weiter (bis 30 min) wenn der Strombedarf wieder gesunken ist.

Ach so, und jetzt kann man Beregner per Dropdown in Kreisen kombinieren (zeitgleich laufen lassen) und dadurch auch die Reihenfolge der einzelnen Beregner frei wählen.

Habt Spaß. Ich hoffe es ist ausreichend kommentiert, dass man sich zurechtfindet. (Sowohl die Ansagen, das Filelog, der Plot, als auch die Pumpen können einfach bei Nichtbedarf eliminiert werden, der Rest sollte trotzdem funktionieren)

H.

PS: viele recht verschwurbelt und komplex anmutende Bedingungen in den DOIF´s resultieren aus den von Homematic generierten Zwischenstands-Events beim Schalten und der dadurch nötigen Eingrenzung der zu triggernden Events. Das ist aber kein Nachteil, egal welche Schalter ihr für eure Ventile habt .... liest sich nur anstrengender.


######################################## BEREGNUNG ############################################

define myTwilight Twilight 43.5976 12.8648 0 712129
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#--------------------------- FAKE DUMMIES ---------------------------------#

define BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 dummy
attr BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 room Beregnung
attr BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 webCmd on:off

define BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 dummy
attr BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 room Beregnung
attr BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 webCmd on:off

define BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 dummy
attr BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 room Beregnung
attr BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 webCmd on:off

define BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 dummy
attr BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 room Beregnung
attr BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 webCmd on:off

define BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 dummy
attr BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 room Beregnung
attr BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 webCmd on:off

define BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 dummy
attr BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 room Beregnung
attr BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 webCmd on:off

define PozzoHauptOben_PUMPE_Cisterna dummy
attr PozzoHauptOben_PUMPE_Cisterna room Beregnung
attr PozzoHauptOben_PUMPE_Cisterna webCmd on:off

define PozzoHauptOben_PUMPE_Pozzo dummy
attr PozzoHauptOben_PUMPE_Pozzo room Beregnung
attr PozzoHauptOben_PUMPE_Pozzo webCmd on:off

define Xtender_AC_out dummy
attr Xtender_AC_out room Beregnung
attr Xtender_AC_out setList state:slider,0,200,2400
attr Xtender_AC_out webCmd state

#------------------------ Beregner Dummys ---------------------------#

define Beregner_01_Zitronen dummy
attr Beregner_01_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_01_Zitronen group Beregnung
attr Beregner_01_Zitronen readingList talktext,switch,Kreis
attr Beregner_01_Zitronen room Beregnung
attr Beregner_01_Zitronen setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_01_Zitronen webCmd Kreis:auto:on:off
#set Beregner_01_Zitronen talktext Beregnung Zitronen
#set Beregner_01_Zitronen switch BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14

define Beregner_02_CampeggioUnten dummy
attr Beregner_02_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_02_CampeggioUnten group Beregnung
attr Beregner_02_CampeggioUnten readingList talktext,switch,Kreis
attr Beregner_02_CampeggioUnten room Beregnung
attr Beregner_02_CampeggioUnten setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_02_CampeggioUnten webCmd Kreis:auto:on:off
#set Beregner_02_CampeggioUnten talktext Beregnung Camping unten
#set Beregner_02_CampeggioUnten switch BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_03_Blauregen dummy
attr Beregner_03_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_03_Blauregen group Beregnung
attr Beregner_03_Blauregen readingList talktext,switch,Kreis
attr Beregner_03_Blauregen room Beregnung
attr Beregner_03_Blauregen setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_03_Blauregen webCmd Kreis:auto:on:off
#set Beregner_03_Blauregen talktext Beregnung Blauregen
#set Beregner_03_Blauregen switch BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17

define Beregner_04_HinterKueche dummy
attr Beregner_04_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_04_HinterKueche group Beregnung
attr Beregner_04_HinterKueche readingList talktext,switch,Kreis
attr Beregner_04_HinterKueche room Beregnung
attr Beregner_04_HinterKueche setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_04_HinterKueche webCmd Kreis:auto:on:off
#set Beregner_04_HinterKueche talktext Beregnung Hinter Kueche
#set Beregner_04_HinterKueche switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15

define Beregner_05_CampeggioOben dummy
attr Beregner_05_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_05_CampeggioOben group Beregnung
attr Beregner_05_CampeggioOben readingList talktext,switch,Kreis
attr Beregner_05_CampeggioOben room Beregnung
attr Beregner_05_CampeggioOben setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_05_CampeggioOben webCmd Kreis:auto:on:off
#set Beregner_05_CampeggioOben talktext Beregnung Camping oben
#set Beregner_05_CampeggioOben switch BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13

define Beregner_06_Waschhaus dummy
attr Beregner_06_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_06_Waschhaus group Beregnung
attr Beregner_06_Waschhaus readingList talktext,switch,Kreis
attr Beregner_06_Waschhaus room Beregnung
attr Beregner_06_Waschhaus setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_06_Waschhaus webCmd Kreis:auto:on:off
#set Beregner_06_Waschhaus talktext Beregnung Waschhaus
#set Beregner_06_Waschhaus switch BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16



#------------------------ Beregnung Einstellung Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat group Beregnung
attr BeregnungStartmonat room Beregnung
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat group Beregnung
attr BeregnungEndmonat room Beregnung
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer group Beregnung
attr BeregnungStandarddauer room Beregnung
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation group Beregnung
attr BeregnungStartelevation room Beregnung
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO group Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO room Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnung Logik -----------------------------#

define BeregnungDOIF_NachSonne DOIF ([myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungDOIF_NachSonne group Beregnung
attr BeregnungDOIF_NachSonne room Beregnung


define BeregnungDummy_Helper dummy
attr BeregnungDummy_Helper group Beregnung

define BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(sleep 0.001;;set [$DEVICE:switch] on, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["^Beregner_:^off$"]) \
(sleep 0.001;;set [$DEVICE:switch] off, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["^Beregner_:^auto$"]) \
(sleep 0.001;;set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
() \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off)

attr BeregnungDOIF_Mapping cmdState [$SELF]|[$SELF]|[$SELF]|60*[BeregnungStandarddauer]|[$SELF]|0
attr BeregnungDOIF_Mapping do always
attr BeregnungDOIF_Mapping group Beregnung



define BeregnungDOIF_Trigger DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Automatik Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_3) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_4) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_5) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_6) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_7) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set SqueezeBoxPlayer.* talk Automatik Beregnung beendet, IF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on") (set BeregnungDurchlauf_AN_AUS_AUTO off )) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
({foreach (AggrDoIf('@','^Beregner_')) {fhem("set BeregnungDummy_Helper $_")}}, set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)

attr BeregnungDOIF_Trigger group Beregnung
attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0


#------------------------- Beregnung Pumpe Cisterna bei Bedarf on -----------------------------#

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] ne "4") \
(set $SELF manu off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] ne "1") \
(set $SELF manu on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0") \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna devStateIcon disabled:general_aus@red:initialize initialize|initialized|cmd_2|cmd_4:general_an@yellow:disable cmd_1|cmd_3:general_an@green:disable
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna room Beregnung
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10

#----------------------------- Pozzo Pumpe ------------------------------#

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([13:00-16:00] and [Xtender_AC_out] < 1200 and [?$SELF:Laufzeit] < 1800) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_4) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and [Xtender_AC_out] < 1200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [$SELF:cmd] eq "2") \
(set $SELF cmd_4) \
DOELSEIF ([Xtender_AC_out] > 2100 and ([$SELF:cmd_seqnr] eq "1" or [$SELF:cmd] eq "2")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])},set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)
attr PozzoHauptOben_PUMPE_PozzoDOIF devStateIcon disabled:general_aus@red:initialize initialize|initialized|cmd_1|cmd_1_2|cmd_3|cmd_4|cmd_5:general_an@yellow:disable cmd_1_1|cmd_2:general_an@green:disable
attr PozzoHauptOben_PUMPE_PozzoDOIF group Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit
attr PozzoHauptOben_PUMPE_PozzoDOIF room Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 180,1800-[$SELF:Laufzeit]:0:10:0:0
#set PozzoHauptOben_PUMPE_PozzoDOIF Laufzeit 0
#------------------------- Beregnung Filelog und plot -----------------------------#

define FileLog_Beregnung FileLog ./log/Beregnung-%Y-%m.log BEREGNUNG_SCHALTER_.*:(on|off)|PozzoHauptOben_PUMPE_Pozzo:(on|off)|PozzoHauptOben_PUMPE_Cisterna:(on|off)
attr FileLog_Beregnung group Beregnung
attr FileLog_Beregnung logtype text

define SVG_FileLog_Beregnung_1 SVG FileLog_Beregnung:SVG_FileLog_Beregnung_1:CURRENT
attr SVG_FileLog_Beregnung_1 group Beregnung
attr SVG_FileLog_Beregnung_1 room Beregnung
attr SVG_FileLog_Beregnung_1 sortby 1
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 03 April 2017, 23:40:12
Erste Frage zur Vereinfachung: könnte man BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14, Beregnung_TRIGGER_Blauregen und Beregnung_TRIGGER_CampeggioUnten auch nacheinander schalten (evtl. mit geänderten Zeiten)?

Vorab ein kleiner Codeschnipsel zur kleinen Vereinfachung:

Dazu ein jeweils ins DOIF
define BeregnungHinterKuecheDOIF DOIF ([Beregnung_TRIGGER_HinterKueche] eq "on" and [?Beregnung_HinterKueche] eq "auto") (set [$SELF:switch] on,set SqueezeBoxPlayer.* talk [$SELF:talktext]) (set [$SELF:switch] off,set [$SELF:next] on) \
DOELSEIF ([Beregnung_TRIGGER_HinterKueche] eq "on" and [?Beregnung_HinterKueche] eq "off") (set [$SELF:next] on) \
DOELSEIF ([Beregnung_HinterKueche] eq "on") (set [$SELF:switch] on,set SqueezeBoxPlayer.* talk [$SELF:talktext]) \
DOELSEIF ([Beregnung_TRIGGER_Ablauf] eq "off" or [Beregnung_HinterKueche] eq "off") (set [$SELF:switch] off)

attr BeregnungHinterKuecheDOIF userReadings talktext, switch, next
set BeregnungHinterKuecheDOIF talktext Beregnung Kueche gestartet
set BeregnungHinterKuecheDOIF switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15
set BeregnungHinterKuecheDOIF next Beregnung_TRIGGER_CampeggioOben

Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 04 April 2017, 03:22:23
Ne Idee gehabt, deshalb nicht einschlafen können, also gleich aufgeschrieben:

Pro Beregner ein DOIF, ich habe sie mal mit _A bis _F bezeichnet, kannst aber deine Bezeichnungen beibehalten.
define Beregner_DOIF_F DOIF (0)
DOELSEIF (0) ({Beregner_Auswahl F on})
DOELSEIF (0) ({Beregner_Auswahl F off})
attr Beregner_DOIF_F userReadings talktext, switch
attr Beregner_DOIF_F cmdState auto|on|off
attr Beregner_DOIF_F devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_DOIF_F group Beregnung
attr Beregner_DOIF_F room Beregnung
set Beregner_DOIF_F talktext Beregnung Kueche gestartet
set Beregner_DOIF_F switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15

Diese DOIF werden direkt im Frontend angezeigt und geschaltet.


Dazu die "Automatik", welche täglich um 8 Uhr startet:
define BeregnerTrigger DOIF ([08:00]) (
IF ([Beregner_DOIF_A] != "auto" and [Beregner_DOIF_B] != "auto" and [Beregner_DOIF_F] != "auto")(set $SELF cmd_2),
IF ([Beregner_DOIF_A] == "auto") ({Beregner_Auswahl A on}),
IF ([Beregner_DOIF_B] == "auto") ({Beregner_Auswahl B on}),
IF ([Beregner_DOIF_F] == "auto") ({Beregner_Auswahl F on})
)(
IF ([Beregner_DOIF_A] == "auto") ({Beregner_Auswahl A off}),
IF ([Beregner_DOIF_B] == "auto") ({Beregner_Auswahl B off}),
IF ([Beregner_F_DOIF] == "auto") ({Beregner_Auswahl F off}),
set $SELF cmd_2
)
DOELSEIF (0) (
IF ([Beregner_DOIF_B] != "auto") (set $SELF cmd_3),{Beregner_Auswahl B on}
)(
IF ([Beregner_DOIF_F] == "auto") ({Beregner_Auswahl B off}),
set $SELF cmd_3
)
DOELSEIF (0) (
IF ([Beregner_DOIF_C] != "auto") (set $SELF cmd_4), {Beregner_Auswahl C on}
)(
IF ([Beregner_DOIF_C] == "auto") ({Beregner_Auswahl C off}),
set $SELF cmd_4
)
... usw...
attr BeregnerTrigger wait 0,[Beregnung_Standarddauer:state]*60:0,[Beregnung_Standarddauer:state]*60:0,[Beregnung_Standarddauer:state]*60:0,[Beregnung_Standarddauer:state]*60....


dazu ein Mini-Script in die 99_myUtils
sub Beregner_Auswahl ($$)
{
my ($myDev,$myEvent);
fhem ("set " . readingsVal("Beregner_DOIF_".$myDev,"switch","") ." ". $myEvent);
if ($MyEvent eq "on")
{fhem ("set SqueezeBoxPlayer.* talk " . readingsVal("Beregner_DOIF_".$myDev,"talktext",""));
}


Das lässt sich bestimmt auch mittels DOIF abbilden, dafür ist es mir aber jetzt eindeutig zu spät.

Und wie immer gilt: Syntax nochmal prüfen, alles nur Theorie!

Und: einen Fehler (?) in BeregnungZitronenDOIF habe ich von dir übernommen: je nachdem, welche Regner auf Automatik stehen, gibt es für Blauregen und CampeggioUnten doppelte Zeiten oder einfache.

Noch eine Idee wären at mit automatisch erzeugten Namen statt der wait-Attribute, diese müssten halt beim manuellen Ausschalten gelöscht werden. Ist halt ein anderer Weg.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 04 April 2017, 10:02:43
Sch... war die Nacht kurz.
Also die ersten DOIF können natürlich Dummies bleiben. Ist zwar etwas aufwendiger, die Befehle zu mappen, aber auch kein Teufelswerk.
Oder man lässt das mappen und macht ein DOIF dafür:

define Beregner_Mapping DOIF (["Beregner_DOIF_:on"]) (set [$DEVICE:switch] on,set SqueezeBoxPlayer.* talk [$DEVICE:talktext])
DOELSEIF (["Beregner_DOIF_:off"]) (set [$DEVICE:switch] off)


und weil wir gerade dabei sind, ergänzen wir das DOIF "etwas":
DOELSEIF (["Beregner_Dummy"])
(IF ([Beregner_DOIF_[$EVENT] eq "auto"])
(IF ([BeregnerTrigger] eq "on")
(set [$EVENT:switch] on,
set SqueezeBoxPlayer.* talk [$DEVICE:talktext])
ELSE
(set $EVENT:switch] off)
)
)

Die IF kann man bestimmt mit in den DOELSE-Bedingungen unterbringen, aber ich kann wie gesagt nicht wirklich testen.

Und können damit a: das Scriptchen in 99_myUtils weglassen und b: den BeregnerTrigger vereinfachen:
define BeregnerTrigger DOIF (["Beregnung_Durchlauf_AN_AUS_AUTO:on"] or
[BeregnungNachSonneDOIF] eq "cmd_1")
(IF ([Beregner_DOIF_A] != "auto" and [Beregner_DOIF_B] != "auto" and [Beregner_DOIF_F] != "auto")(set $SELF cmd_2))
(set Beregner_Dummy Beregner_DOIF_A,set Beregner_Dummy Beregner_DOIF_B,set Beregner_Dummy Beregner_DOIF_F)
(set Beregner_Dummy Beregner_DOIF_A,set Beregner_Dummy Beregner_DOIF_B,set Beregner_Dummy Beregner_DOIF_F,set $SELF cmd_2)
DOELSEIF (0)
(IF ([Beregner_DOIF_B] != "auto") (set $SELF cmd_3))
(set Beregner_Dummy Beregner_DOIF_B)
(set Beregner_Dummy Beregner_DOIF_B,set $SELF cmd_3)
DOELSEIF (0)
(IF ([Beregner_DOIF_C] != "auto") (set $SELF cmd_4))
(set Beregner_Dummy Beregner_DOIF_C)
(set Beregner_Dummy Beregner_DOIF_C,set $SELF cmd_4)
)
... usw...
DOELSEIF ([Beregnung_Durchlauf_AN_AUS_AUTO] eq "off")
()
(set Beregner_Dummy Beregner_DOIF_A,set Beregner_Dummy Beregner_DOIF_B,set Beregner_Dummy Beregner_DOIF_C,...)
attr BeregnerTrigger wait 0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60....:0,0

Dazu kommen aber folgende Zeilen:
attr BeregnerTrigger cmdState on,off,off|on,off,off|on,off,off|...|off,off
und
define Beregner_Dummy Dummy

Ob ich das mit dem Sonnenstand jetzt richtig verstanden habe, weiss ich aber nicht. Evtl. könnte man das alte BeregnungNachSonneDOIF beibehalten und nur um einen ELSE-Zweig ergängen. Dann meldet es sich nur, wenn die Werte unter-/überschritten oder passend geändert werden und nicht alle x min.
define BeregnungNachSonneDOIF DOIF ([?Beregnung_Durchlauf_AN_AUS_AUTO] eq "auto" and [?myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [?Beregnung_Startmonat] and $month <= [?Beregnung_Endmonat]))
DOELSE

Da kann man auch noch mit den Fragezeichen etwas spielen. Wenn du nur einmal am Tag "Nach Sonne" starten willst, könntest du noch ein Dummy/Userreading mit dem letztem Laufdatum vorsehen. Die Initialisierung nach einer Änderung fest auf 1 Uhr zu stellen, halte ich zwar für machbar, aber kontraproduktiv.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 04 April 2017, 11:52:39
Uiuiui Per, da muß ich mir heute Abend mal ein bißchen Zeit nehmen deinen Wahnsinn zu verstehen. Schonmal Danke fürs denken!

bis gleich

H.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 04 April 2017, 12:10:05
Zitat von: holle75 am 04 April 2017, 11:52:39Schonmal Danke fürs denken!
Und ich hoffe, dass ich diese Nacht den Kopf wieder frei zum Schlafen habe  ;D ;D ;D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 06 April 2017, 16:50:57
Hallo Per, entschuldige die Verzögerung, aber meine Solaranlage hat mir die letzten zwei Tage einige Herausforderungen gestellt :(

Aaaaalso, ich sitz jetzt seit ner Stunde vor deinen Beiträgen und versuche zu verstehen was du dir da ausgedacht hast. Ich erfasse nicht, was aus welchem Beitrag wie zusammengehört ?!

Und wenn ich mir das nicht "einmal in Ganz" in einen Editor packe kann ich deine Gedankengänge nicht nachvollziehen. Was nicht automatisch heißt, dass ich ich es dann auch wirklich kann ;)

Könntest du mir vielleicht nochmal deine "finale Version" aus den Beiträgen zusammenkopieren?

sorry und Grüße

H.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 06 April 2017, 17:11:10
######################################## BEREGNUNG ############################################

define myTwilight Twilight 42.xxxx 11.xxxx x yyyyyy
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#----------------------------------------------------------------#

define Beregnung_Zitronen dummy
attr Beregnung_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Zitronen group Beregnung
attr Beregnung_Zitronen room Beregnung
attr Beregnung_Zitronen webCmd auto:on:off
#attr Beregnung_Zitronen devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_Zitronen setList auto on off

define Beregnung_CampeggioOben dummy
attr Beregnung_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_CampeggioOben group Beregnung
attr Beregnung_CampeggioOben room Beregnung
attr Beregnung_CampeggioOben webCmd auto:on:off
#attr Beregnung_CampeggioOben devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_CampeggioOben setList auto on off

define Beregnung_CampeggioUnten dummy
attr Beregnung_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_CampeggioUnten group Beregnung
attr Beregnung_CampeggioUnten room Beregnung
attr Beregnung_CampeggioUnten webCmd auto:on:off
#attr Beregnung_CampeggioUnten devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_CampeggioUnten setList auto on off

define Beregnung_Blauregen dummy
attr Beregnung_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Blauregen group Beregnung
attr Beregnung_Blauregen room Beregnung
attr Beregnung_Blauregen webCmd auto:on:off
#attr Beregnung_Blauregen devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_Blauregen setList auto on off

define Beregnung_HinterKueche dummy
attr Beregnung_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_HinterKueche group Beregnung
attr Beregnung_HinterKueche room Beregnung
attr Beregnung_HinterKueche webCmd auto:on:off
#attr Beregnung_HinterKueche devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_HinterKueche setList auto on off

define Beregnung_Waschhaus dummy
attr Beregnung_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Waschhaus group Beregnung
attr Beregnung_Waschhaus room Beregnung
attr Beregnung_Waschhaus webCmd auto:on:off
#attr Beregnung_Waschhaus devStateIcon on:rc_GREEN:off off:rc_RED:auto auto:rc_BLUE:on
#attr Beregnung_Waschhaus setList auto on off

define Beregnung_Startmonat dummy
attr Beregnung_Startmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr Beregnung_Startmonat group Beregnung
attr Beregnung_Startmonat room Beregnung
attr Beregnung_Startmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr Beregnung_Startmonat sortby 5
attr Beregnung_Startmonat webCmd state

define Beregnung_Endmonat dummy
attr Beregnung_Endmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr Beregnung_Endmonat group Beregnung
attr Beregnung_Endmonat room Beregnung
attr Beregnung_Endmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr Beregnung_Endmonat sortby 6
attr Beregnung_Endmonat webCmd state

define Beregnung_Standarddauer dummy
attr Beregnung_Standarddauer group Beregnung
attr Beregnung_Standarddauer room Beregnung
attr Beregnung_Standarddauer setList state:slider,1,1,60
attr Beregnung_Standarddauer sortby 4
attr Beregnung_Standarddauer webCmd state

define Beregnung_Startelevation dummy
attr Beregnung_Startelevation group Beregnung
attr Beregnung_Startelevation room Beregnung
attr Beregnung_Startelevation setList state:slider,1,1,30
attr Beregnung_Startelevation sortby 3
attr Beregnung_Startelevation webCmd state

#-----------------------------------------------------------------------#

define Beregnung_Durchlauf_AN_AUS_AUTO dummy
attr Beregnung_Durchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Durchlauf_AN_AUS_AUTO group Beregnung
attr Beregnung_Durchlauf_AN_AUS_AUTO room Beregnung
attr Beregnung_Durchlauf_AN_AUS_AUTO sortby 2
attr Beregnung_Durchlauf_AN_AUS_AUTO webCmd auto:on:off

#---------------------------------------------------------------------------#

define FileLog_Beregnung FileLog ./log/Beregnung-%Y-%m.log BEREGNUNG.*:(on|off)|PozzoHauptOben_PUMPE_Pozzo:(on|off)
attr FileLog_Beregnung group Beregnung
attr FileLog_Beregnung logtype text

define SVG_FileLog_Beregnung_1 SVG FileLog_Beregnung:SVG_FileLog_Beregnung_1:CURRENT
attr SVG_FileLog_Beregnung_1 group Beregnung
attr SVG_FileLog_Beregnung_1 room Beregnung
attr SVG_FileLog_Beregnung_1 sortby 1

define Beregner_Mapping DOIF (["Beregner_DOIF_:on"]) (set [$DEVICE:switch] on,set SqueezeBoxPlayer.* talk [$DEVICE:talktext])
DOELSEIF (["Beregner_DOIF_:off"]) (set [$DEVICE:switch] off)
DOELSEIF (["Beregner_Dummy"])
(IF ([Beregner_DOIF_[$EVENT] eq "auto"])
(IF ([BeregnerTrigger] eq "on")
(set [$EVENT:switch] on,
set SqueezeBoxPlayer.* talk [$DEVICE:talktext])
ELSE
(set $EVENT:switch] off)
)
)

define BeregnerTrigger DOIF (["Beregnung_Durchlauf_AN_AUS_AUTO:on"] or
[BeregnungNachSonneDOIF] eq "cmd_1")
(IF ([Beregnung_Zitronen] != "auto" and [Beregnung_CampeggioOben] != "auto" and [Beregner_DOIF_F] != "auto")(set $SELF cmd_2))
(set Beregner_Dummy Beregnung_Zitronen,set Beregner_Dummy Beregnung_CampeggioOben,set Beregner_Dummy Beregnung_Waschhaus)
(set Beregner_Dummy Beregnung_Zitronen,set Beregner_Dummy Beregnung_CampeggioOben,set Beregner_Dummy Beregnung_Waschhaus,set $SELF cmd_2)
DOELSEIF (0)
(IF ([Beregnung_CampeggioOben] != "auto") (set $SELF cmd_3))
(set Beregner_Dummy Beregnung_CampeggioOben)
(set Beregner_Dummy Beregnung_CampeggioOben,set $SELF cmd_3)
DOELSEIF (0)
(IF ([Beregner_DOIF_C] != "auto") (set $SELF cmd_4))
(set Beregner_Dummy Beregnung_CampeggioUnten)
(set Beregner_Dummy Beregnung_CampeggioUnten,set $SELF cmd_4)
)
... usw...
DOELSEIF ([Beregnung_Durchlauf_AN_AUS_AUTO] eq "off")
()
(set Beregner_Dummy Beregnung_Zitronen,set Beregner_Dummy Beregnung_CampeggioOben,set Beregner_Dummy Beregnung_CampeggioUnten,...)
attr BeregnerTrigger wait 0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60....:0,0
attr BeregnerTrigger cmdState on,off,off|on,off,off|on,off,off|...|off,off

define Beregner_Dummy Dummy

define BeregnungNachSonneDOIF DOIF ([?Beregnung_Durchlauf_AN_AUS_AUTO] eq "auto" and [?myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [?Beregnung_Startmonat] and $month <= [?Beregnung_Endmonat]))
DOELSE
attr BeregnungNachSonneDOIF group Beregnung
attr BeregnungNachSonneDOIF room Beregnung

So, hoffentlich ist mir beim Kopieren kein Fehler unterlaufen...
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 07 April 2017, 20:04:02
Danke Per. Ich denk mich da jetzt mal ein "paar Stunden" rein.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 09 April 2017, 20:45:36
... Mein lieber Scholli ....

erstmal Danke nochmals für deine Mühen!

Ich muß das erstmal auseinanderklabüstern:

Wenn die Kopierung so passt, hat sich ja vom Vorbau (die ganzen Dummys mit der Möglichkeit auto,on,off zu wählen, plus Startelevation, Standardzeit) erstmal nichts geändert.

define Beregnung_Zitronen dummy
attr Beregnung_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Zitronen group Beregnung
attr Beregnung_Zitronen room Beregnung
attr Beregnung_Zitronen webCmd auto:on:off

define Beregnung_CampeggioOben dummy
attr Beregnung_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_CampeggioOben group Beregnung
attr Beregnung_CampeggioOben room Beregnung
attr Beregnung_CampeggioOben webCmd auto:on:off

define Beregnung_CampeggioUnten dummy
attr Beregnung_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_CampeggioUnten group Beregnung
attr Beregnung_CampeggioUnten room Beregnung
attr Beregnung_CampeggioUnten webCmd auto:on:off

define Beregnung_Blauregen dummy
attr Beregnung_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Blauregen group Beregnung
attr Beregnung_Blauregen room Beregnung
attr Beregnung_Blauregen webCmd auto:on:off

define Beregnung_HinterKueche dummy
attr Beregnung_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_HinterKueche group Beregnung
attr Beregnung_HinterKueche room Beregnung
attr Beregnung_HinterKueche webCmd auto:on:off

define Beregnung_Waschhaus dummy
attr Beregnung_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Waschhaus group Beregnung
attr Beregnung_Waschhaus room Beregnung
attr Beregnung_Waschhaus webCmd auto:on:off

define Beregnung_Startmonat dummy
attr Beregnung_Startmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr Beregnung_Startmonat group Beregnung
attr Beregnung_Startmonat room Beregnung
attr Beregnung_Startmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr Beregnung_Startmonat sortby 5
attr Beregnung_Startmonat webCmd state

define Beregnung_Endmonat dummy
attr Beregnung_Endmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr Beregnung_Endmonat group Beregnung
attr Beregnung_Endmonat room Beregnung
attr Beregnung_Endmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr Beregnung_Endmonat sortby 6
attr Beregnung_Endmonat webCmd state

define Beregnung_Standarddauer dummy
attr Beregnung_Standarddauer group Beregnung
attr Beregnung_Standarddauer room Beregnung
attr Beregnung_Standarddauer setList state:slider,1,1,60
attr Beregnung_Standarddauer sortby 4
attr Beregnung_Standarddauer webCmd state

define Beregnung_Startelevation dummy
attr Beregnung_Startelevation group Beregnung
attr Beregnung_Startelevation room Beregnung
attr Beregnung_Startelevation setList state:slider,1,1,30
attr Beregnung_Startelevation sortby 3
attr Beregnung_Startelevation webCmd state

#-----------------------------------------------------------------------#

define Beregnung_Durchlauf_AN_AUS_AUTO dummy
attr Beregnung_Durchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_Durchlauf_AN_AUS_AUTO group Beregnung
attr Beregnung_Durchlauf_AN_AUS_AUTO room Beregnung
attr Beregnung_Durchlauf_AN_AUS_AUTO sortby 2
attr Beregnung_Durchlauf_AN_AUS_AUTO webCmd auto:on:off


"Nur" die Automatik. Also dieser Teil

define Beregner_Mapping DOIF (["Beregner_DOIF_:on"]) (set [$DEVICE:switch] on,set SqueezeBoxPlayer.* talk [$DEVICE:talktext])
DOELSEIF (["Beregner_DOIF_:off"]) (set [$DEVICE:switch] off)
DOELSEIF (["Beregner_Dummy"])
(IF ([Beregner_DOIF_[$EVENT] eq "auto"])
(IF ([BeregnerTrigger] eq "on")
(set [$EVENT:switch] on,
set SqueezeBoxPlayer.* talk [$DEVICE:talktext])
ELSE
(set $EVENT:switch] off)
)
)

define BeregnerTrigger DOIF (["Beregnung_Durchlauf_AN_AUS_AUTO:on"] or [BeregnungNachSonneDOIF] eq "cmd_1")
(IF ([Beregnung_Zitronen] != "auto" and [Beregnung_CampeggioOben] != "auto" and [Beregner_DOIF_F] != "auto")(set $SELF cmd_2))
(set Beregner_Dummy Beregnung_Zitronen,set Beregner_Dummy Beregnung_CampeggioOben,set Beregner_Dummy Beregnung_Waschhaus)
(set Beregner_Dummy Beregnung_Zitronen,set Beregner_Dummy Beregnung_CampeggioOben,set Beregner_Dummy Beregnung_Waschhaus,set $SELF cmd_2)
DOELSEIF (0)
(IF ([Beregnung_CampeggioOben] != "auto") (set $SELF cmd_3))
(set Beregner_Dummy Beregnung_CampeggioOben)
(set Beregner_Dummy Beregnung_CampeggioOben,set $SELF cmd_3)
DOELSEIF (0)
(IF ([Beregner_DOIF_C] != "auto") (set $SELF cmd_4))
(set Beregner_Dummy Beregnung_CampeggioUnten)
(set Beregner_Dummy Beregnung_CampeggioUnten,set $SELF cmd_4)
)
... usw...
DOELSEIF ([Beregnung_Durchlauf_AN_AUS_AUTO] eq "off")
()
(set Beregner_Dummy Beregnung_Zitronen,set Beregner_Dummy Beregnung_CampeggioOben,set Beregner_Dummy Beregnung_CampeggioUnten,...)
attr BeregnerTrigger wait 0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60:0,0,[Beregnung_Standarddauer:state]*60....:0,0
attr BeregnerTrigger cmdState on,off,off|on,off,off|on,off,off|...|off,off

define Beregner_Dummy Dummy

define BeregnungNachSonneDOIF DOIF ([?Beregnung_Durchlauf_AN_AUS_AUTO] eq "auto" and [?myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [?Beregnung_Startmonat] and $month <= [?Beregnung_Endmonat]))
DOELSE
attr BeregnungNachSonneDOIF group Beregnung
attr BeregnungNachSonneDOIF room Beregnung


... um mich langsam ranzutasten:

define Beregner_Mapping DOIF (["Beregner_DOIF_:on"]) (set [$DEVICE:switch] on,set SqueezeBoxPlayer.* talk [$DEVICE:talktext])
DOELSEIF (["Beregner_DOIF_:off"]) (set [$DEVICE:switch] off)
DOELSEIF (["Beregner_Dummy"])
   (IF ([Beregner_DOIF_[$EVENT] eq "auto"])
      (IF ([BeregnerTrigger] eq "on")
         (set [$EVENT:switch] on,
         set SqueezeBoxPlayer.* talk [$DEVICE:talktext])
      ELSE
         (set $EVENT:switch] off)
      )
   )

["Beregner_DOIF_:on"] muss, wenn ich meine alten Bezeichnungen beibehalten möchte (Beregnung_Zitronen, Beregnung_Blauregen, etc.) ["Beregnung_:on"] heißen, richtig?

talktext und switch müßte zu den entsprechenden dummys eigentlich dazu, richtig? zB

define Beregnung_HinterKueche dummy
attr Beregnung_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregnung_HinterKueche group Beregnung
attr Beregnung_HinterKueche room Beregnung
attr Beregnung_HinterKueche userReadings talktext, switch
attr Beregnung_HinterKueche webCmd auto:on:off
set Beregnung_HinterKueche talktext Beregnung Kueche gestartet
set Beregnung_HinterKueche switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15


falls das stimmt, kann ich weiterdenken ;) .... wenn nicht, führen deine Gedankenergüsse für mich zweifelsfrei zu weit :D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 09 April 2017, 21:45:36
Zitat von: holle75 am 09 April 2017, 20:45:36richtig?
ja
Zitat von: holle75 am 09 April 2017, 20:45:36richtig?
ja

Durch das mehrfache Hinundherkopieren und die fortgeschrittene Stunde gab es doch einige "Altlasten".
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 11 April 2017, 21:06:57
Hallo Per, ich habs jetzt mal "ins Reine" geschrieben.
Wenn das so von dir gemeint war ..... kann ich weiterdenken. Denn noch blick ich nur die Hälfte und es macht keine Freude falls der Code einfach falsch ist. Da denkts sich lange ....

könntest du nochmal drüberschauen, bitte ?

######################################## BEREGNUNG ############################################

define myTwilight Twilight xxxxx yyyyy
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#------------------------ Beregner Dummys ---------------------------#

define Beregner_Zitronen dummy
attr Beregner_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Zitronen group Beregnung
attr Beregner_Zitronen room Beregnung
attr Beregner_Zitronen webCmd auto:on:off
attr Beregner_Zitronen userReadings talktext, switch
set Beregner_Zitronen talktext Beregnung Zitronen
set Beregner_Zitronen switch BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14

define Beregner_CampeggioOben dummy
attr Beregner_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_CampeggioOben group Beregnung
attr Beregner_CampeggioOben room Beregnung
attr Beregner_CampeggioOben webCmd auto:on:off
attr Beregner_CampeggioOben userReadings talktext, switch
set Beregner_CampeggioOben talktext Beregnung Camping oben
set Beregner_CampeggioOben switch BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13

define Beregner_CampeggioUnten dummy
attr Beregner_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_CampeggioUnten group Beregnung
attr Beregner_CampeggioUnten room Beregnung
attr Beregner_CampeggioUnten webCmd auto:on:off
attr Beregner_CampeggioUnten userReadings talktext, switch
set Beregner_CampeggioUnten talktext Beregnung Camping unten
set Beregner_CampeggioUnten switch BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_Blauregen dummy
attr Beregner_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Blauregen group Beregnung
attr Beregner_Blauregen room Beregnung
attr Beregner_Blauregen webCmd auto:on:off
attr Beregner_Blauregen userReadings talktext, switch
set Beregner_Blauregen talktext Beregnung Blauregen
set Beregner_Blauregen switch BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17

define Beregner_HinterKueche dummy
attr Beregner_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_HinterKueche group Beregnung
attr Beregner_HinterKueche room Beregnung
attr Beregner_HinterKueche webCmd auto:on:off
attr Beregner_HinterKueche userReadings talktext, switch
set Beregner_HinterKueche talktext Beregnung Hinter Kueche
set Beregner_HinterKueche switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15

define Beregner_Waschhaus dummy
attr Beregner_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Waschhaus group Beregnung
attr Beregner_Waschhaus room Beregnung
attr Beregner_Waschhaus webCmd auto:on:off
attr Beregner_Waschhaus userReadings talktext, switch
set Beregner_Waschhaus talktext Beregnung Waschhaus
set Beregner_Waschhaus switch BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16

#------------------------ Einstellungs Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat group Beregnung
attr BeregnungStartmonat room Beregnung
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat group Beregnung
attr BeregnungEndmonat room Beregnung
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer group Beregnung
attr BeregnungStandarddauer room Beregnung
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation group Beregnung
attr BeregnungStartelevation room Beregnung
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungHelperDummy dummy
attr BeregnungHelperDummy group Beregnung
attr BeregnungHelperDummy room Beregnung

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO group Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO room Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnungs Logik -----------------------------#

define BeregnungNachSonneDOIF DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungNachSonneDOIF group Beregnung
attr BeregnungNachSonneDOIF room Beregnung

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([Beregner_[$EVENT] eq "auto"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
) \
)

define BeregnungTriggerDOIF DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or [BeregnungNachSonneDOIF] eq "cmd_1") \
(IF ([Beregner_Zitronen] != "auto") (set $SELF cmd_2)) (set BeregnungHelperDummy Beregner_Zitronen) (set BeregnungHelperDummy Beregner_Zitronen, set $SELF cmd_2) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioUnten] != "auto") (set $SELF cmd_3)) (set BeregnungHelperDummy Beregner_CampeggioUnten) (set BeregnungHelperDummy Beregner_CampeggioUnten, set $SELF cmd_3) \
DOELSEIF (0) \
(IF ([Beregner_Blauregen] != "auto") (set $SELF cmd_4)) (set BeregnungHelperDummy Beregner_Blauregen) (set BeregnungHelperDummy Beregner_Blauregen, set $SELF cmd_4) \
DOELSEIF (0) \
(IF ([Beregner_HinterKueche] != "auto") (set $SELF cmd_5)) (set BeregnungHelperDummy Beregner_HinterKueche) (set BeregnungHelperDummy Beregner_HinterKueche, set $SELF cmd_5) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioOben] != "auto") (set $SELF cmd_6)) (set BeregnungHelperDummy Beregner_CampeggioOben) (set BeregnungHelperDummy Beregner_CampeggioOben, set $SELF cmd_6) \
DOELSEIF (0) \
(IF ([Beregner_Waschhaus] != "auto") (set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)) (set BeregnungHelperDummy Beregner_Waschhaus) (set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
() (set BeregnungHelperDummy Beregner_Zitronen, set BeregnungHelperDummy Beregner_CampeggioUnten, set BeregnungHelperDummy Beregner_Blauregen, set BeregnungHelperDummy Beregner_HinterKueche, set BeregnungHelperDummy Beregner_CampeggioOben, set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)
attr BeregnungTriggerDOIF wait \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0
attr BeregnungTriggerDOIF cmdState \
on,off,off| \
on,off,off| \
on,off,off| \
on,off,off| \
on,off,off| \
on,off,off| \
off,off
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 12 April 2017, 10:11:02
Passt so, wobei ich jetzt nicht auf Syntax, Klammern usw. geachtet habe.

Zitat von: holle75 am 11 April 2017, 21:06:57Denn noch blick ich nur die Hälfte und es macht keine Freude falls der Code einfach falsch ist. Da denkts sich lange ....
Wo klemmts denn? Ich kann ja auch den Erklärbär (oder Erklär-Per :D) machen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 12 April 2017, 10:19:41
@Erklär-Per ;)

nur ganz kurz ....

In der BeregnungMappingDOIF ...

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([Beregner_[$EVENT] eq "auto"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
) \
)


....  macht mir das Verständnis wo das jeweilige on/off herkommt

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \


Probleme, weil das BeregnungTriggerDOIF ....

(IF ([Beregner_Zitronen] != "auto") (set $SELF cmd_2)) (set BeregnungHelperDummy Beregner_Zitronen) (set BeregnungHelperDummy Beregner_Zitronen, set $SELF cmd_2) \


ja nirgendwo on/off hat.

Und die Verschachtelung Beregner_/BeregnungTriggerDOIF macht mich noch wuschig.
Also diese Schleife:

DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([Beregner_[$EVENT] eq "auto"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
) \
)


wobei auch $EVENT und $DEVICE für mich im DOIF ein bißchen neu sind.... und auch in der commandref zwar für mich die Ahnung von Verstehen da ist, aber im Detail ....

Danke Per

Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 12 April 2017, 11:08:34
Zitat von: holle75 am 12 April 2017, 10:19:41
In der BeregnungMappingDOIF ...

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([Beregner_[$EVENT] eq "auto"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
) \
)


....  macht mir das Verständnis wo das jeweilige on/off herkommt

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \


Probleme, weil das BeregnungTriggerDOIF ....

(IF ([Beregner_Zitronen] != "auto") (set $SELF cmd_2)) (set BeregnungHelperDummy Beregner_Zitronen) (set BeregnungHelperDummy Beregner_Zitronen, set $SELF cmd_2) \


ja nirgendwo on/off hat.
Das kommt aus den extra dafür gesetzten Status (attr cmdState)


Zitat von: holle75 am 12 April 2017, 10:19:41
Und die Verschachtelung Beregner_/BeregnungTriggerDOIF macht mich noch wuschig.
Also diese Schleife:

DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([Beregner_[$EVENT] eq "auto"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
) \
)

Dient nur dazu, innerhalb der DOIF-Zweige nicht jedesmal das gleiche mit anderem Namen zu schreiben. Also sowas wie ein Sub. $EVENT und $DEVICE sind die Parameter, wobei ich glaube, dass hier ein Fehler drin ist. Statt [$DEVICE:talktext] muss [$EVENT:talktext], weil $DEVICE hier immer "BeregnungHelperDummy" wäre. Im oberen Zweig passt das aber so.

Zitat von: holle75 am 12 April 2017, 10:19:41
wobei auch $EVENT und $DEVICE für mich im DOIF ein bißchen neu sind.... und auch in der commandref zwar für mich die Ahnung von Verstehen da ist, aber im Detail ....
Das musst du dir leider selbst erarbeiten. Ist aber, zumindest bei den Variablen, nicht schwer.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 15 April 2017, 22:29:41
Moinsen Per, hatte mal wieder ein Stündchen.

....


#------------------------- Beregnungs Logik -----------------------------#
define BeregnungNachSonneDOIF DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungNachSonneDOIF group Beregnung
attr BeregnungNachSonneDOIF room Beregnung

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
)


define BeregnungTriggerDOIF DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungNachSonneDOIF] eq "cmd_1")) \
(IF ([Beregner_Zitronen] != "auto") (set $SELF cmd_2)) (set BeregnungHelperDummy Beregner_Zitronen) (set BeregnungHelperDummy Beregner_Zitronen, set $SELF cmd_2) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioUnten] != "auto") (set $SELF cmd_3)) (set BeregnungHelperDummy Beregner_CampeggioUnten) (set BeregnungHelperDummy Beregner_CampeggioUnten, set $SELF cmd_3) \
DOELSEIF (0) \
(IF ([Beregner_Blauregen] != "auto") (set $SELF cmd_4)) (set BeregnungHelperDummy Beregner_Blauregen) (set BeregnungHelperDummy Beregner_Blauregen, set $SELF cmd_4) \
DOELSEIF (0) \
(IF ([Beregner_HinterKueche] != "auto") (set $SELF cmd_5)) (set BeregnungHelperDummy Beregner_HinterKueche) (set BeregnungHelperDummy Beregner_HinterKueche, set $SELF cmd_5) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioOben] != "auto") (set $SELF cmd_6)) (set BeregnungHelperDummy Beregner_CampeggioOben) (set BeregnungHelperDummy Beregner_CampeggioOben, set $SELF cmd_6) \
DOELSEIF (0) \
(IF ([Beregner_Waschhaus] != "auto") (set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)) (set BeregnungHelperDummy Beregner_Waschhaus) (set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungHelperDummy Beregner_Zitronen, set BeregnungHelperDummy Beregner_CampeggioUnten, set BeregnungHelperDummy Beregner_Blauregen, set BeregnungHelperDummy Beregner_HinterKueche, set BeregnungHelperDummy Beregner_CampeggioOben, set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)
attr BeregnungTriggerDOIF wait \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0
attr BeregnungTriggerDOIF cmdState \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
end,on,off| \
off


"BeregnungMappingDOIF"  die IF Überprüfung auf "auto" rausgenommen, da das schon in "BeregnungTriggerDOIF"  gemacht wird.

in "attr BeregnungTriggerDOIF cmdState" rumgespielt. Ich hoffe, ich habe das Prinzip jetzt richtig verstanden?

Noch eine Frage: In der alten Version hatte ich ja eine Neustart-Sicherung für "BeregnungNachSonneDOIF" eingebaut. Behält sich DOIF nach einem Neustart seinen cmd-status? Ansonsten würde, falls "BeregnungDurchlauf_AN_AUS_AUTO" auf "auto" steht, "BeregnungNachSonneDOIF" dann "BeregnungTriggerDOIF"  auslösen.
mhm, schwierig zu erklären.

... und "BeregnungTriggerDOIF" die Auslösung umgebaut. Vorher hat das die Idee von "BeregnungDurchlauf_AN_AUS_AUTO" nicht logisch umgesetzt. Diesen Dummy möchte ich irgendwann auf Auto setzen damit, erst am nächsten Tag, der ganze Kremsel dann entsprechend "BeregnungNachSonneDOIF" losläuft. Aber eben nicht nach Neustart oder beim nächsten Trigger.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 15 April 2017, 23:44:41
Zitat von: holle75 am 15 April 2017, 22:29:41"BeregnungMappingDOIF"  die IF Überprüfung auf "auto" rausgenommen, da das schon in "BeregnungTriggerDOIF"  gemacht wird.
Beim ok, aber falls zwischendurch der Status in "on" geändert wird, wird es dann ausgeschaltet.

Zitat von: holle75 am 15 April 2017, 22:29:41Behält sich DOIF nach einem Neustart seinen cmd-status?
Ja, inzwischen schon.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 16 April 2017, 00:27:06
mmh, habs vor allem rausgeschmissen, weil ich es nicht ganz verstehe.

(IF ([Beregner_[$EVENT] eq "auto"]) \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
) \
)


müßte es nicht

(IF ([$EVENT] eq "auto") \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
) \
)


heißen? Sonst wärs doch "Beregner_Beregner_Zitronen"? ..... und was wird ausgeschaltet wenn was auf "on" geht? Kompliziert.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 16 April 2017, 10:46:55
Zitat von: holle75 am 16 April 2017, 00:27:06müßte es nicht
Ja, muss es. Ich bin erstaunt, wieviele C&P-Fehler man früh um 3 machen kann :D

Zitat von: holle75 am 16 April 2017, 00:27:06..... und was wird ausgeschaltet wenn was auf "on" geht?
Ausgeschaltet wird was, wenn das aufrufende DOIF auf off geht. An nur bei on.
Der Trick ist, dass das "BeregnungMappingDOIF" den Status "on" hat, das "BeregnungTriggerDOIF" aufruft, dort dieser Status abgefragt wird und nach Ablauf der Zeit das Ganze mit "off" wiederholt wird.

Zitat von: holle75 am 16 April 2017, 00:27:06Kompliziert.
;D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 16 April 2017, 11:23:49
Zitat von: Per am 16 April 2017, 10:46:55
Ja, muss es. Ich bin erstaunt, wieviele C&P-Fehler man früh um 3 machen kann :D

es soll dir vergeben sein :)

Zitat von: Per am 16 April 2017, 10:46:55
Der Trick ist, dass das "BeregnungMappingDOIF" den Status "on" hat, das "BeregnungTriggerDOIF" aufruft, dort dieser Status abgefragt wird und nach Ablauf der Zeit das Ganze mit "off" wiederholt wird.

Jo, aber weil du meintest, dass

Zitat von: Per am 15 April 2017, 23:44:41
Beim ok, aber falls zwischendurch der Status in "on" geändert wird, wird es dann ausgeschaltet.

wenn man was auf on stellt wird was ausgeschaltet? Das kann ich noch nicht nachvollziehen. Oder anders gesagt, was könnte sich zwischendurch auf "on" ändern? Immer noch kompliziert ;) ... Vollschlauch. Oder ich habs immer noch nicht verstanden, wer was triggert

attr BeregnungTriggerDOIF cmdState \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
end,on,off| \
off


Das macht Sinn? weil anders als im "Original"

Guten (späten) Morgen!
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 16 April 2017, 11:58:28
Zitat von: holle75 am 16 April 2017, 11:23:49Jo, aber weil du meintest, dass

wenn man was auf on stellt wird was ausgeschaltet? Das kann ich noch nicht nachvollziehen. Oder anders gesagt, was könnte sich zwischendurch auf "on" ändern?
Achso, das bezog sich auf die Dummys:
attr Beregnung_Zitronen webCmd auto:on:off


Zitat von: holle75 am 16 April 2017, 11:23:49
attr BeregnungTriggerDOIF cmdState \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
end,on,off| \
off


Das macht Sinn? weil anders als im "Original"
Probiers aus. Wichtig ist nur, dass zum Zeitpunkt der Ausführung des "BeregnungTriggerDOIF" die richtigen Status vorliegen. Falls nicht, entweder cmdState vom "Mapping" oder IF vom "Trigger" anpassen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 16 April 2017, 12:51:51
Zitat von: Per am 16 April 2017, 11:58:28
Achso, das bezog sich auf die Dummys:
attr Beregnung_Zitronen webCmd auto:on:off

Ah ok ....

Zitat von: Per am 16 April 2017, 11:58:28
Probiers aus.

Jo, werd ich. Wenn verstanden und ich all die Mechanik die da dran hängt dann nur noch 20x und nicht 200x malträtieren muß :D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 16 April 2017, 12:57:02
Kannst ja Dummys ansteuern. Die kosten nix, falls mal eins kaputt geht ;D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 16 April 2017, 13:58:18
das war ein schöner :D

Also jetzt mal

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([$EVENT] eq "auto") \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
) \
)


ausprobiert. Da wird nichts an oder ausgeschaltet.

Wenn ich manuell einen Beregner starte, sagt mir der Player "gestartet" ohne Variable.

und den Fehler

DOIF BeregnungMappingDOIF error: set  on: Please define on first

da fehlt der $DEVICE oder $EVENT

Scheint fhem hat die selben Verständnisprobleme wie ich :D .... woher kommt $DEVICE und $EVENT

wenn ich BeregnungDurchlauf_AN_AUS_AUTO auf "on" stelle bekomme ich das als events:

2017-04-16 13:50:45 dummy Beregner_CampeggioOben auto
2017-04-16 13:50:46 dummy Beregner_CampeggioUnten auto
2017-04-16 13:50:48 dummy Beregner_HinterKueche auto
2017-04-16 13:50:49 dummy Beregner_Waschhaus auto
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_nr: 1
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_seqnr: 1
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd: 1.1
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF skip
2017-04-16 13:50:53 dummy BeregnungHelperDummy Beregner_Zitronen
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_nr: 1
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_seqnr: 2
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd: 1.2
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF on
2017-04-16 13:50:53 DOIF BeregnungTriggerDOIF wait_timer: 16.04.2017 13:55:53 cmd_1_3 BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 13:50:53 dummy BeregnungDurchlauf_AN_AUS_AUTO on


bei "off":

2017-04-16 13:51:57 DOIF BeregnungTriggerDOIF wait_timer: no timer
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_Zitronen
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_CampeggioUnten
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_Blauregen
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_HinterKueche
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_CampeggioOben
2017-04-16 13:51:58 dummy BeregnungHelperDummy Beregner_Waschhaus
2017-04-16 13:51:58 SB_PLAYER SqueezeBoxPlayer_Raspi_2 talk Durchlauf Beregnung beendet
2017-04-16 13:51:58 SB_PLAYER SqueezeBoxPlayer_ZirkusOben talk Durchlauf Beregnung beendet
2017-04-16 13:51:58 DOIF BeregnungTriggerDOIF cmd_nr: 7
2017-04-16 13:51:58 DOIF BeregnungTriggerDOIF cmd: 7
2017-04-16 13:51:58 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 13:51:58 DOIF BeregnungTriggerDOIF    off
2017-04-16 13:51:58 dummy BeregnungDurchlauf_AN_AUS_AUTO off
2017-04-16 13:51:58 SB_PLAYER SqueezeBoxPlayer_NUC currentTitle: http://api.voicerss.org/?&src=Durchlauf+Beregnung+beendet.&hl=de-de&f=48khz_16bit_stereo


vom Gefühl scheint da schon einiges zu funktionieren ... außer dieser verflixten $DEVICE und $EVENT Geschichte. Wie gesagt Kompliziert :D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 16 April 2017, 15:52:20
Zitat von: holle75 am 16 April 2017, 13:58:18außer dieser verflixten $DEVICE und $EVENT Geschichte.
Lass mal die eckigen Klammern drum rum weg!
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 16 April 2017, 18:47:01
Ich habs mit und ohne Klammern probiert. 

ohne

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set $DEVICE:switch on, set SqueezeBoxPlayer.* talk $DEVICE:talktext gestartet) \
DOELSEIF (["Beregner_:off"]) (set $DEVICE:switch off, set SqueezeBoxPlayer.* talk $DEVICE:talktext beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ($EVENT eq "auto") \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set $EVENT:switch on, set SqueezeBoxPlayer.* talk $EVENT:talktext gestartet) \
ELSE \
(set $EVENT:switch off, set SqueezeBoxPlayer.* talk $EVENT:talktext beendet) \
) \
)


hängts mir fhem nach ein paar Minuten auf.


On/off funktioniert für die Beregner direkt (das lag übrigens an falschen Attr bei den Dummies - shame on me), aber unzuverlässig. Sprich mal ja, mal nicht (seltsam)

und (sehr) häufig sowas im fhem-log

2017.04.16 18:19:53 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at (eval 342) line 1.
2017.04.16 18:20:06 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at (eval 350) line 1.
2017.04.16 18:20:07 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at (eval 359) line 1.
2017.04.16 18:20:21 1: PERL WARNING: Use of uninitialized value in numeric gt (>) at (eval 371) line 1.


BeregnungDurchlauf_AN_AUS_AUTO auf "on" verursacht das im Event-Monitor

2017-04-16 18:36:29 dummy Beregner_Blauregen off
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_nr: 1
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_seqnr: 1
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd: 1.1
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF skip
2017-04-16 18:40:03 dummy BeregnungHelperDummy Beregner_Zitronen
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_nr: 1
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_seqnr: 2
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd: 1.2
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF cmd_event: BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF on
2017-04-16 18:40:03 DOIF BeregnungTriggerDOIF wait_timer: 16.04.2017 18:44:03 cmd_1_3 BeregnungDurchlauf_AN_AUS_AUTO
2017-04-16 18:40:03 dummy BeregnungDurchlauf_AN_AUS_AUTO on


schaltet aber keinen Beregner an.


DOIF.pm ist aktuell
fhem ist 5.7

daran sollte es nicht liegen?

Mmh, weiß jetzt gerade nicht wo ich ansetzen soll.


######################################## BEREGNUNG ############################################

define myTwilight Twilight
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#------------------------ Beregner Dummys ---------------------------#

define Beregner_Zitronen dummy
attr Beregner_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Zitronen group Beregnung
attr Beregner_Zitronen room Beregnung
attr Beregner_Zitronen webCmd auto:on:off
attr Beregner_Zitronen readingList talktext,switch
set Beregner_Zitronen talktext Beregnung Zitronen
set Beregner_Zitronen switch BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14

define Beregner_CampeggioOben dummy
attr Beregner_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_CampeggioOben group Beregnung
attr Beregner_CampeggioOben room Beregnung
attr Beregner_CampeggioOben webCmd auto:on:off
attr Beregner_CampeggioOben readingList talktext,switch
set Beregner_CampeggioOben talktext Beregnung Camping oben
set Beregner_CampeggioOben switch BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13

define Beregner_CampeggioUnten dummy
attr Beregner_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_CampeggioUnten group Beregnung
attr Beregner_CampeggioUnten room Beregnung
attr Beregner_CampeggioUnten webCmd auto:on:off
attr Beregner_CampeggioUnten readingList talktext,switch
set Beregner_CampeggioUnten talktext Beregnung Camping unten
set Beregner_CampeggioUnten switch BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_Blauregen dummy
attr Beregner_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Blauregen group Beregnung
attr Beregner_Blauregen room Beregnung
attr Beregner_Blauregen webCmd auto:on:off
attr Beregner_Blauregen readingList talktext,switch
set Beregner_Blauregen talktext Beregnung Blauregen
set Beregner_Blauregen switch BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17

define Beregner_HinterKueche dummy
attr Beregner_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_HinterKueche group Beregnung
attr Beregner_HinterKueche room Beregnung
attr Beregner_HinterKueche webCmd auto:on:off
attr Beregner_HinterKueche readingList talktext,switch
set Beregner_HinterKueche talktext Beregnung Hinter Kueche
set Beregner_HinterKueche switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15

define Beregner_Waschhaus dummy
attr Beregner_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_Waschhaus group Beregnung
attr Beregner_Waschhaus room Beregnung
attr Beregner_Waschhaus webCmd auto:on:off
attr Beregner_Waschhaus readingList talktext,switch
set Beregner_Waschhaus talktext Beregnung Waschhaus
set Beregner_Waschhaus switch BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16

#------------------------ Einstellungs Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat group Beregnung
attr BeregnungStartmonat room Beregnung
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat group Beregnung
attr BeregnungEndmonat room Beregnung
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer group Beregnung
attr BeregnungStandarddauer room Beregnung
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation group Beregnung
attr BeregnungStartelevation room Beregnung
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungHelperDummy dummy
attr BeregnungHelperDummy group Beregnung
attr BeregnungHelperDummy room Beregnung

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO group Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO room Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnungs Logik -----------------------------#

define BeregnungNachSonneDOIF DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungNachSonneDOIF group Beregnung
attr BeregnungNachSonneDOIF room Beregnung

define BeregnungMappingDOIF DOIF (["Beregner_:on"]) (set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:off"]) (set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["BeregnungHelperDummy"]) \
(IF ([$EVENT] eq "auto") \
(IF ([BeregnungTriggerDOIF] eq "on") \
(set [$EVENT:switch] on, set SqueezeBoxPlayer.* talk [$EVENT:talktext] gestartet) \
ELSE \
(set [$EVENT:switch] off, set SqueezeBoxPlayer.* talk [$EVENT:talktext] beendet) \
) \
)
attr BeregnungMappingDOIF group Beregnung
attr BeregnungMappingDOIF room Beregnung


define BeregnungTriggerDOIF DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungNachSonneDOIF] eq "cmd_1")) \
(IF ([Beregner_Zitronen] != "auto") (set $SELF cmd_2)) (set BeregnungHelperDummy Beregner_Zitronen) (set BeregnungHelperDummy Beregner_Zitronen, set $SELF cmd_2) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioUnten] != "auto") (set $SELF cmd_3)) (set BeregnungHelperDummy Beregner_CampeggioUnten) (set BeregnungHelperDummy Beregner_CampeggioUnten, set $SELF cmd_3) \
DOELSEIF (0) \
(IF ([Beregner_Blauregen] != "auto") (set $SELF cmd_4)) (set BeregnungHelperDummy Beregner_Blauregen) (set BeregnungHelperDummy Beregner_Blauregen, set $SELF cmd_4) \
DOELSEIF (0) \
(IF ([Beregner_HinterKueche] != "auto") (set $SELF cmd_5)) (set BeregnungHelperDummy Beregner_HinterKueche) (set BeregnungHelperDummy Beregner_HinterKueche, set $SELF cmd_5) \
DOELSEIF (0) \
(IF ([Beregner_CampeggioOben] != "auto") (set $SELF cmd_6)) (set BeregnungHelperDummy Beregner_CampeggioOben) (set BeregnungHelperDummy Beregner_CampeggioOben, set $SELF cmd_6) \
DOELSEIF (0) \
(IF ([Beregner_Waschhaus] != "auto") (set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)) (set BeregnungHelperDummy Beregner_Waschhaus) (set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungHelperDummy Beregner_Zitronen, set BeregnungHelperDummy Beregner_CampeggioUnten, set BeregnungHelperDummy Beregner_Blauregen, set BeregnungHelperDummy Beregner_HinterKueche, set BeregnungHelperDummy Beregner_CampeggioOben, set BeregnungHelperDummy Beregner_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)
attr BeregnungTriggerDOIF wait \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0,0,[BeregnungStandarddauer:state]*60: \
0
attr BeregnungTriggerDOIF cmdState \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
skip,on,off| \
end,on,off| \
off
attr BeregnungTriggerDOIF group Beregnung
attr BeregnungTriggerDOIF room Beregnung

Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 17 April 2017, 00:31:00
Habe es mal mit Dummies zum Laufen gebracht, mache morgen mal nen Diff (sonst schleichen sich wieder viele Fehler rein ;)).
Nur die
IF([xxx] ne "auto")(set $SELF cmd_x)
tuns nicht, teste ich gerade noch.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 17 April 2017, 15:10:52
Habe aufs Diff verzichtet, habe es doch zu sehr umgeschrieben:

######################################## BEREGNUNG ############################################

define myTwilight Twilight
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#------------------------ Beregner Dummys ---------------------------#

define BEREGNUNG_SCHALTER_01_Zitronen_12_7_MEQ0064131_14 dummy
define BEREGNUNG_SCHALTER_05_CampeggioOben_12_7_MEQ0064131_13 dummy
define BEREGNUNG_SCHALTER_02_CampeggioUnten_12_7_MEQ0064131_18 dummy
define BEREGNUNG_SCHALTER_03_Blauregen_12_7_MEQ0064131_17 dummy
define BEREGNUNG_SCHALTER_04_HinterKueche_12_7_MEQ0064131_15 dummy
define BEREGNUNG_SCHALTER_06_Waschhaus_12_7_MEQ0064131_16 dummy

define Beregner_01_Zitronen dummy
attr Beregner_01_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_01_Zitronen webCmd auto:on:off
attr Beregner_01_Zitronen readingList talktext,switch
set Beregner_01_Zitronen talktext Beregnung Zitronen
set Beregner_01_Zitronen switch BEREGNUNG_SCHALTER_01_Zitronen_12_7_MEQ0064131_14

define Beregner_05_CampeggioOben dummy
attr Beregner_05_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_05_CampeggioOben webCmd auto:on:off
attr Beregner_05_CampeggioOben readingList talktext,switch
set Beregner_05_CampeggioOben talktext Beregnung Camping oben
set Beregner_05_CampeggioOben switch BEREGNUNG_SCHALTER_05_CampeggioOben_12_7_MEQ0064131_13

define Beregner_02_CampeggioUnten dummy
attr Beregner_02_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_02_CampeggioUnten webCmd auto:on:off
attr Beregner_02_CampeggioUnten readingList talktext,switch
set Beregner_02_CampeggioUnten talktext Beregnung Camping unten
set Beregner_02_CampeggioUnten switch BEREGNUNG_SCHALTER_02_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_03_Blauregen dummy
attr Beregner_03_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_03_Blauregen webCmd auto:on:off
attr Beregner_03_Blauregen readingList talktext,switch
set Beregner_03_Blauregen talktext Beregnung Blauregen
set Beregner_03_Blauregen switch BEREGNUNG_SCHALTER_03_Blauregen_12_7_MEQ0064131_17

define Beregner_04_HinterKueche dummy
attr Beregner_04_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_04_HinterKueche webCmd auto:on:off
attr Beregner_04_HinterKueche readingList talktext,switch
set Beregner_04_HinterKueche talktext Beregnung Hinter Kueche
set Beregner_04_HinterKueche switch BEREGNUNG_SCHALTER_04_HinterKueche_12_7_MEQ0064131_15

define Beregner_06_Waschhaus dummy
attr Beregner_06_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_06_Waschhaus webCmd auto:on:off
attr Beregner_06_Waschhaus readingList talktext,switch
set Beregner_06_Waschhaus talktext Beregnung Waschhaus
set Beregner_06_Waschhaus switch BEREGNUNG_SCHALTER_06_Waschhaus_12_7_MEQ0064131_16

#------------------------ Einstellungs Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungDummy_Helper dummy

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnungs Logik -----------------------------#

define BeregnungDOIF_NachSonne DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"])
(set [$DEVICE:switch] on)
DOELSEIF (["Beregner_:off"])
(set [$DEVICE:switch] off)
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] == 2) \
(set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])

attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|6*[BeregnungStandarddauer]|0|0

defmod BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1"))
()
()
(set $SELF cmd_2)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_01_Zitronen)
(set BeregnungDummy_Helper Beregner_01_Zitronen)
(set $SELF cmd_3)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten)
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten)
(set $SELF cmd_4)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_03_Blauregen)
(set BeregnungDummy_Helper Beregner_03_Blauregen)
(set $SELF cmd_5)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_04_HinterKueche)
(set BeregnungDummy_Helper Beregner_04_HinterKueche)
(set $SELF cmd_6)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_05_CampeggioOben)
(set BeregnungDummy_Helper Beregner_05_CampeggioOben)
(set $SELF cmd_7)
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_06_Waschhaus)
(set BeregnungDummy_Helper Beregner_06_Waschhaus)
()
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off")
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus)

attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0

attr .*Beregnung.* group Beregnung
attr .*BEREGNUNG.* group Beregnung
attr .*Beregner.* group Beregnung
attr .*BEREGNUNG.* room Beregnung
attr .*Beregnung.* room Beregnung
attr .*Beregner.* room Beregnung


Die Sprachausgabe muss wieder rein, die habe ich komplett entfernt, da bei mir nicht vorhanden (ok, ich hätte nen Dummy draus machen können, beim nächsten Mal!).
Die Variablennamen habe ich auch gedreht, sieht im Browser besser aus. Ansonsten habe ich den Code vereinfacht, ich hoffe, du findest dich jetzt besser rein, obwohl manches etwas komisch aussieht (z.B. zwei leere Befehlsgruppen im ersten Zweig von BeregnungDOIF_Trigger), aber das ist dem Call-Konzept (https://forum.fhem.de/index.php/topic,66153.msg621599.html#msg621599) von set $SELF cmd_x geschuldet.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 17 April 2017, 19:00:35
Hello Per, top .... bin ab morgen für 1-2 Wochen unterwegs. Danach werde ich deinen Code am lebenden Objekt probieren und mich natürlich melden.

Danke!

H.

ps. Hauptsache die IF Geschichte ist raus !!!!!!! :D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 19 April 2017, 15:27:03
Hallo Per, gerade ein bißchen Zeit für Trockenübungen.

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"]) \
(set [$DEVICE:switch] on) \
DOELSEIF (["Beregner_:off"]) \
(set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] == 2) \
(set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])


müßte es nicht

DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "1")

sein? Zum einen Sequenz 1 und eq und Anführungszeichen....... seqnr als numerischer Wert wirft bei mir Fehler im fhem-log  (noch nicht probiert, aber in einem anderen DOIF). Bei dir nicht?

Warum 2? Müßte doch die erste Klammer von BeregnungDOIF_Trigger auf on gehen und die zweite auf off?

-------------------------------------------

defmod BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1"))


wieso defmod? gibts da was was noch nicht existiert?

------------------------------------------------------

attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0

und
attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|60*[BeregnungStandarddauer]|0|0

erschließt sich mir auf den ersten Blick nicht :D .... also versteh ich das Zusammenspiel nicht.... resp. was ist der Vorteil in BeregnungDOIF_Trigger auf den cmdstate von BeregnungDOIF_Mapping zuzugreifen und nicht direkt anzugeben? Was würde cmdState [$self] ergeben?

Müßte hier dann nicht auch das 60*[BeregnungStandarddauer] an 4ter Stelle anstatt 3ter sein?

Kompliziert! ... was du dir da ausgedacht hast :)

Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 19 April 2017, 15:40:00
Also mal ohne Zitate:
Die Sub sind Zahlen und durch Tests (nicht Überlegung ;)) ermittelt.
defmod kommt, weil ich den Code aus dem raw-Feld der GUI gezogen habe und mir der eine (oder sind es mehr?) durch die Lappen gegangen ist.
Um nicht jedes Mal [BeregnungStandarddauer]*60 eintragen zu müssen bzw. eigentlich noch ein "wenn auto, dann [BeregnungStandarddauer]*60, sonst 0" in das wait-Attribut eintragen zu müssen, habe ich das in die ohnehin vorhandene Abfrage mit reingebracht. Hatte auch den Vorteil, wenn man testet, schreibt man einfach statt der 60 nur 6 und muss nicht ewig warten.
Und an dritter Stelle past, ist ja das zweite DOELSEIF.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 19 April 2017, 15:50:37
ok, werd ich auch mal mehr Ermitteln bevor ich versuche zu Überlegen :D ... hat nur gerade Lust auf Kopf bewegen.
Ist nur doof, wenn Ermitteltes beim Nachvollziehen wollen nicht mit dem Überlegten übereinstimmt ;)

Also ich schau dann in 1-2 Wochen.

Ach so, cmdState [$self] würd mich jetzt aber doch noch interessieren was man da bekommt?
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 19 April 2017, 16:13:02
Zitat von: holle75 am 19 April 2017, 15:50:37cmdState [$self] würd mich jetzt aber doch noch interessieren was man da bekommt?
Wahrscheinlich nur Unfug, muss
attr BeregnungDOIF_Mapping cmdState [$SELF]|[$SELF]|6*[BeregnungStandarddauer]|0|0
heißen und bedeutet nix weiter, als dass der Status beibehalten wird.
Ist aber nur sicherheitshalber, falls der unwahrscheinliche Fall eintritt, dass zwischen der Abfrage und der Ausführung jemand in der 100 Sekunde einen Regner manuell ein- oder ausschaltet.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 19 April 2017, 16:22:59
Zitat von: Per am 19 April 2017, 16:13:02
und bedeutet nix weiter, als dass der Status beibehalten wird.

ho capito
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 09:31:09
Hallo Per, hab mir jetzt mal unterwegs ein Testsystem aufgebaut. Jungfräulich.

Wir haben ein Phänomen!

Durchlauf on off auto funktioniert ganz gut.

Beregner einzeln schalten on off (direkt nacheinander) funktioniert auch prima.

und jetzt kommts (und da wo man keinerei Probleme vermutet): Schalte mal einen Beregner auf on und dann noch einen Beregner auf on und dann den ersten auf off...... oder einfach mal queerbeet on und off. Da geht dann nichts mehr.

Im Event Monitor kommt der Event, aber BeregnungDOIF_Mapping ignoriert diesen einfach ?????!

Idee? Ich mein, was gibts bei

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"]) \
(set [$DEVICE:switch] on) \
DOELSEIF (["Beregner_:off"]) \
(set [$DEVICE:switch] off) \


fehlzuinterpretieren ? :D ... "merkt" sich fhem den $DEVICE ??

neuester raspi
neuestes fhem
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 27 April 2017, 09:46:39
Komisch, bei mir gehts. Sogar im "Live-System". Mit und ohne gleichzeitiger Automatik. Aber halt mit Dummies. Mangels echten Beregnern.

1. BeregnungDOIF_Mapping mit do always versehen.
2. BeregnungDOIF_Mapping teilen.
Ersteres fehlte, zweiteres zum Testen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 09:52:54
noch phänomenaler, weil ich habs ja jetzt eins zu eins mit deinem Code im Testsystem auch ohne Hardware.

mmh, welche DOIF Version hast du?

Meine .... $Id: 98_DOIF.pm 14088 2017-04-23 17:59:06Z Damian $#

und nochmal der Code

define myTwilight Twilight
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#------------------------ Beregner Dummys ---------------------------#

define BEREGNUNG_SCHALTER_01_Zitronen_12_7_MEQ0064131_14 dummy
define BEREGNUNG_SCHALTER_05_CampeggioOben_12_7_MEQ0064131_13 dummy
define BEREGNUNG_SCHALTER_02_CampeggioUnten_12_7_MEQ0064131_18 dummy
define BEREGNUNG_SCHALTER_03_Blauregen_12_7_MEQ0064131_17 dummy
define BEREGNUNG_SCHALTER_04_HinterKueche_12_7_MEQ0064131_15 dummy
define BEREGNUNG_SCHALTER_06_Waschhaus_12_7_MEQ0064131_16 dummy

define Beregner_01_Zitronen dummy
attr Beregner_01_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_01_Zitronen webCmd auto:on:off
attr Beregner_01_Zitronen readingList talktext,switch
set Beregner_01_Zitronen talktext Beregnung Zitronen
set Beregner_01_Zitronen switch BEREGNUNG_SCHALTER_01_Zitronen_12_7_MEQ0064131_14

define Beregner_05_CampeggioOben dummy
attr Beregner_05_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_05_CampeggioOben webCmd auto:on:off
attr Beregner_05_CampeggioOben readingList talktext,switch
set Beregner_05_CampeggioOben talktext Beregnung Camping oben
set Beregner_05_CampeggioOben switch BEREGNUNG_SCHALTER_05_CampeggioOben_12_7_MEQ0064131_13

define Beregner_02_CampeggioUnten dummy
attr Beregner_02_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_02_CampeggioUnten webCmd auto:on:off
attr Beregner_02_CampeggioUnten readingList talktext,switch
set Beregner_02_CampeggioUnten talktext Beregnung Camping unten
set Beregner_02_CampeggioUnten switch BEREGNUNG_SCHALTER_02_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_03_Blauregen dummy
attr Beregner_03_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_03_Blauregen webCmd auto:on:off
attr Beregner_03_Blauregen readingList talktext,switch
set Beregner_03_Blauregen talktext Beregnung Blauregen
set Beregner_03_Blauregen switch BEREGNUNG_SCHALTER_03_Blauregen_12_7_MEQ0064131_17

define Beregner_04_HinterKueche dummy
attr Beregner_04_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_04_HinterKueche webCmd auto:on:off
attr Beregner_04_HinterKueche readingList talktext,switch
set Beregner_04_HinterKueche talktext Beregnung Hinter Kueche
set Beregner_04_HinterKueche switch BEREGNUNG_SCHALTER_04_HinterKueche_12_7_MEQ0064131_15

define Beregner_06_Waschhaus dummy
attr Beregner_06_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_06_Waschhaus webCmd auto:on:off
attr Beregner_06_Waschhaus readingList talktext,switch
set Beregner_06_Waschhaus talktext Beregnung Waschhaus
set Beregner_06_Waschhaus switch BEREGNUNG_SCHALTER_06_Waschhaus_12_7_MEQ0064131_16

#------------------------ Einstellungs Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungDummy_Helper dummy

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnungs Logik -----------------------------#

define BeregnungDOIF_NachSonne DOIF ([?Wetter_wunderground:statRegenDayMax] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"]) \
(set [$DEVICE:switch] on) \
DOELSEIF (["Beregner_:off"]) \
(set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] == 2) \
(set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])

attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|6*[BeregnungStandarddauer]|0|0

defmod BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set $SELF cmd_2) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_01_Zitronen) \
(set BeregnungDummy_Helper Beregner_01_Zitronen) \
(set $SELF cmd_3) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten) \
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten) \
(set $SELF cmd_4) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_03_Blauregen) \
(set BeregnungDummy_Helper Beregner_03_Blauregen) \
(set $SELF cmd_5) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_04_HinterKueche) \
(set BeregnungDummy_Helper Beregner_04_HinterKueche) \
(set $SELF cmd_6) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_05_CampeggioOben) \
(set BeregnungDummy_Helper Beregner_05_CampeggioOben) \
(set $SELF cmd_7) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_06_Waschhaus) \
(set BeregnungDummy_Helper Beregner_06_Waschhaus) \
() \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus)

attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0

attr .*Beregnung.* group Beregnung
attr .*BEREGNUNG.* group Beregnung
attr .*Beregner.* group Beregnung
attr .*BEREGNUNG.* room Beregnung
attr .*Beregnung.* room Beregnung
attr .*Beregner.* room Beregnung
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 10:05:48
ok, es war das do always ......

wenn man nachdenkt auch logisch :D

teste weiter
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 10:35:39
Per, wo du gerade da bist ;)

ich versuche auch noch die ZisternenPumpe sobald irgendein Beregner oder die Automatik läuft an/auszuschalten. Abhängig davon, ob sie manuell an ist.

Im Moment habe ich das hier, aber das will nicht so recht.

define BeregnungDOIF_PumpeCisterna DOIF (([BeregnungDOIF_Mapping:"cmd_1"] or [BeregnungDOIF_Trigger] eq "cmd_1") and [BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off") (set BEREGNUNG_SCHALTER_DUMMY_PUMPE on, set $SELF selbstangeschaltet 1) \
DOELSEIF (([BeregnungDOIF_Mapping:"cmd_2"] or [BeregnungDOIF_Trigger:"cmd_7_3|cmd_8"]) and [?$SELF:selbstangeschaltet] == 1) (set BEREGNUNG_SCHALTER_DUMMY_PUMPE off, set $SELF selbstangeschaltet 0)

attr BeregnungDOIF_PumpeCisterna readingList selbstangeschaltet
attr BeregnungDOIF_PumpeCisterna wait 0:10


finde keine andere Abfragelogik und die cmd´s sind komplex. Vor allem da der state bei set $SELF nicht angepast wird.

Bessere Idee?
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 27 April 2017, 10:55:00
Bin etwas in Eile, schau ich mir später an.

Aber schön, dass der Rest geht. Zisterne ist easy, zumal mit den neuen Aggregatsfunktionen. Alternativ ne ReadingsGroup (https://fhem.de/commandref.html#readingsGroup).
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 27 April 2017, 12:02:21
Ich glaube, ich hatte deine Anfrage falsch verstanden.
Die Zisternenpumpe soll angeschaltet werden, falls sie aus ist, aber an bleiben, falls sie manuell angeschaltet war. Sonst wieder aus gehen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 12:15:26
genau .... das DOIF soll unabhängig vom Zustand davor, falls Beregnung, dafür sorgen, dass die Pumpe an ist. Und danach wieder den Zustand von davor herstellen.

Also wenn aus -> für Beregnung an -> wieder aus
Wenn an -> gar nix tun (anlassen)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 27 April 2017, 12:56:12
Na toll, jetzt hat es mir den Text zerschossen  :'(
Also nochmal, aber kürzer:

define BeregnungDOIF_PumpeCisterna DOIF (([#:"^BEREGNUNG_SCHALTER_0":state:"on","off"] != 0)
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE on) \
DOELSE
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE off)
attr BeregnungDOIF_PumpeCisterna wait 0:10


Und dazu ein
define BEREGNUNG_SCHALTER_00_Cisterna dummy
mit den üblichen on/off zum manuellen Einschalten.

Dein Beispiel hätte des selbstangeschaltet nicht bedurft, mangels do always hätte es eh nicht anders gekonnt ;).
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 13:23:28
Uuuh, da brauch ich jetzt mal wieder ein paar Stunden ..... :D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 27 April 2017, 13:34:11
Ist doch easy: wenn mehr als 0 "BEREGNUNG_SCHALTER_0" an sind, geht auch die Zisternenpumpe an, sonst geht sie mit 10 Sekunden Nachlauf wieder aus.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 16:37:22
... und wie könnte ich das ohne Extra Dummy (BEREGNUNG_SCHALTER_00_Cisterna dummy) für den Schalter machen (die Pumpe muß anders heißen)? Die Pumpe müßte ich leider, resp optimalerweise, direkt schalten können ohne Dummy dazwischen. Oder ich mach eine STRUCTURE die dann den state von meiner Pumpe einnimmt.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 16:48:40
... aber sonst natürlich völlig logisch auf einen laufenden Beregner abzufragen :D

wieso kommt mir sowas nicht? Hatte einen ähnlichen Ansatz am Anfang, .... verworfen weil ich irgendwie Angst hatte, dass dann die Pumpe wenn es von einem Beregner zum nächsten geht immer kurz (Millisekunden, aber Hardware würde bewegt) ausschaltet. Aber das ist ja mit dem wait abgefangen ..... das ich allerdings aus einem anderen Grund jetzt drin hatte ;)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 27 April 2017, 16:55:53
Ich (!) würde es hiermit (https://forum.fhem.de/index.php?topic=52225.0) machen ;).

Aber für deinen Zweck "oversized". Geht auch mit dem DOIF, hatte ich schonmal gemacht, aber verworfen, weil ich o.a. Modul eh im Einsatz habe. Mal sehen ob ich das wiederfinde.
Wird aber nix in den nächsten Stunden. Evtl. morgen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 17:02:57
ich probier mal weiter, aber/und warte sonst gern auf morgen. Will nicht noch eine syntax für ein Modul lernen. Du forderst mich hier schon genug ;)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 17:53:44
.... habs jetzt mal mit einer structure gemacht. Die nennt sich

define BEREGNUNG_SCHALTER_00_PumpeCisternaStructure structure room BEREGNUNG_SCHALTER_DUMMY_PUMPE
attr BEREGNUNG_SCHALTER_00_PumpeCisternaStructure clientstate_behavior last


(BEREGNUNG_SCHALTER_DUMMY_PUMPE wird später der direkte Schalter der Pumpe)

nur jetzt denke ich einen Fehler in der Logik gefunden zu haben.

Wenn

define BeregnungDOIF_PumpeCisterna DOIF (([#:"^BEREGNUNG_SCHALTER_0":state:"on","off"] != 0)
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE on) \


die Pumpe angeschaltet hat, kann ja der DOELSEIF -Fall nicht eintreten, weil BEREGNUNG_SCHALTER_00_PumpeCisternaStructure (oder auch direkt ein dummy) Fall 1 nicht == 0 werden lassen wird.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 27 April 2017, 18:59:13
Hiermit gehts FAST und löst auch das Pumpen Dummy Problem

define BeregnungDOIF_PumpeCisterna DOIF ([#:"^BEREGNUNG_SCHALTER_0":state:"on","off"] != 0 and [BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off") (set BEREGNUNG_SCHALTER_DUMMY_PUMPE on) \
DOELSE (set BEREGNUNG_SCHALTER_DUMMY_PUMPE off)

attr BeregnungDOIF_PumpeCisterna wait 0:[BeregnungDOIF_Mapping]+10


aber ...... [BeregnungDOIF_Mapping]+10 brauchts, weil er sonst im Auto-Durchlauf genau die Zeit vor dem letzten Beregner die Pumpe ausmacht.

Das wäre so gelöst, aber wenn man Einzelberegner anschaltet, geht das mit dem Ersten. Sobald man den zweiten dazuschaltet geht die Pumpe nach 10 sekunden aus. Da ich deine Syntax  [#:"^BEREGNUNG_SCHALTER_0":state:"on","off"] != 0 nicht im Detail verstehe habe ich so weitergespielt:

define BeregnungDOIF_PumpeCisterna DOIF ([#:"^BEREGNUNG_SCHALTER_0":state:"on","off"] != 0 and [BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off") (set BEREGNUNG_SCHALTER_DUMMY_PUMPE on) \
DOELSEIF ([#:"^BEREGNUNG_SCHALTER_0":state:"on","off"] == 0) (set BEREGNUNG_SCHALTER_DUMMY_PUMPE off)


Das scheint zu funktionieren, aber so ganz verstehen, naja ......

und ich bekomme das im log

Argument "off" isn't numeric in numeric ne (!=)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 28 April 2017, 01:46:06
Also, ich sitz jetzt seit  2 Stunden vor dieser Zeile:

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_0":state:"off"] != 0 and [?BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off") (set BEREGNUNG_SCHALTER_DUMMY_PUMPE on) \
DOELSE (set BEREGNUNG_SCHALTER_DUMMY_PUMPE off)

attr BeregnungDOIF_PumpeCisterna wait 0:6*[BeregnungStandarddauer]+10


und egal was ich mit

[#"^BEREGNUNG_SCHALTER_0":state:"off"] != 0

mache, es funktioniert einfach nicht.

Laut commandref, so habe ich es verstanden, sollte obige Zeile alle Devices die mit  BEREGNUNG_SCHALTER_0 anfangen durchzählen und mir einen Zahlenwert zurückgeben über die Anzahl dieser Devices mit state off.... und ich habe jetzt sicherlich 100 Varianten durch. Inkl ohne and [?BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off" und attr do always, Default-Wert, und, und, und.  Manchmal funktionierts , bei einer anderen Auto-Auswahl von Beregnern dann aber doch wieder nicht. Hab da noch keine Logik erkennen können.

Ein Wunder, dass der neue Raspi noch lebt im Moment.

Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Damian am 28 April 2017, 10:30:46
Die Syntax ist korrekt.

Du kannst das mal testen mit:

define di_test DOIF(1)(set bla [#"^BEREGNUNG_SCHALTER_0":state:"off"])

mit set di_test cmd_1 wird set bla ausgeführt und liefert einen Fehler da bla normalerweise nicht da ist. In der Fehlermeldung ist aber das Ergebnis, hier die Anzahl der Devices sichtbar.

Mit [@"^BEREGNUNG_SCHALTER_0":state:"off"] kannst du dagegen dir die Devices selbst ausgeben lassen.

Voraussetzung ist natürlich die aktuelle Version von DOIF.

Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 28 April 2017, 13:11:13
define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_0":state:"off"] != 0 or [?$SELF:manu] eq "on")
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE on)
DOELSIF  ([BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off" and [?$SELF:cmd] <> 4)
(set $SELF manu off)
DOELSIF  ([BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "on" and [?$SELF:cmd] <> 1)
(set $SELF manu on)
DOELSE
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE off)
attr BeregnungDOIF_PumpeCisterna myReadings manu

berücksichtigt externes Schalten der Zisternenpumpe. Voraussetzung ist, dass [#"^BEREGNUNG_SCHALTER_0":state:"off"] geht.

! Habe gerade kein FHEM da, nur mit Notepad geschrieben !
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 28 April 2017, 13:12:30
Hallo Damian. danke für die Bestätigung der Syntax. Hab deinen Code probiert und es wird die korrekte Anzahl angegeben. Da den Fehler ausgeschlossen zu haben stellt die Frage, wo es denn jetzt hängt.  Da die Ergebnisse so willkürlich waren, dachte ich das DOIF verhaspelt sich irgendwo.

Mit einer kleinen Verzögerung in MappingDOIF scheint es jetzt zu funktionieren. Ich bin noch skeptisch :D

define BeregnungDOIF_Mapping DOIF (["Beregner_:on"]) \
(sleep 0.001;;set [$DEVICE:switch] on, sleep 1;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["Beregner_:auto|off"]) \
(sleep 0.001;;set [$DEVICE:switch] off, sleep 1;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] == 2) \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])
attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|6*[BeregnungStandarddauer]|0|0
attr BeregnungDOIF_Mapping do always
attr BeregnungDOIF_Mapping group Beregnung
attr BeregnungDOIF_Mapping room Beregnung


Die Abfrage ob ein Beregner läuft scheint geklärt. Löst aber nicht die ursprüngliche Aufgabe.

Wenn ich ein

and [?BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off"
in
define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_0":state:"off"] != 0 and [?BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off") (set BEREGNUNG_SCHALTER_DUMMY_PUMPE on) \
DOELSE (set BEREGNUNG_SCHALTER_DUMMY_PUMPE off)


einbau, läuft die Pumpe genau bis zum zweiten Beregner, da dann [#"^BEREGNUNG_SCHALTER_0":state:"off"] wieder triggert und da BEREGNUNG_SCHALTER_DUMMY_PUMPE dann nicht mehr off ist, wird DOELSE ausgeführt und die Pumpe abgeschaltet. Pers (Edit: ALTE) Variante stellt da wohl das selbe Problem.

Jemand eine Idee?

Edit: Oh, der Per war schneller! Ich schau gleich drüber. Danke
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 28 April 2017, 13:56:36
Zitat von: holle75 am 28 April 2017, 13:12:30Pers (Edit: ALTE) Variante stellt da wohl das selbe Problem.
Einspruch! Meine Alte (also Variante ;)) hat sich um den echten Status der Pumpe nicht gekümmert, nur um einen Dummy. Aber da waren mir die lokalen Gegebenheiten noch nicht bekannt.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 28 April 2017, 14:07:43
Jo, deine Alte hatte auch nur in Bezug auf die eigentliche Aufgabe ein wenig hinterhergehinkt. Wollte ja nicht sagen, dass deine Alte ein generelles Problem gehabt hätte ! :D

ich bin noch an deiner Neuen .... muß aber erstmal was Essen nach all der Aufregung ;)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 28 April 2017, 14:39:59
Meine Alte ist schon ganz ok so, passt halt nur nicht zu dir  ;D ;D ;D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 28 April 2017, 15:18:05
Vielleicht die Neue ??!  8)

Also, <> schmeißt mir Fehler und myReadings mag DOIF scheinbar auch nicht.

Habs jetzt so probiert:

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_0":state:"off"] != 0 or [?$SELF:manu] eq "on") \
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE on) \
DOELSEIF  ([BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "off" and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  ([BEREGNUNG_SCHALTER_DUMMY_PUMPE] eq "on" and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSE \
(set BEREGNUNG_SCHALTER_DUMMY_PUMPE off)
attr BeregnungDOIF_PumpeCisterna readingList manu


dann wird zwar die Pumpe angeschaltet, aber nicht mehr am Ende ausgeschaltet.

Wenn die Pumpe an war, bleibt sie an. Das hätt ich aber auch alleine hinbekommen  ;D  ;D  ;D

und da ich es wie immer nicht verstehe, was du da gebastelt hast ..... Idee?


Edit: [#"^BEREGNUNG_SCHALTER_0":state:"on"] != 0 did the trick. Man beachte das on statt off. Bin ganz aufgeregt. Ich test mal weiter.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 28 April 2017, 16:09:39
Habe ich das mit dem "off" schon wieder gemacht?!  :-[ :-[ :-[

<> ist in den meisten anderen Programmiersprachen, != bei Perl. Auf dem Notepad gings aber :P

Und versuch es mit myreadings (https://forum.fhem.de/index.php/topic,71000.0.html).
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Damian am 28 April 2017, 16:34:08
Zitat von: Per am 28 April 2017, 16:09:39
Und versuch es mit myreadings (https://forum.fhem.de/index.php/topic,71000.0.html).

myreadings gibt es noch nicht, es ist nur ein Ausblick.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 28 April 2017, 18:02:51
was wäre der Vorteil gegenüber readingList ?

geht ja gerade. Ich test jetzt nochmal ein bißchen, pack das vom Testsystem wenn ich zurück bin in meine große Config, teste dann nochmal ein paar Tage und dann schreib ich hier am Anfang des Threads eine Zusammenfassung.

Wobei das ein bißchen dauern kann, weil ich vom Raspi 2 auf den Raspi 3 dann gleich umziehe, fhem von 5.7 auf 5.8 update, dann wahrscheinlich haareraufend ein paar Tage mit Problemen verbringe und dann erst testen kann.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 28 April 2017, 20:48:03
Zitat von: Damian am 28 April 2017, 16:34:08
myreadings gibt es noch nicht, es ist nur ein Ausblick.
Ups, ok, dann halt ein beliebiges Dummy.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 29 April 2017, 16:52:37
Ich bin begeistert! Es funktioniert sogar mit Sonnenstand. Tausend Dank Per!

wie geschrieben fasse ich das später alles nochmal zusammen wenn eingebaut.

Jetzt hatte ich aber gerade noch eine Idee. Sorry ;)

Ursprünglich habe ich ja, wenn es die Pumpe schafft, Kreise zusammengefasst. Das kann man jetzt im Code auch recht luxuriös immer noch machen.

Was wäre aber, wenn man Kreise zusammenfassen könnte über eine SetList?

Hab mal angefangen, aber natürlich ist das unfertig gedacht: erstens kann man nur 2 Kreise zusammenfassen und wie man die setList dann entsprechend bastelt habe ich mir auch noch keine Gedanken gemacht.

define BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Durchlauf Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_01_Zitronen, IF ([Beregner_01_Zitronen:verbunden] ne "unlinked") (set BeregnungDummy_Helper [Beregner_01_Zitronen:verbunden], set ([Beregner_01_Zitronen:verbunden]:gelaufen) gelaufen) ) \
(set BeregnungDummy_Helper Beregner_01_Zitronen, IF ([Beregner_01_Zitronen:verbunden] ne "unlinked") set BeregnungDummy_Helper [Beregner_01_Zitronen:verbunden] ) \
(set $SELF cmd_3) \
DOELSEIF (0) \
(IF ([Beregner_02_CampeggioUnten:gelaufen] ne "gelaufen") (set BeregnungDummy_Helper Beregner_02_CampeggioUnten) )\
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten) \
(set $SELF cmd_4) \

usw.....


aber ich bin jetzt schon völlig glücklich wenns dir mit den Gedankenspielen reicht! ....
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 29 April 2017, 17:04:16
Unter welchen Bedingungen sind denn zwei Pumpen möglich und wann nur eine?
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 29 April 2017, 18:09:37
da bräuchte es dann eine manuelle Logik. Also ich bin verantwortlich wie ich sie kombiniere.

Aber wie man das umsetzen könnte?

Ich dachte an eine Auswahlmöglichkeit pro Beregner-Dummy für einen verknüpften Beregner. Wenn dann der im ersten Dummy ausgewählte zweite Beregner auch eine Verknüpfung hat, läuft eben auch der verknüpfte dritte Beregner an.
Wenn der dritte keine Verknüpfung hat ist da eben Schluß und dann läufts die Auto-Reihe durch (bei der man dann abfragen muß ob schon gelaufen). Nicht Supergalant, aber ansonsten keine Idee wie man das visuell aufbereiten soll/kann. Man kann sozusagen nur den als erstes laufenden Block (die ersten x Minuten) verknüpfen.

Edit: Wobei wenn erstmal unterbrochen könnte der nächste dann auch wieder eine Gruppe bilden ... jetzt mal in Blaue gesprochen ohne groß nachzudenken.

pro Dummy attr setList mit allen Beregnern und einem unlinked.

Für andere, falls mal jemand 10 Kreise hat, wäre eine frei Verknüpfbarkeit klar cool .... wo man dann aber wieder visuell aufwendig wird und obs das wirklich so oft braucht?

Das wäre dann die Klickboxen-Lösung mit Gruppen

Ich kanns easy im Code machen, aber irgendwie nicht hübsch .... wenn vielleicht noch andere den Code nutzen wollen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 30 April 2017, 00:05:18
Zwei (manuelle) Ansätze meinerseits:
Entweder ein Pulldown-Menü pro Pumpe mit der Position zur Auswahl oder (besser zu händeln, wird aber bei vielen Pumpen zu groß) ein Matrixfeld, wo du pro Pumpe mittels Radio-Button die Position auswählen kannst (dazu noch manuell an und aus).
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 30 April 2017, 00:27:45
Jup, Pulldown bei den Beregner Dummies (wie bei den Monaten) dachte ich auch. Hab schon ein bißchen gespielt, da wirds aber mit status:on:off:auto schwierig. Oder es gibt einen Trick den ich nicht kenne.

Matrix (Klickboxen?) hört sich spannend an. Mit Position meinst du wenn zwei/drei auf der selben Position sind laufen sie gleichzeitig?
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 30 April 2017, 00:36:41
Pumpe an aus | Runde  1   2   3   4   5   6
1    ( ) ( )         (x) ( ) ( ) ( ) ( ) ( )
2    ( ) ( )         (x) ( ) ( ) ( ) ( ) ( )
3    ( ) ( )         (x) ( ) ( ) ( ) ( ) ( )
4    (x) ( )         ( ) ( ) ( ) ( ) ( ) ( )
5    ( ) (x)         ( ) ( ) ( ) ( ) ( ) ( )
6    ( ) ( )         ( ) ( ) ( ) ( ) ( ) (x)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 30 April 2017, 00:47:28
Zitat von: Per am 30 April 2017, 00:36:41
Pumpe an aus auto | Runde  1   2   3   4   5   6
1    ( ) ( )  ( )       (x) ( ) ( ) ( ) ( ) ( )
2    ( ) ( )  ( )       (x) ( ) ( ) ( ) ( ) ( )
3    ( ) ( )  ( )       (x) ( ) ( ) ( ) ( ) ( )
4    (x) ( )  ( )       ( ) ( ) ( ) ( ) ( ) ( )
5    ( ) (x)  ( )       ( ) ( ) ( ) ( ) ( ) ( )
6    ( ) ( )  ( )       ( ) ( ) ( ) ( ) ( ) (x)


so, oder

icon (an aus auto) wie jetzt plus runden-matrix wär auch lecker...

mhm, wobei so schneller zu Erfassen. Aber nicht so hübsch
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 30 April 2017, 00:50:46
X in einer Runde wäre ja automatisch Auto.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 30 April 2017, 00:52:41
verdammt :D right
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 04 Mai 2017, 15:23:57
Hallo Per, so jetzt sitz ich seit Tagen am Fehler lösen nach dem Umstieg Raspi2 -> Raspi3 und fhem 5.7 -> 5.8. Ich weiß schon, warum ich mir den Heckmeck versuche nur alle paar Jahre zu geben.

Wobei das mit dem jetzigen Problem nicht direkt etwas zu tun hat.

Da wir (resp. ich den Teil am Testsystem) die Schaltung der Cisternen Pumpe mit Dummies ausbaldowert haben, kommt jetzt im echen Leben die kleine Überraschung. Homematic Geräte haben ja die Eigenart beim Schalten diesen mir bis anhin sowieso nicht verständlichen Zwischenstand a la

PozzoHauptOben_PUMPE_Cisterna working: off

zu liefern. Dieser working state ist gerne mal das Gegenteil vom state direkt danach der uns interessiert.

Jetzt habe ich in

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:"on"] != 0 or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSE \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10


schon mal cmd_2 und cmd_3 umgearbeitet. Das scheint zu funktionieren. Aber cmd_1 frisst leider auch den working: state.

habs mit [#"^BEREGNUNG_SCHALTER_":state:"^on$"]

versucht zu umgehen, will aber nicht.

Das blöde daran ist, das cmd_1 dadurch falsch getriggert wird.

Idee?

EDIT. scheint so, als bräuchte es die Änderung in cmd_2 und cmd_3 nicht. Habe mich im

matched_event_c1_1 working: off,off

matched_event_c2_1 off

matched_event_c3_1 on


matched event am Anfang verschaut. Die beiden werden sauber getriggert wenn man die Pumpe manuell anschaltet. Denke ich??!

cmd_1 fängt das working ....

Und ganz genau weiß ich jetzt nicht, was diese "working" Geschichte sonst noch so anrichtet im gesamten Code, da es mir die Pumpe immer ausschaltet :D

habe jetzt cmd_2 und cmd_3 zurückgebaut auf Original

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:"on"] != 0 or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "off" and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "on" and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSE \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10


und ein List hätte ich auch noch

Internals:
   DEF        ([#"^BEREGNUNG_SCHALTER_":state:"on"] != 0 or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "off" and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "on" and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSE
(set PozzoHauptOben_PUMPE_Cisterna off)
   NAME       BeregnungDOIF_PumpeCisterna
   NR         612
   NTFY_ORDER 50-BeregnungDOIF_PumpeCisterna
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-05-04 15:51:42   Device          BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18
     2017-05-04 15:51:35   cmd             1
     2017-05-04 15:51:35   cmd_event       BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     2017-05-04 15:51:35   cmd_nr          1
     2017-05-04 15:51:39   e_PozzoHauptOben_PUMPE_Cisterna_STATE on
     2017-05-04 15:45:48   manu            on
     2017-05-04 15:51:42   matched_event_c1_1 working: off,off
     2017-05-04 15:31:26   matched_event_c2_1 off
     2017-05-04 15:31:16   matched_event_c3_1 on
     2017-05-04 15:51:35   state           cmd_1
     2017-05-04 15:51:42   wait_timer      no timer
   Condition:
     0          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"on"') != 0 or ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','manu') eq "on"
     1          InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "off" and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 4
     2          InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "on" and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 1
   Devices:
     1           PozzoHauptOben_PUMPE_Cisterna
     2           PozzoHauptOben_PUMPE_Cisterna
     all         PozzoHauptOben_PUMPE_Cisterna
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Cisterna on
     1:
       0          set BeregnungDOIF_PumpeCisterna manu off
     2:
       0          set BeregnungDOIF_PumpeCisterna manu on
     3:
       0          set PozzoHauptOben_PUMPE_Cisterna off
   Helper:
     event      working: off,off
     globalinit 1
     last_timer 0
     sleepdevice PozzoHauptOben_PUMPE_Cisterna
     sleepsubtimer 0
     sleeptimer -1
     timerdev   BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18
     timerevent working: off,off
     triggerDev BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18
     timerevents:
       working: off
       off
     timereventsState:
       working: off
       state: off
     triggerEvents:
       working: off
       off
     triggerEventsState:
       working: off
       state: off
   Internals:
     1           PozzoHauptOben_PUMPE_Cisterna:STATE
     2           PozzoHauptOben_PUMPE_Cisterna:STATE
     all         PozzoHauptOben_PUMPE_Cisterna:STATE
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^BEREGNUNG_SCHALTER_
     1:
     2:
     All:
       0          ^BEREGNUNG_SCHALTER_
   State:
     State:
   Trigger:
Attributes:
   group      Beregnung
   readingList manu
   wait       0:0:0:10


und ein List nach Neustart und dem aktivieren eines Beregners

Internals:
   DEF        ([#"^BEREGNUNG_SCHALTER_":state:"on"] != 0 or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "off" and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "on" and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSE
(set PozzoHauptOben_PUMPE_Cisterna off)
   NAME       BeregnungDOIF_PumpeCisterna
   NR         612
   NTFY_ORDER 50-BeregnungDOIF_PumpeCisterna
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-05-04 16:01:30   Device          BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     2017-05-04 15:58:20   cmd             1
     2017-05-04 15:58:20   cmd_event       BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18
     2017-05-04 15:58:20   cmd_nr          1
     2017-05-04 15:58:25   e_PozzoHauptOben_PUMPE_Cisterna_STATE on
     2017-05-04 15:45:48   manu            on
     2017-05-04 16:01:30   matched_event_c1_1 on,working: off
     2017-05-04 15:31:26   matched_event_c2_1 off
     2017-05-04 15:31:16   matched_event_c3_1 on
     2017-05-04 15:58:20   state           cmd_1
     2017-05-04 15:58:27   wait_timer      no timer
   Condition:
     0          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"on"') != 0 or ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','manu') eq "on"
     1          InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "off" and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 4
     2          InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "on" and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 1
   Devices:
     1           PozzoHauptOben_PUMPE_Cisterna
     2           PozzoHauptOben_PUMPE_Cisterna
     all         PozzoHauptOben_PUMPE_Cisterna
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Cisterna on
     1:
       0          set BeregnungDOIF_PumpeCisterna manu off
     2:
       0          set BeregnungDOIF_PumpeCisterna manu on
     3:
       0          set PozzoHauptOben_PUMPE_Cisterna off
   Helper:
     event      on,working: off
     globalinit 1
     last_timer 0
     sleepdevice PozzoHauptOben_PUMPE_Cisterna
     sleepsubtimer 0
     sleeptimer -1
     timerdev   BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     timerevent on,working: off
     triggerDev BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     timerevents:
       on
       working: off
     timereventsState:
       state: on
       working: off
     triggerEvents:
       on
       working: off
     triggerEventsState:
       state: on
       working: off
   Internals:
     1           PozzoHauptOben_PUMPE_Cisterna:STATE
     2           PozzoHauptOben_PUMPE_Cisterna:STATE
     all         PozzoHauptOben_PUMPE_Cisterna:STATE
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^BEREGNUNG_SCHALTER_
     1:
     2:
     All:
       0          ^BEREGNUNG_SCHALTER_
   State:
     State:
   Trigger:
Attributes:
   group      Beregnung
   readingList manu
   wait       0:0:0:10
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 04 Mai 2017, 16:57:52
Hättest du einen Auszug des EventViewers dieses Bereiches?
Evtl. kann man ja eine Abfrage hinzufügen, die speziell das "working" (ich kannte bisher nur "set_on" und "set_off" bei HM) abfängt, aber nix weiter macht.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 04 Mai 2017, 17:14:51
Hallo Per, mit (.*BEREGNUNG.*|.*Beregner.*|.*BeregnungDOIF.*) im Event Monitor.

Das ist Pumpe (war an)  aus, ein Beregner ON

2017-05-04 17:08:38 DOIF BeregnungDOIF_PumpeCisterna wait_timer: 04.05.2017 17:08:48 cmd_4 PozzoHauptOben_PUMPE_Cisterna
2017-05-04 17:08:38 DOIF BeregnungDOIF_PumpeCisterna wait_timer: no timer
2017-05-04 17:08:38 DOIF BeregnungDOIF_PumpeCisterna manu: off
2017-05-04 17:08:38 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 2
2017-05-04 17:08:38 DOIF BeregnungDOIF_PumpeCisterna cmd: 2
2017-05-04 17:08:38 DOIF BeregnungDOIF_PumpeCisterna cmd_event: PozzoHauptOben_PUMPE_Cisterna
2017-05-04 17:08:38 DOIF BeregnungDOIF_PumpeCisterna cmd_2
2017-05-04 17:09:20 DOIF BeregnungDOIF_Mapping cmd_nr: 1
2017-05-04 17:09:20 DOIF BeregnungDOIF_Mapping cmd: 1
2017-05-04 17:09:20 DOIF BeregnungDOIF_Mapping cmd_event: Beregner_03_Blauregen
2017-05-04 17:09:20 DOIF BeregnungDOIF_Mapping
2017-05-04 17:09:20 dummy Beregner_03_Blauregen on
2017-05-04 17:09:20 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 1
2017-05-04 17:09:20 DOIF BeregnungDOIF_PumpeCisterna cmd: 1
2017-05-04 17:09:20 DOIF BeregnungDOIF_PumpeCisterna cmd_event: BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
2017-05-04 17:09:20 DOIF BeregnungDOIF_PumpeCisterna cmd_1
2017-05-04 17:09:20 HM485 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 set_on
2017-05-04 17:09:20 DOIF BeregnungDOIF_PumpeCisterna wait_timer: 04.05.2017 17:09:30 cmd_4 PozzoHauptOben_PUMPE_Cisterna
2017-05-04 17:09:20 HM485 BEREGNUNG_12_7_MEQ0064131 ACK
2017-05-04 17:09:20 DOIF BeregnungDOIF_PumpeCisterna wait_timer: no timer
2017-05-04 17:09:20 HM485 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 on
2017-05-04 17:09:20 HM485 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 working: off
2017-05-04 17:09:20 DOIF BeregnungDOIF_PumpeCisterna wait_timer: 04.05.2017 17:09:30 cmd_4 PozzoHauptOben_PUMPE_Cisterna
2017-05-04 17:09:30 DOIF BeregnungDOIF_PumpeCisterna wait_timer: no timer
2017-05-04 17:09:30 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 4
2017-05-04 17:09:30 DOIF BeregnungDOIF_PumpeCisterna cmd: 4
2017-05-04 17:09:30 DOIF BeregnungDOIF_PumpeCisterna cmd_event: PozzoHauptOben_PUMPE_Cisterna
2017-05-04 17:09:30 DOIF BeregnungDOIF_PumpeCisterna cmd_4



Das ist direkt danach. Beregner OFF. Die Pumpe hat er schon oben nach 10 sek ausgeschaltet.

2017-05-04 17:11:26 DOIF BeregnungDOIF_Mapping cmd_nr: 2
2017-05-04 17:11:26 DOIF BeregnungDOIF_Mapping cmd: 2
2017-05-04 17:11:26 DOIF BeregnungDOIF_Mapping cmd_event: Beregner_03_Blauregen
2017-05-04 17:11:26 DOIF BeregnungDOIF_Mapping
2017-05-04 17:11:26 dummy Beregner_03_Blauregen off
2017-05-04 17:11:26 HM485 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 set_off
2017-05-04 17:11:26 HM485 BEREGNUNG_12_7_MEQ0064131 ACK
2017-05-04 17:11:26 HM485 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 working: off
2017-05-04 17:11:26 HM485 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 off


nach diesen beiden Vorgängen das list

Internals:
   DEF        ([#"^BEREGNUNG_SCHALTER_":state:"on"] != 0 or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "off" and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "on" and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSE
(set PozzoHauptOben_PUMPE_Cisterna off)
   NAME       BeregnungDOIF_PumpeCisterna
   NR         612
   NTFY_ORDER 50-BeregnungDOIF_PumpeCisterna
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2017-05-04 17:11:26   Device          BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     2017-05-04 17:09:30   cmd             4
     2017-05-04 17:09:30   cmd_event       PozzoHauptOben_PUMPE_Cisterna
     2017-05-04 17:09:30   cmd_nr          4
     2017-05-04 17:10:11   e_PozzoHauptOben_PUMPE_Cisterna_STATE off
     2017-05-04 17:08:38   manu            off
     2017-05-04 17:11:26   matched_event_c1_1 working: off,off
     2017-05-04 15:31:26   matched_event_c2_1 off
     2017-05-04 15:31:16   matched_event_c3_1 on
     2017-05-04 17:09:30   state           cmd_4
     2017-05-04 17:09:30   wait_timer      no timer
   Condition:
     0          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"on"') != 0 or ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','manu') eq "on"
     1          InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "off" and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 4
     2          InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "on" and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 1
   Devices:
     1           PozzoHauptOben_PUMPE_Cisterna
     2           PozzoHauptOben_PUMPE_Cisterna
     all         PozzoHauptOben_PUMPE_Cisterna
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Cisterna on
     1:
       0          set BeregnungDOIF_PumpeCisterna manu off
     2:
       0          set BeregnungDOIF_PumpeCisterna manu on
     3:
       0          set PozzoHauptOben_PUMPE_Cisterna off
   Helper:
     event      working: off,off
     globalinit 1
     last_timer 0
     sleepdevice PozzoHauptOben_PUMPE_Cisterna
     sleepsubtimer -1
     sleeptimer -1
     timerdev   BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     timerevent working: off,off
     triggerDev BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     timerevents:
       working: off
       off
     timereventsState:
       working: off
       state: off
     triggerEvents:
       working: off
       off
     triggerEventsState:
       working: off
       state: off
   Internals:
     1           PozzoHauptOben_PUMPE_Cisterna:STATE
     2           PozzoHauptOben_PUMPE_Cisterna:STATE
     all         PozzoHauptOben_PUMPE_Cisterna:STATE
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^BEREGNUNG_SCHALTER_
     1:
     2:
     All:
       0          ^BEREGNUNG_SCHALTER_
   State:
     State:
   Trigger:
Attributes:
   group      Beregnung
   readingList manu
   wait       0:0:0:10
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 04 Mai 2017, 17:22:03
Ok, das ist eine Frage für den Chef (Damian), ob und wie # das abfangen kann.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Damian am 04 Mai 2017, 18:11:09
Zitat von: Per am 04 Mai 2017, 17:22:03
Ok, das ist eine Frage für den Chef (Damian), ob und wie # das abfangen kann.

[#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"]

hier wird nur auf "on" getriggert und gezählt wird nur state = "on"
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 04 Mai 2017, 20:08:32
Danke Damian. Ich probiere das morgen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 05 Mai 2017, 09:29:03
Mmh, jetzt bin ich irritiert. Ein List ergibt:

Internals:
   DEF        ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "off" and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "on" and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSE
(set PozzoHauptOben_PUMPE_Cisterna off)
   NAME       BeregnungDOIF_PumpeCisterna
   NR         608
   NTFY_ORDER 50-BeregnungDOIF_PumpeCisterna
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2017-05-05 09:17:26   Device          PozzoHauptOben_PUMPE_Cisterna
     2017-05-05 09:17:26   cmd             4
     2017-05-05 09:17:26   cmd_event       PozzoHauptOben_PUMPE_Cisterna
     2017-05-05 09:17:26   cmd_nr          4
     2017-05-05 09:17:26   e_PozzoHauptOben_PUMPE_Cisterna_STATE off
     2017-05-05 09:17:09   manu            off
     2017-05-05 09:17:16   matched_event_c1_1 on
     2017-05-05 09:17:26   state           cmd_4
     2017-05-05 09:17:26   wait_timer      no timer
   Condition:
     0          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"^on$"') != 0 or ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','manu') eq "on"
     1          InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "off" and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 4
     2          InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "on" and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 1
   Devices:
     1           PozzoHauptOben_PUMPE_Cisterna
     2           PozzoHauptOben_PUMPE_Cisterna
     all         PozzoHauptOben_PUMPE_Cisterna
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Cisterna on
     1:
       0          set BeregnungDOIF_PumpeCisterna manu off
     2:
       0          set BeregnungDOIF_PumpeCisterna manu on
     3:
       0          set PozzoHauptOben_PUMPE_Cisterna off
   Helper:
     event      working: off,off
     globalinit 1
     last_timer 0
     sleepdevice PozzoHauptOben_PUMPE_Cisterna
     sleepsubtimer -1
     sleeptimer -1
     timerdev   PozzoHauptOben_PUMPE_Cisterna
     timerevent working: off,off
     triggerDev PozzoHauptOben_PUMPE_Cisterna
     timerevents:
       working: off
       off
     timereventsState:
       working: off
       state: off
     triggerEvents:
       working: off
       off
     triggerEventsState:
       working: off
       state: off
   Internals:
     1           PozzoHauptOben_PUMPE_Cisterna:STATE
     2           PozzoHauptOben_PUMPE_Cisterna:STATE
     all         PozzoHauptOben_PUMPE_Cisterna:STATE
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^BEREGNUNG_SCHALTER_:^on$
     1:
     2:
     All:
       0          ^BEREGNUNG_SCHALTER_:^on$
   State:
     State:
   Trigger:
Attributes:
   group      Beregnung
   readingList manu
   wait       0:0:0:10


in den Readings wird das "working off" nicht mehr gefangen (war vorher so), aber im helper event.

Funktionieren tut es immer noch nicht. Per, da ich deinen BeregnungDOIF_PumpeCisterna DOIF Code noch immer nicht wirklich verstehe.... könntest du nochmal über den statusQuo im Zusammenhang mit dem working off schauen? Bin hier gerade ein wenig lost.
Vielleicht hats ja auch damit gar nichts zu tun und ich habe einfach mit den Dummies nur nicht ordentlich getestet :D

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "off" and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna] eq "on" and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSE \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10


Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 05 Mai 2017, 10:01:32
Aktuell reagieren die DOELSEIF auf jedes Event, bei "Nichtpassen" startet DOELSE. Also muss jetzt die Änderung von oben wieder rein:

([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:off"] and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:on"] and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSE
(set PozzoHauptOben_PUMPE_Cisterna off)


Wenn das auch nicht hilft, muss statt DOELSE ein weiteres DOELSEIF mit
([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] == 0)
rein. Evtl. geht sogar nur
([#] == 0)
als Bedingung, wäre einen Test wert.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 05 Mai 2017, 10:41:48
mit hin und herschalten der Pumpe und:

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on")  \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:off"] and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:on"] and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSE \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10


fängt er sogar jetzt die set_on + die alten workings :D

und manu wird nicht richtig gesetzt

List (Teil) ... hier ist die Pumpe an, manu steht aber auf off

Readings:
     2017-05-05 10:46:09   Device          PozzoHauptOben_PUMPE_Cisterna
     2017-05-05 10:46:09   cmd             2
     2017-05-05 10:46:09   cmd_event       PozzoHauptOben_PUMPE_Cisterna
     2017-05-05 10:46:09   cmd_nr          2
     2017-05-05 10:46:09   manu            off
     2017-05-05 10:46:09   matched_event_c2_1 working: off
     2017-05-05 10:46:09   matched_event_c3_1 set_on
     2017-05-05 10:46:09   state           cmd_2


irgendwie müssen doch diese Homematic Extras rauszufiltern sein?!

EDIT: Hoppala, jetzt aktuelles List. Sorry
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 05 Mai 2017, 10:54:52
OK, gg. "set_on" hilft "^on".
Vllt. hilft gg. "working" "event-on-change-reading state" oder "event-on-change-reading state,battery" auf HM-Seite. Ist zwar nicht die feine Englische, aber dann kann man in Ruhe weiter suchen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 05 Mai 2017, 11:25:14
Code mit ^off$" löst das Problem von manu. Das schaltet jetzt entsprechend Pumpe an/aus. Aber sobald ich einen Beregner anschalte läuft der waittimer los und schaltet nach 10 sek aus. Wie bisher.

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on")  \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^off$"] and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^on$"] and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSE \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10


Event Monitor

2017-05-05 11:14:38 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 1
2017-05-05 11:14:38 DOIF BeregnungDOIF_PumpeCisterna cmd: 1
2017-05-05 11:14:38 DOIF BeregnungDOIF_PumpeCisterna cmd_event: BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
2017-05-05 11:14:38 DOIF BeregnungDOIF_PumpeCisterna cmd_1
2017-05-05 11:14:38 HM485 PozzoHauptOben_PUMPE_Cisterna set_on
2017-05-05 11:14:38 DOIF BeregnungDOIF_PumpeCisterna wait_timer: 05.05.2017 11:14:48 cmd_4 PozzoHauptOben_PUMPE_Cisterna
2017-05-05 11:14:38 HM485 PozzoHauptOben_PUMPE_Cisterna on
2017-05-05 11:14:38 HM485 PozzoHauptOben_PUMPE_Cisterna working: off
2017-05-05 11:14:48 DOIF BeregnungDOIF_PumpeCisterna wait_timer: no timer
2017-05-05 11:14:49 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 4
2017-05-05 11:14:49 DOIF BeregnungDOIF_PumpeCisterna cmd: 4
2017-05-05 11:14:49 DOIF BeregnungDOIF_PumpeCisterna cmd_event: PozzoHauptOben_PUMPE_Cisterna
2017-05-05 11:14:49 DOIF BeregnungDOIF_PumpeCisterna cmd_4
2017-05-05 11:14:49 HM485 PozzoHauptOben_PUMPE_Cisterna set_off
2017-05-05 11:14:49 HM485 PozzoHauptOben_PUMPE_Cisterna working: off
2017-05-05 11:14:49 HM485 PozzoHauptOben_PUMPE_Cisterna off


List. DOIF fängt weiterhin die workings als timer und trigger events.

Internals:
   DEF        ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^off$"] and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^on$"] and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSE
(set PozzoHauptOben_PUMPE_Cisterna off)
   NAME       BeregnungDOIF_PumpeCisterna
   NR         608
   NTFY_ORDER 50-BeregnungDOIF_PumpeCisterna
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2017-05-05 11:14:49   Device          PozzoHauptOben_PUMPE_Cisterna
     2017-05-05 11:14:49   cmd             4
     2017-05-05 11:14:49   cmd_event       PozzoHauptOben_PUMPE_Cisterna
     2017-05-05 11:14:49   cmd_nr          4
     2017-05-05 11:13:48   manu            on
     2017-05-05 11:14:38   matched_event_c1_1 on
     2017-05-05 11:14:49   matched_event_c2_1 off
     2017-05-05 11:14:38   matched_event_c3_1 on
     2017-05-05 11:14:49   state           cmd_4
     2017-05-05 11:14:48   wait_timer      no timer
   Condition:
     0          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"^on$"') != 0 or ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','manu') eq "on"
     1          EventDoIf('PozzoHauptOben_PUMPE_Cisterna',$hash,'^off$',0) and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 4
     2          EventDoIf('PozzoHauptOben_PUMPE_Cisterna',$hash,'^on$',0) and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 1
   Devices:
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Cisterna on
     1:
       0          set BeregnungDOIF_PumpeCisterna manu off
     2:
       0          set BeregnungDOIF_PumpeCisterna manu on
     3:
       0          set PozzoHauptOben_PUMPE_Cisterna off
   Helper:
     event      off
     globalinit 1
     last_timer 0
     sleepdevice PozzoHauptOben_PUMPE_Cisterna
     sleepsubtimer -1
     sleeptimer -1
     timerdev   PozzoHauptOben_PUMPE_Cisterna
     timerevent off
     triggerDev PozzoHauptOben_PUMPE_Cisterna
     timerevents:
       working: off
       off
     timereventsState:
       working: off
       state: off
     triggerEvents:
       working: off
       off
     triggerEventsState:
       working: off
       state: off
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^BEREGNUNG_SCHALTER_:^on$
     1:
       0          PozzoHauptOben_PUMPE_Cisterna:^off$
     2:
       0          PozzoHauptOben_PUMPE_Cisterna:^on$
     All:
       0          ^BEREGNUNG_SCHALTER_:^on$
       1          PozzoHauptOben_PUMPE_Cisterna:^off$
       2          PozzoHauptOben_PUMPE_Cisterna:^on$
   State:
     State:
   Trigger:
Attributes:
   group      Beregnung
   readingList manu
   wait       0:0:0:10


Mal davon ausgehend, dass es an den working: liegt wäre doch die Aufgabe das working rauszufiltern. Aber mit event-on-change am Device möchte ich nicht unbedingt ran. Ich seh mich in einem Jahr Fehler suchen :D

Es muß doch eine Syntax (im DOIF) geben, die working rausfiltert ?!

Oder generell eine andere Herangehensweise ans DOIF? Aber da bist du der Maestro. Mir kam anfänglich ja auch keine Idee.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 05 Mai 2017, 11:28:37
Zitat von: Per am 05 Mai 2017, 10:01:32
Wenn das auch nicht hilft, muss statt DOELSE ein weiteres DOELSEIF mit
([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] == 0)
rein. Evtl. geht sogar nur
([#] == 0)
als Bedingung, wäre einen Test wert.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 05 Mai 2017, 14:21:10
so

([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on") 
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^off$"] and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^on$"] and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSEIF ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] == 0)
(set PozzoHauptOben_PUMPE_Cisterna off)


macht er immerhin die Pumpe nicht immer aus :D

allerdings macht er, wenn vorher aus, die Pumpe an, aber lässt sie an :(
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 05 Mai 2017, 15:23:59
([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on") 
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^off$"] and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^on$"] and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSEIF ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] == 0 and [?$SELF:manu] eq "off")
(set PozzoHauptOben_PUMPE_Cisterna off)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 05 Mai 2017, 17:25:43
zum Haare raufen. Genau wie zuvor. Stellt an, aber nicht ab

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] != 0 or [?$SELF:manu] eq "on")    \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^off$"] and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  (["PozzoHauptOben_PUMPE_Cisterna:^on$"] and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_:^on$":state:"^on$"] == 0 and [?$SELF:manu] eq "off") \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 06 Mai 2017, 09:17:58
Guten Morgen! ... habe jetzt die halbe Nacht die commandref durchgeackert und alle erdenklichen Möglichkeiten durchprobiert (die Beregner rauchten heute Morgen :D)

habe auch Pers Vorschlag bzgl event-on-change-reading state bei den Beregnern und der Pumpe beherzigt und es kommt somit nur noch

set_on
set_off
on
off

durch.

die jetzige

cfg:

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] != 0 or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSE \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10


sollte sowohl bei der Pumpe als auch bei den Beregnern alles was nicht on oder off ist herausfiltern. Trotzdem läuft die Geschichte nicht.

Auszug event-monitor

2017-05-06 09:05:15 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 1
2017-05-06 09:05:15 DOIF BeregnungDOIF_PumpeCisterna cmd: 1
2017-05-06 09:05:15 DOIF BeregnungDOIF_PumpeCisterna cmd_event: BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
2017-05-06 09:05:15 DOIF BeregnungDOIF_PumpeCisterna cmd_1
2017-05-06 09:05:15 HM485 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 set_on
2017-05-06 09:05:15 HM485 PozzoHauptOben_PUMPE_Cisterna set_on
2017-05-06 09:05:15 HM485 BEREGNUNG_12_7_MEQ0064131 ACK
2017-05-06 09:05:15 HM485 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2017-05-06 09:05:15 DOIF BeregnungDOIF_PumpeCisterna wait_timer: 06.05.2017 09:05:25 cmd_4 PozzoHauptOben_PUMPE_Cisterna
2017-05-06 09:05:15 HM485 PozzoHauptOben_PUMPE_Cisterna on
2017-05-06 09:05:25 DOIF BeregnungDOIF_PumpeCisterna wait_timer: no timer
2017-05-06 09:05:25 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 4
2017-05-06 09:05:25 DOIF BeregnungDOIF_PumpeCisterna cmd: 4
2017-05-06 09:05:25 DOIF BeregnungDOIF_PumpeCisterna cmd_event: PozzoHauptOben_PUMPE_Cisterna
2017-05-06 09:05:25 DOIF BeregnungDOIF_PumpeCisterna cmd_4
2017-05-06 09:05:25 HM485 PozzoHauptOben_PUMPE_Cisterna set_off
2017-05-06 09:05:25 HM485 PozzoHauptOben_PUMPE_Cisterna off


egal wie (ob Pumpe vorher an oder aus), die Pumpe wird nach Betätigung eines Beregners nach 10 sek ausgeschaltet.

Irgendwas triggert bei cmd_1 zu cmd_4 und ich finds nicht heraus. Wenn es kein Bug im DOIF ist, gebe ich mit dem Schalten der Pumpe hiermit auf.

Ich beruhige mich jetzt erstmal ein paar Tage und teste den Rest der Beregnung ausgiebig und dann mach ich noch die Zusammenfassung.

Vielen Dank Per! für deine Mühen und Damian für ein vorzügliches Modul.

PS. Per, durch das ganze hin und her habe ich jetzt sogar dein DOIF Cisterna verstanden :D .... Hirnakrobatik ;)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 06 Mai 2017, 09:31:54
DAS GIBTS DOCH NICHT! Jetzt dachte ich im Restore "Ach komm, einen probierst du noch"


.... und es geht. Alle event-on-change-reading Geschichten sind raus.

und das hier funktioniert:

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] != 0 or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] != 4) \
(set $SELF manu off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] != 1) \
(set $SELF manu on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] == 0) \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10



testen, testen, testen ......

edit: und trotzdem verwunderlich, warum es funktioniert. Das DOIF fängt alle events. Oder lese ich das List einfach falsch?

Internals:
   DEF        ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] != 0 or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] == 0)
(set PozzoHauptOben_PUMPE_Cisterna off)
   NAME       BeregnungDOIF_PumpeCisterna
   NR         609
   NTFY_ORDER 50-BeregnungDOIF_PumpeCisterna
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2017-05-06 10:00:01   Device          PozzoHauptOben_PUMPE_Cisterna
     2017-05-06 10:00:01   cmd             4
     2017-05-06 10:00:01   cmd_event       BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     2017-05-06 10:00:01   cmd_nr          4
     2017-05-06 09:56:19   manu            off
     2017-05-06 09:59:51   matched_event_c1_1 working: off,off
     2017-05-06 10:00:01   matched_event_c2_1 off
     2017-05-06 09:56:50   matched_event_c3_1 on
     2017-05-06 09:59:51   matched_event_c4_1 working: off,off
     2017-05-06 10:00:01   state           cmd_4
     2017-05-06 10:00:01   wait_timer      no timer
   Condition:
     0          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"^on$"') != 0 or ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','manu') eq "on"
     1          EventDoIf('^PozzoHauptOben_PUMPE_Cisterna$',$hash,'^off$',0) and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 4
     2          EventDoIf('^PozzoHauptOben_PUMPE_Cisterna$',$hash,'^on$',0) and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 1
     3          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"^on$"') == 0
   Devices:
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Cisterna on
     1:
       0          set BeregnungDOIF_PumpeCisterna manu off
     2:
       0          set BeregnungDOIF_PumpeCisterna manu on
     3:
       0          set PozzoHauptOben_PUMPE_Cisterna off
     4:
   Helper:
     event      off
     globalinit 1
     last_timer 0
     sleepdevice BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     sleepsubtimer -1
     sleeptimer -1
     timerdev   BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     timerevent working: off,off
     triggerDev PozzoHauptOben_PUMPE_Cisterna
     timerevents:
       working: off
       off
     timereventsState:
       working: off
       state: off
     triggerEvents:
       working: off
       off
     triggerEventsState:
       working: off
       state: off
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^BEREGNUNG_SCHALTER_
     1:
       0          ^PozzoHauptOben_PUMPE_Cisterna$:^off$
     2:
       0          ^PozzoHauptOben_PUMPE_Cisterna$:^on$
     3:
       0          ^BEREGNUNG_SCHALTER_
     All:
       0          ^BEREGNUNG_SCHALTER_
       1          ^PozzoHauptOben_PUMPE_Cisterna$:^off$
       2          ^PozzoHauptOben_PUMPE_Cisterna$:^on$
   State:
     State:
   Trigger:
Attributes:
   group      Beregnung
   readingList manu
   wait       0:0:0:10
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 06 Mai 2017, 11:29:35
Habe jetzt noch BeregnungDOIF_Mapping angepasst. Funktioniert auch das wieder.

Jetzt gibts aber neue Herausforderungen ;)

Das

define BeregnungDOIF_NachSonne DOIF ([?Wetterstation:statRain_dayHour24:d] < 1.0 and [myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungDOIF_NachSonne group Beregnung
attr BeregnungDOIF_NachSonne room Beregnung


triggert ja das

define BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1"))

Warum läuft das DOIF trotz dem Fragezeichen vor ?BeregnungDurchlauf_AN_AUS_AUTO sofort los (wenn BeregnungDOIF_NachSonne auf cmd_1 steht), wenn ich den Dummy BeregnungDurchlauf_AN_AUS_AUTO auf auto setze? Das Fragezeichen sollte doch diesen Event ignorieren. ??

Internals:
   DEF        ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1"))
()
()
(set SqueezeBoxPlayer.* talk Durchlauf Beregnung gestartet, set $SELF cmd_2)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen)
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen)
(set $SELF cmd_3)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_04_HinterKueche)
(set BeregnungDummy_Helper Beregner_04_HinterKueche)
(set $SELF cmd_4)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_05_CampeggioOben)
(set BeregnungDummy_Helper Beregner_05_CampeggioOben)
(set $SELF cmd_5)
DOELSEIF (0)
(set BeregnungDummy_Helper Beregner_06_Waschhaus)
(set BeregnungDummy_Helper Beregner_06_Waschhaus)
(set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off")
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet)
   NAME       BeregnungDOIF_Trigger
   NR         605
   NTFY_ORDER 50-BeregnungDOIF_Trigger
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2017-05-06 11:15:24   Device          BeregnungDurchlauf_AN_AUS_AUTO
     2017-05-06 11:16:24   cmd             2.3
     2017-05-06 11:16:24   cmd_event       set_cmd_2
     2017-05-06 11:16:24   cmd_nr          2
     2017-05-06 11:16:24   cmd_seqnr       3
     2017-05-06 08:51:47   e_BeregnungDOIF_NachSonne_STATE cmd_1
     2017-05-06 11:15:24   e_BeregnungDurchlauf_AN_AUS_AUTO_STATE auto
     2017-05-06 11:16:24   state           cmd_2
     2017-05-06 11:16:24   wait_timer      06.05.2017 11:17:24 cmd_3_2 set_cmd_3
   Condition:
     0          InternalDoIf($hash,'BeregnungDurchlauf_AN_AUS_AUTO','STATE') eq "on" or (InternalDoIf($hash,'BeregnungDurchlauf_AN_AUS_AUTO','STATE') eq "auto" and InternalDoIf($hash,'BeregnungDOIF_NachSonne','STATE') eq "cmd_1")
     1          0
     2          0
     3          0
     4          0
     5          InternalDoIf($hash,'BeregnungDurchlauf_AN_AUS_AUTO','STATE') eq "off"
   Devices:
     0           BeregnungDurchlauf_AN_AUS_AUTO BeregnungDOIF_NachSonne
     5           BeregnungDurchlauf_AN_AUS_AUTO
     all         BeregnungDurchlauf_AN_AUS_AUTO BeregnungDOIF_NachSonne
   Do:
     0:
       0
       1
       2          set SqueezeBoxPlayer.* talk Durchlauf Beregnung gestartet, set BeregnungDOIF_Trigger cmd_2
     1:
       0          set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen
       1          set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen
       2          set BeregnungDOIF_Trigger cmd_3
     2:
       0          set BeregnungDummy_Helper Beregner_04_HinterKueche
       1          set BeregnungDummy_Helper Beregner_04_HinterKueche
       2          set BeregnungDOIF_Trigger cmd_4
     3:
       0          set BeregnungDummy_Helper Beregner_05_CampeggioOben
       1          set BeregnungDummy_Helper Beregner_05_CampeggioOben
       2          set BeregnungDOIF_Trigger cmd_5
     4:
       0          set BeregnungDummy_Helper Beregner_06_Waschhaus
       1          set BeregnungDummy_Helper Beregner_06_Waschhaus
       2          set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet
     5:
       0          set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus, set SqueezeBoxPlayer.* talk Durchlauf Beregnung beendet
     6:
   Helper:
     event      auto
     globalinit 1
     last_timer 0
     sleepdevice set_cmd_3
     sleepsubtimer 1
     sleeptimer 2
     timerdev   BeregnungDurchlauf_AN_AUS_AUTO
     timerevent auto
     triggerDev BeregnungDurchlauf_AN_AUS_AUTO
     timerevents:
       auto
     timereventsState:
       state: auto
     triggerEvents:
       auto
     triggerEventsState:
       state: auto
   Internals:
     0           BeregnungDurchlauf_AN_AUS_AUTO:STATE BeregnungDOIF_NachSonne:STATE
     5           BeregnungDurchlauf_AN_AUS_AUTO:STATE
     all         BeregnungDurchlauf_AN_AUS_AUTO:STATE BeregnungDOIF_NachSonne:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     1:
     2:
     3:
     4:
     5:
     All:
   State:
     State:
   Trigger:
Attributes:
   group      Beregnung
   wait       0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 07 Mai 2017, 07:24:25
Zitat von: holle75 am 06 Mai 2017, 11:29:35
Warum läuft das DOIF trotz dem Fragezeichen vor ?BeregnungDurchlauf_AN_AUS_AUTO sofort los (wenn BeregnungDOIF_NachSonne auf cmd_1 steht), wenn ich den Dummy BeregnungDurchlauf_AN_AUS_AUTO auf auto setze? Das Fragezeichen sollte doch diesen Event ignorieren. ?
Macht es ja. Die erste Abfrage reagiert auf den Event, meldet zwar false, aber dabei wird auch das Fragezeichen abgefragt. Richtig müsste es heißen:
["BeregnungDurchlauf_AN_AUS_AUTO":"on"]


falsche Syntax, wenn Regex für das Devices und Event gelten soll, dann so:

["BeregnungDurchlauf_AN_AUS_AUTO:on"]
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 07 Mai 2017, 09:26:57
Es ist aber auch soooowas von komplex. Danke euch beiden.

Per, modifiziere gerade noch die Tiefenpumpe aus dem anderen Thread auch in Abhängigkeit der Beregner. Wo ja jetzt die Beregner-Abfrage-Syntax so schön funktioniert :D

aber wenn einer von euch noch eine Antwort zum List hätte? Interessiert mich was ich da falsch lese. Im Reading und im helper sind doch die workings drin? Die dachte ich ja mit der Syntax rauszufiltern.

Zitat von: holle75 am 06 Mai 2017, 09:31:54

edit: und trotzdem verwunderlich, warum es funktioniert. Das DOIF fängt alle events. Oder lese ich das List einfach falsch?

Internals:
   DEF        ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] != 0 or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] != 4)
(set $SELF manu off)
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] != 1)
(set $SELF manu on)
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] == 0)
(set PozzoHauptOben_PUMPE_Cisterna off)
   NAME       BeregnungDOIF_PumpeCisterna
   NR         609
   NTFY_ORDER 50-BeregnungDOIF_PumpeCisterna
   STATE      cmd_4
   TYPE       DOIF
   Readings:
     2017-05-06 10:00:01   Device          PozzoHauptOben_PUMPE_Cisterna
     2017-05-06 10:00:01   cmd             4
     2017-05-06 10:00:01   cmd_event       BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     2017-05-06 10:00:01   cmd_nr          4
     2017-05-06 09:56:19   manu            off
     2017-05-06 09:59:51   matched_event_c1_1 working: off,off
     2017-05-06 10:00:01   matched_event_c2_1 off
     2017-05-06 09:56:50   matched_event_c3_1 on
     2017-05-06 09:59:51   matched_event_c4_1 working: off,off
     2017-05-06 10:00:01   state           cmd_4
     2017-05-06 10:00:01   wait_timer      no timer
   Condition:
     0          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"^on$"') != 0 or ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','manu') eq "on"
     1          EventDoIf('^PozzoHauptOben_PUMPE_Cisterna$',$hash,'^off$',0) and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 4
     2          EventDoIf('^PozzoHauptOben_PUMPE_Cisterna$',$hash,'^on$',0) and ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') != 1
     3          AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','"^on$"') == 0
   Devices:
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Cisterna on
     1:
       0          set BeregnungDOIF_PumpeCisterna manu off
     2:
       0          set BeregnungDOIF_PumpeCisterna manu on
     3:
       0          set PozzoHauptOben_PUMPE_Cisterna off
     4:
   Helper:
     event      off
     globalinit 1
     last_timer 0
     sleepdevice BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     sleepsubtimer -1
     sleeptimer -1
     timerdev   BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17
     timerevent working: off,off
     triggerDev PozzoHauptOben_PUMPE_Cisterna
     timerevents:
       working: off
       off
     timereventsState:
       working: off
       state: off
     triggerEvents:
       working: off
       off
     triggerEventsState:
       working: off
       state: off
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^BEREGNUNG_SCHALTER_
     1:
       0          ^PozzoHauptOben_PUMPE_Cisterna$:^off$
     2:
       0          ^PozzoHauptOben_PUMPE_Cisterna$:^on$
     3:
       0          ^BEREGNUNG_SCHALTER_
     All:
       0          ^BEREGNUNG_SCHALTER_
       1          ^PozzoHauptOben_PUMPE_Cisterna$:^off$
       2          ^PozzoHauptOben_PUMPE_Cisterna$:^on$
   State:
     State:
   Trigger:
Attributes:
   group      Beregnung
   readingList manu
   wait       0:0:0:10


Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 07 Mai 2017, 12:39:56
Zitat von: Per am 07 Mai 2017, 07:24:25
Macht es ja. Die erste Abfrage reagiert auf den Event, meldet zwar false, aber dabei wird auch das Fragezeichen abgefragt. Richtig müsste es heißen:
["BeregnungDurchlauf_AN_AUS_AUTO":"on"]


falsche Syntax, wenn Regex für das Devices und Event gelten soll, dann so:

["BeregnungDurchlauf_AN_AUS_AUTO:on"]

Mmh, da es um auto geht (was ich irgendwann für den nächsten Tag setzen möchte, deswegen soll nicht gleich losgelaufen werden) und wenn denn dann SonneDOIF den nächsten Morgen auf cmd_1 springt (weil es Nachts/Abends auf cmd_2 geht), sollte doch einfach nur der state von BeregnungDurchlauf_AN_AUS_AUTO überprüft werden. Und da es ein Fragezeichen hat die Änderung des state eben nicht triggern ???

Warum ist dann meine ursprüngliche Syntax falsch? tschuldigung, verstehe es nicht.

define BeregnungDOIF_Trigger DOIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on" or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1"))

Edit: Aaah, ihr redet von der ersten Bedingung. Die funktioniert. Nur die or Bedingung funktioniert nicht.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 08 Mai 2017, 13:24:27
Nochmal, diesmal nicht vom Handy, daher etwas ausführlicher.
BeregnungDurchlauf_AN_AUS_AUTO schaltet auf "an". Was passiert?
1. die erste Abfrage (Trigger) wird aktiv. Ergebnis positiv (true). Jetzt ignorieren wir mal das or, sonst wäre jetzt schon Schluss.
2. die zweite Abfrage (?) wird, da ja die erste durch den Trigger aktiviert wurde, auch abgefragt. Ergebnis false. "BeregnungDOIF_NachSonne" ist hier uninteressant, denken wir uns mal ein true.
true or (false and true) -> true -> Start erfolgt.

BeregnungDurchlauf_AN_AUS_AUTO schaltet auf "auto". Was passiert?
1. die erste Abfrage (Trigger) wird aktiv. Ergebnis negativ (false).
2. die zweite Abfrage (?) wird, da ja die erste durch den Trigger aktiviert wurde, auch abgefragt. Ergebnis true. I.V. mit dem vorhin als true gedachten "BeregnungDOIF_NachSonne" und dem and folgt:
false or (true and true) -> true -> Start erfolgt.

Abhilfe:
1. [BeregnungDurchlauf_AN_AUS_AUTO:"on"] (https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events) (bewirkt, dass nur extakt dieser Wert (+ Regex) getriggert wird, nicht alles was bei "BeregnungDurchlauf_AN_AUS_AUTO" kommt.
oder
2. checkReadingEvent (https://fhem.de/commandref_DE.html#DOIF_checkReadingEvent)


Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 08 Mai 2017, 14:38:41
Danke Per, entscheidend bei diesem Beispiel also, dass ich zweimal das selbe Device abfrage? Gäbe es nur die or-Bedingung (und ich setze ?BeregnungDurchlauf_AN_AUS_AUTO auf auto) würde nichts passieren. Richtig?

Ich habe jede Bedingung als einzelnen Vorgang betrachtet (und es ist mir neu, dass obwohl ? davor, wenn vorher getriggert, auch abgefragt wird). Jetzt verstehe ich das Problem, also mein Verständnisproblem. Danke dass du dir die Zeit genommen hast!

und jetzt verstehe ich auch warum ihr beide auf der ersten Bedingung rumgeritten habt :D

Ich habe natürlich nur die ?-Bedingung verändert und aus dem on ein auto gemacht -> klar jetzt, hat nicht funktionert


testen, testen, testen...

Ach so, was auch noch interessant ist, ist dass ich alle cmd oder cmd_sqnr. Bedingungen zb statt

== 1

in

eq "1"

umbauen mußte, da ich sonst immer

Argument " " is no numeric error

Argument "" isn't numeric in numeric eq (==) at (eval 1667) line

oder so ähnlich (log leider gelöscht) (gefunden) bekommen habe. Es funktioniert, aber den Fehler verstehen tue ich nicht (weil ist ja numerisch). Irgend eine Freizeichen-Problematik? Aber wo?

Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 08 Mai 2017, 16:32:50
Zitat von: holle75 am 08 Mai 2017, 14:38:41Richtig?
Ja.

Zitat von: holle75 am 08 Mai 2017, 14:38:41Danke
Gern, hat mir ja Spass gemacht und dümmer bin ich davon auch nicht geworden (hoffe ich ;))

Zitat von: holle75 am 08 Mai 2017, 14:38:41Es funktioniert, aber den Fehler verstehen tue ich nicht (weil ist ja numerisch).
Verstehe ich auch nicht. Habe aber bei mir nicht nach Fehlern geschaut, solange es funktioniert hat.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 09 Mai 2017, 09:14:09
es ist jetzt

["BeregnungDurchlauf_AN_AUS_AUTO:on"]

geworden ;)

.... und wenn es dich überkommt, die Langeweile überhand nimmt, es gibt ja noch die Idee mit der Matrix (Klickboxen) :D

habe ein bißchen rumgeschaut und eine Matrix scheint eine recht komplexe Angelegenheit in fhem zu sein. uzsu wäre dann wohl das Mittel der Wahl. Habe jedenfalls keine andere Klickbox-Lösung direkt in fhem gefunden ... oder kennst du eine?

Die drop-down-list Idee (die noch nicht ganz fertig gedacht ist) wird mir immer sympathischer. Auch weil man den Code nicht komplett umwerfen muß und die netten DevStateIcons beibehalten kann um direkt den state zu schalten .... was dann in zB ftui (für direkte Anwahlen, ohne die Gruppenverknüpfung, die man ja in WEB machen kann) das ganze erleichtern könnte.

Was meinst du?
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 09 Mai 2017, 11:57:40
Die Frontend-Geschichte ist nicht so meins. Allerdings sehe ich nichts, was gg. das "Aufbohren" deines "An-Aus-Auto"-Prinzipes spricht. Muss "halt" das DOIF geändert werden, da nicht mehr "Auto" abgefragt und die feste Reihenfolge nicht gegeben ist.
DOIF kann ja Events mit Regex abfragen, startest du einfach am Anfang (wenn vorhanden) alle "Beregner:Runde1", dannach alle "Beregner:Runde2", mit Timer passend zur Anzahl (wie schon gemacht).
Zur optischen Anzeige siehe oben ;).
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 09 Mai 2017, 20:08:15
Ach Per ... "muß halt das DOIF geändert werden" ... ich hab jetzt mal die Anführungszeichen an den wirklich wichtigen Stellen gemacht :D

Also, jeder Beregner Dummy hat jetzt ein Reading "Kreis". Trotzdem noch ein auto, da man so der Automatik zuordnen oder (was ist das Wort für das Gegenteil von zuordnen) kann, ohne den Kreis eventuell zu vergessen (ich bin schon über 30).

######################################## BEREGNUNG ############################################

define myTwilight Twilight 43.5976 12.8648 0 712129
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#--------------------------- FAKE DUMMIES ---------------------------------#

define BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 dummy
attr BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 room Beregnung
attr BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 webCmd on:off

define BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 dummy
attr BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 room Beregnung
attr BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 webCmd on:off

define BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 dummy
attr BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 room Beregnung
attr BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 webCmd on:off

define BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 dummy
attr BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 room Beregnung
attr BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 webCmd on:off

define BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 dummy
attr BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 room Beregnung
attr BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 webCmd on:off

define BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 dummy
attr BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 room Beregnung
attr BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 webCmd on:off

define PozzoHauptOben_PUMPE_Cisterna dummy
attr PozzoHauptOben_PUMPE_Cisterna room Beregnung
attr PozzoHauptOben_PUMPE_Cisterna webCmd on:off


#------------------------ Beregner Dummys ---------------------------#

define Beregner_01_Zitronen dummy
attr Beregner_01_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_01_Zitronen group Beregnung
attr Beregner_01_Zitronen readingList talktext,switch,Kreis
attr Beregner_01_Zitronen room Beregnung
attr Beregner_01_Zitronen setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_01_Zitronen webCmd Kreis:auto:on:off
#set Beregner_01_Zitronen talktext Beregnung Zitronen
#set Beregner_01_Zitronen switch BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14

define Beregner_05_CampeggioOben dummy
attr Beregner_05_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_05_CampeggioOben group Beregnung
attr Beregner_05_CampeggioOben readingList talktext,switch,Kreis
attr Beregner_05_CampeggioOben room Beregnung
attr Beregner_05_CampeggioOben setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_05_CampeggioOben webCmd Kreis:auto:on:off
#set Beregner_05_CampeggioOben talktext Beregnung Camping oben
#set Beregner_05_CampeggioOben switch BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13

define Beregner_02_CampeggioUnten dummy
attr Beregner_02_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_02_CampeggioUnten group Beregnung
attr Beregner_02_CampeggioUnten readingList talktext,switch,Kreis
attr Beregner_02_CampeggioUnten room Beregnung
attr Beregner_02_CampeggioUnten setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_02_CampeggioUnten webCmd Kreis:auto:on:off
#set Beregner_02_CampeggioUnten talktext Beregnung Camping unten
#set Beregner_02_CampeggioUnten switch BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_03_Blauregen dummy
attr Beregner_03_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_03_Blauregen group Beregnung
attr Beregner_03_Blauregen readingList talktext,switch,Kreis
attr Beregner_03_Blauregen room Beregnung
attr Beregner_03_Blauregen setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_03_Blauregen webCmd Kreis:auto:on:off
#set Beregner_03_Blauregen talktext Beregnung Blauregen
#set Beregner_03_Blauregen switch BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17

define Beregner_04_HinterKueche dummy
attr Beregner_04_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_04_HinterKueche group Beregnung
attr Beregner_04_HinterKueche readingList talktext,switch,Kreis
attr Beregner_04_HinterKueche room Beregnung
attr Beregner_04_HinterKueche setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_04_HinterKueche webCmd Kreis:auto:on:off
#set Beregner_04_HinterKueche talktext Beregnung Hinter Kueche
#set Beregner_04_HinterKueche switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15

define Beregner_06_Waschhaus dummy
attr Beregner_06_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_06_Waschhaus group Beregnung
attr Beregner_06_Waschhaus readingList talktext,switch,Kreis
attr Beregner_06_Waschhaus room Beregnung
attr Beregner_06_Waschhaus setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_06_Waschhaus webCmd Kreis:auto:on:off
#set Beregner_06_Waschhaus talktext Beregnung Waschhaus
#set Beregner_06_Waschhaus switch BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16



#------------------------ Beregnung Einstellung Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat group Beregnung
attr BeregnungStartmonat room Beregnung
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat group Beregnung
attr BeregnungEndmonat room Beregnung
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer group Beregnung
attr BeregnungStandarddauer room Beregnung
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation group Beregnung
attr BeregnungStartelevation room Beregnung
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO group Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO room Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnung Logik -----------------------------#

define BeregnungDOIF_NachSonne DOIF ([myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungDOIF_NachSonne group Beregnung
attr BeregnungDOIF_NachSonne room Beregnung


define BeregnungDummy_Helper dummy
attr BeregnungDummy_Helper group Beregnung

define BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(sleep 0.001;;set [$DEVICE:switch] on, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["^Beregner_:^off$"]) \
(sleep 0.001;;set [$DEVICE:switch] off, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["^Beregner_:^auto$"]) \
(sleep 0.001;;set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])
attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|[$self]|60*[BeregnungStandarddauer]|0|0
attr BeregnungDOIF_Mapping do always
attr BeregnungDOIF_Mapping group Beregnung


define BeregnungDOIF_Trigger DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Automatik Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_01_Zitronen) \
(set BeregnungDummy_Helper Beregner_01_Zitronen) \
(set $SELF cmd_3) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten) \
(set BeregnungDummy_Helper Beregner_02_CampeggioUnten) \
(set $SELF cmd_4) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_03_Blauregen) \
(set BeregnungDummy_Helper Beregner_03_Blauregen) \
(set $SELF cmd_5) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_04_HinterKueche) \
(set BeregnungDummy_Helper Beregner_04_HinterKueche) \
(set $SELF cmd_6) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_05_CampeggioOben) \
(set BeregnungDummy_Helper Beregner_05_CampeggioOben) \
(set $SELF cmd_7) \
DOELSEIF (0) \
(set BeregnungDummy_Helper Beregner_06_Waschhaus) \
(set BeregnungDummy_Helper Beregner_06_Waschhaus) \
(set SqueezeBoxPlayer.* talk Automatik Beregnung beendet, IF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on") (set BeregnungDurchlauf_AN_AUS_AUTO off )) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus, set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)
attr BeregnungDOIF_Trigger group Beregnung
attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0


hab jetzt mal die ganze Pumpen Geschichte auf dem Testraspi eliminiert.

Aber: könntest du mir einen kleinen Hinweis geben, was das "halt" das DOIF ändern angeht?  8) .... da es das Auto noch gibt, wirds ein bißchen schwieriger.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 09 Mai 2017, 21:55:48
Ich würde das "auto" weglassen und das "Vergessen des Kreises" eine Automatik (DOIF ;)) vergessen machen:
define neuesDOIF DOIF (([BeregnerDummy:Kreis]) (set BeregnerDummy auto)
Wobei ich echt nicht nachvollziehen kann, warum du das trennen willst.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 09 Mai 2017, 22:05:49
... weil ich mit dem Auto plus den Kreisen die Beregner einmalig den Kreisen zuteilen kann und dann je nach Bedarf sie durch Auto inkludieren kann oder nicht. Wenn ich den jeweiligen Beregner im DropDownMenu (wo der Kreis angegeben ist) auf sozusagen "aus" (nicht einem Kreis zugeteilt) stellen müßte ... und das bei sagen wir mal 10 Kreisen mache, sitzt du danach da und weißt nicht mehr, welcher Beregner mit welchem verknüpft war. Oder verstehe ich deine Idee nicht?

habe mal weiter gespielt und folgendes gefunden:

define BeregnungDOIF_Trigger DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Automatik Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','Beregner_','Kreis','"Kreis1"')) {set BeregnungDummy_Helper $_}} \
{foreach (AggrDoIf('@','Beregner_','Kreis','"Kreis1"')) {set BeregnungDummy_Helper $_}} \
(set $SELF cmd_3) \
.......


das sieht vielversprechend aus, nur der Ausführungsteil ist mir in der commandref unverständlich. Gibt leider nur Beispiele mit push oder log Einträgen. Das ist das Beispiel welches ich versuche umzuarbeiten


define di_Fenster DOIF (["^Window:open"]) {foreach (AggrDoIf('@','^windows','state','"open"')) {Log3 "di_Fenster",3,"Das Fenster $_ ist noch offen"}}


mmh, ......

Edit: Tz, auf blöd rumgespielt und so gehts (keine Fehler mehr und es wird tatsächlich Kreis 1 geschaltet). Allerdings keine Ahnung, warum es so richtig ist :D ... was soll die 3 da? Warum soviele Klammern, wer hat sich Perl ausgedacht? :D

define BeregnungDOIF_Trigger DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Automatik Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {"di_Fenster",3,{fhem("set BeregnungDummy_Helper $_")}}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {"di_Fenster",3,{fhem("set BeregnungDummy_Helper $_")}}} \
(set $SELF cmd_3) \


EDIT: und so funktionierts auch noch und wirft nicht so viele Fehler. Und meine Frage nach der 3 und den Klammern hat sich auch relativiert. Ich bekomm hier immer mehr Spaß bei :D

DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \


EDIT EDIT: und so läufts komplett. Sogar ohne Wartezeiten wenn einzelne Kreise keine Teilnehmer haben, oder einige Teilnehmer eines Kreises auf Off stehen.
Da hat jemand mit  BeregnungDOIF_Mapping DOIF gute Arbeit gemacht ! ;)

define BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(sleep 0.001;;set [$DEVICE:switch] on, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["^Beregner_:^off$"]) \
(sleep 0.001;;set [$DEVICE:switch] off, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["^Beregner_:^auto$"]) \
(sleep 0.001;;set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])
attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|[$self]|60*[BeregnungStandarddauer]|0|0
attr BeregnungDOIF_Mapping do always
attr BeregnungDOIF_Mapping group Beregnung



define BeregnungDOIF_Trigger DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Automatik Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_3) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_4) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_5) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_6) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_7) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set SqueezeBoxPlayer.* talk Automatik Beregnung beendet, IF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on") (set BeregnungDurchlauf_AN_AUS_AUTO off )) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus, set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)
attr BeregnungDOIF_Trigger group Beregnung
attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 10 Mai 2017, 08:33:36
Zitat von: holle75 am 09 Mai 2017, 22:05:49sitzt du danach da und weißt nicht mehr, welcher Beregner mit welchem verknüpft war.
Aha, das kann ich nachvollziehen.

Zwar schön, dass es so funktioniert, aber jetzt bin ich dran, das nachzuvollziehen ;).

Zitat von: holle75 am 09 Mai 2017, 22:05:49Da hat jemand mit  BeregnungDOIF_Mapping DOIF gute Arbeit gemacht !
Und das geht mit dem sleep? 1 ms ist nicht viel, was ist der Unterschied zu ohne?

Ganz hohe Schule wäre, jedem Beregner den Wasserverbrauch zu hinterlegen und daraufhin nur solche automatisch zusammenzuschalten, welche die Zisternenpumpe auch schaft.

Oder ganz einfach mittels Bodenfeuchtemessern (https://forum.fhem.de/index.php/topic,70100.0.html) zu automatisieren.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 10 Mai 2017, 11:57:12
Zitat von: Per am 10 Mai 2017, 08:33:36
Zwar schön, dass es so funktioniert, aber jetzt bin ich dran, das nachzuvollziehen ;).

Ich muß gestehen, dass ich auch länger gebraucht habe um zu verstehen, warum die Timings nicht verschoben sind. Also auch wenn du Kreise willkürlich verteilst mit fehlenden Kreisen dazwischen oder ohne zugeteiltem Beregner nicht die wait-Zeit trotzdem vorhanden ist. Aber hey, man darf auch mal Glück haben ;) ... deswegen meinte ich, du hast gute Arbeit mit dem Mapping DOIF gemacht :)


Zitat von: Per am 10 Mai 2017, 08:33:36
Und das geht mit dem sleep? 1 ms ist nicht viel, was ist der Unterschied zu ohne?

Ohne den Mini-sleep verhaspelt sich das DOIF in der Abarbeitung. Dann geht nix mehr ordentlich. Jedenfalls bei mir. Weiss jetzt allerdings nicht mehr, ob schon vor Umbau von den Dummies auf Homematic oder danach.



Zitat von: Per am 10 Mai 2017, 08:33:36
Ganz hohe Schule wäre, jedem Beregner den Wasserverbrauch zu hinterlegen und daraufhin nur solche automatisch zusammenzuschalten, welche die Zisternenpumpe auch schaft.

Oder ganz einfach mittels Bodenfeuchtemessern (https://forum.fhem.de/index.php/topic,70100.0.html) zu automatisieren.

Ich schau mir die Sensoren mal an. Danke

EDIT:

Ich seh gerade, das hier

define BeregnungDOIF_Trigger DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Automatik Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_3) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_4) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_5) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_6) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_7) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set SqueezeBoxPlayer.* talk Automatik Beregnung beendet, IF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on") (set BeregnungDurchlauf_AN_AUS_AUTO off )) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BeregnungDummy_Helper Beregner_01_Zitronen, set BeregnungDummy_Helper Beregner_02_CampeggioUnten, set BeregnungDummy_Helper Beregner_03_Blauregen, set BeregnungDummy_Helper Beregner_04_HinterKueche, set BeregnungDummy_Helper Beregner_05_CampeggioOben, set BeregnungDummy_Helper Beregner_06_Waschhaus, set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)
attr BeregnungDOIF_Trigger group Beregnung
attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0


lässt sich im unteren Bereich vereinfachen:

define BeregnungDOIF_Trigger DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Automatik Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_3) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_4) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_5) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_6) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_7) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set SqueezeBoxPlayer.* talk Automatik Beregnung beendet, IF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on") (set BeregnungDurchlauf_AN_AUS_AUTO off )) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
{foreach (AggrDoIf('@','^Beregner_')) {fhem("set BeregnungDummy_Helper $_")}} (set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)
attr BeregnungDOIF_Trigger group Beregnung
attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,0


stimmt dann die zusätzliche 0 hinten im wait? Wenns zwei Klammern wären ja, aber auch bei einer perl-Ausführung plus einer "normalen" Ausführung?
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 10 Mai 2017, 12:36:03
Zitat von: holle75 am 10 Mai 2017, 11:57:12Ich seh gerade, das hier [...] lässt sich im unteren Bereich vereinfachen
Sogar noch viel einfacher, ich wollte es nur universell haben:
set BEREGNUNG_SCHALTER_.*:FILTER=STATE!=off off
(geht auch ohne FILTER, setzt dann halt ein paar Befehle umsonst ab; evtl. musst du auch den Filter verfeinern/erweitern (Gruppe))

Hast du das auch schon getestet?
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
{foreach (AggrDoIf('@','^Beregner_')) {fhem("set BeregnungDummy_Helper $_")}} (set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)

Ich kenne das mit direktem Perl-Code so nicht, aber zur Not kannst du ja
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
({foreach (AggrDoIf('@','^Beregner_')) {fhem("set BeregnungDummy_Helper $_")}}) (set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)

schreiben, dann passt das mit den zwei Nullen auf jeden Fall.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 10 Mai 2017, 13:13:37
Zitat von: Per am 10 Mai 2017, 12:36:03
Hast du das auch schon getestet?

so, gefällts mir am besten. Schön verständlich, wie früher ;)

DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
(set BEREGNUNG_SCHALTER_.*:FILTER=STATE!=off off, set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)
attr BeregnungDOIF_Trigger group Beregnung
attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0


noch nicht getestet, aber sollte doch .... wieso fragst du auf STATE und nicht state ab?

Bin echt mal gespannt, welche lustigen Sonderherausforderungen dann nach dem Einbau im Homematic Umfeld auf mich zukommen. Wobei die Änderungen, glaubs, nichts mit dem eigentlichen Schalten zu tun haben.

EDIT: Hoppala, moment, so umgehe ich die Beregner_Dummies und sie werden nicht richtig gesetzt. (mit dem Filter und direkt SCHALTER schalten, kannst du einzelne Beregner über die Dummies anmachen, dann aber im AN_AUS_AUTO off drücken und die Beregner gehen aus, die Dummies sind aber noch an) ..

so gehts auch ... mit einer 0 im wait:

DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
({foreach (AggrDoIf('@','^Beregner_')) {fhem("set BeregnungDummy_Helper $_")}}, set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)
attr BeregnungDOIF_Trigger group Beregnung
attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0


EDITEDIT. und das Großartigste ist, dass du jetzt sogar die Reihenfolge so verändern kannst wie du möchtest. Das ist jetzt allerdings ein schöner Zufall und nicht erdacht ;)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 10 Mai 2017, 15:29:55
Zitat von: holle75 am 10 Mai 2017, 13:13:37wieso fragst du auf STATE und nicht state ab?
Weil es in der CommandRef auch so steht ;). Und aus der habe ich das einfach kopiert.

Zitat von: holle75 am 10 Mai 2017, 13:13:37und die Beregner gehen aus, die Dummies sind aber noch an
Stimmt, die Abfrage, ob der Dummy auf "on" steht, fehlt  :-[. Also doch nicht so einfach.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 10 Mai 2017, 18:05:07
Oh neee, jetzt hab ich natürlich noch ein Kuriosum finden müssen.
Puh, hast du es im Testsystem, drinnen gerade? Falls ja, mach mal die Einstellungen wie im angehängten Bild.

Der Code gerade:

define myTwilight Twilight 43.5976 12.8648 0 712129
attr myTwilight group Beregnung
attr myTwilight room Beregnung
attr myTwilight sortby 20
attr myTwilight stateFormat Sonnenelevation aktuell: elevation

#--------------------------- FAKE DUMMIES ---------------------------------#

define BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 dummy
attr BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 room Beregnung
attr BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 webCmd on:off

define BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 dummy
attr BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 room Beregnung
attr BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 webCmd on:off

define BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 dummy
attr BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 room Beregnung
attr BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 webCmd on:off

define BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 dummy
attr BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 room Beregnung
attr BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 webCmd on:off

define BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 dummy
attr BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 room Beregnung
attr BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 webCmd on:off

define BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 dummy
attr BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 room Beregnung
attr BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 webCmd on:off

define PozzoHauptOben_PUMPE_Cisterna dummy
attr PozzoHauptOben_PUMPE_Cisterna room Beregnung
attr PozzoHauptOben_PUMPE_Cisterna webCmd on:off


#------------------------ Beregner Dummys ---------------------------#

define Beregner_01_Zitronen dummy
attr Beregner_01_Zitronen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_01_Zitronen group Beregnung
attr Beregner_01_Zitronen readingList talktext,switch,Kreis
attr Beregner_01_Zitronen room Beregnung
attr Beregner_01_Zitronen setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_01_Zitronen webCmd Kreis:auto:on:off
#set Beregner_01_Zitronen talktext Beregnung Zitronen
#set Beregner_01_Zitronen switch BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14

define Beregner_05_CampeggioOben dummy
attr Beregner_05_CampeggioOben devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_05_CampeggioOben group Beregnung
attr Beregner_05_CampeggioOben readingList talktext,switch,Kreis
attr Beregner_05_CampeggioOben room Beregnung
attr Beregner_05_CampeggioOben setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_05_CampeggioOben webCmd Kreis:auto:on:off
#set Beregner_05_CampeggioOben talktext Beregnung Camping oben
#set Beregner_05_CampeggioOben switch BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13

define Beregner_02_CampeggioUnten dummy
attr Beregner_02_CampeggioUnten devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_02_CampeggioUnten group Beregnung
attr Beregner_02_CampeggioUnten readingList talktext,switch,Kreis
attr Beregner_02_CampeggioUnten room Beregnung
attr Beregner_02_CampeggioUnten setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_02_CampeggioUnten webCmd Kreis:auto:on:off
#set Beregner_02_CampeggioUnten talktext Beregnung Camping unten
#set Beregner_02_CampeggioUnten switch BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18

define Beregner_03_Blauregen dummy
attr Beregner_03_Blauregen devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_03_Blauregen group Beregnung
attr Beregner_03_Blauregen readingList talktext,switch,Kreis
attr Beregner_03_Blauregen room Beregnung
attr Beregner_03_Blauregen setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_03_Blauregen webCmd Kreis:auto:on:off
#set Beregner_03_Blauregen talktext Beregnung Blauregen
#set Beregner_03_Blauregen switch BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17

define Beregner_04_HinterKueche dummy
attr Beregner_04_HinterKueche devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_04_HinterKueche group Beregnung
attr Beregner_04_HinterKueche readingList talktext,switch,Kreis
attr Beregner_04_HinterKueche room Beregnung
attr Beregner_04_HinterKueche setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_04_HinterKueche webCmd Kreis:auto:on:off
#set Beregner_04_HinterKueche talktext Beregnung Hinter Kueche
#set Beregner_04_HinterKueche switch BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15

define Beregner_06_Waschhaus dummy
attr Beregner_06_Waschhaus devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr Beregner_06_Waschhaus group Beregnung
attr Beregner_06_Waschhaus readingList talktext,switch,Kreis
attr Beregner_06_Waschhaus room Beregnung
attr Beregner_06_Waschhaus setList Kreis:Kreis1,Kreis2,Kreis3,Kreis4,Kreis5,Kreis6
attr Beregner_06_Waschhaus webCmd Kreis:auto:on:off
#set Beregner_06_Waschhaus talktext Beregnung Waschhaus
#set Beregner_06_Waschhaus switch BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16



#------------------------ Beregnung Einstellung Dummys ----------------------------#

define BeregnungStartmonat dummy
attr BeregnungStartmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungStartmonat group Beregnung
attr BeregnungStartmonat room Beregnung
attr BeregnungStartmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungStartmonat sortby 5
attr BeregnungStartmonat webCmd state

define BeregnungEndmonat dummy
attr BeregnungEndmonat eventMap Jan:1 Feb:2 Mar:3 Apr:4 Mai:5 Jun:6 Jul:7 Aug:8 Sep:9 Okt:10 Nov:11 Dez:12
attr BeregnungEndmonat group Beregnung
attr BeregnungEndmonat room Beregnung
attr BeregnungEndmonat setList state:Jan,Feb,Mar,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
attr BeregnungEndmonat sortby 6
attr BeregnungEndmonat webCmd state

define BeregnungStandarddauer dummy
attr BeregnungStandarddauer group Beregnung
attr BeregnungStandarddauer room Beregnung
attr BeregnungStandarddauer setList state:slider,1,1,60
attr BeregnungStandarddauer sortby 4
attr BeregnungStandarddauer webCmd state

define BeregnungStartelevation dummy
attr BeregnungStartelevation group Beregnung
attr BeregnungStartelevation room Beregnung
attr BeregnungStartelevation setList state:slider,1,1,30
attr BeregnungStartelevation sortby 3
attr BeregnungStartelevation webCmd state

define BeregnungDurchlauf_AN_AUS_AUTO dummy
attr BeregnungDurchlauf_AN_AUS_AUTO devStateIcon on:rc_GREEN off:rc_RED auto:rc_BLUE
attr BeregnungDurchlauf_AN_AUS_AUTO group Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO room Beregnung
attr BeregnungDurchlauf_AN_AUS_AUTO sortby 2
attr BeregnungDurchlauf_AN_AUS_AUTO webCmd auto:on:off

#------------------------- Beregnung Logik -----------------------------#

define BeregnungDOIF_NachSonne DOIF ([myTwilight:elevation] > [BeregnungStartelevation] and ($month >= [BeregnungStartmonat] and $month <= [BeregnungEndmonat])) DOELSE
attr BeregnungDOIF_NachSonne group Beregnung
attr BeregnungDOIF_NachSonne room Beregnung


define BeregnungDummy_Helper dummy
attr BeregnungDummy_Helper group Beregnung

define BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(sleep 0.001;;set [$DEVICE:switch] on, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["^Beregner_:^off$"]) \
(sleep 0.001;;set [$DEVICE:switch] off, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["^Beregner_:^auto$"]) \
(sleep 0.001;;set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])
attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|[$self]|60*[BeregnungStandarddauer]|0|0
attr BeregnungDOIF_Mapping do always
attr BeregnungDOIF_Mapping group Beregnung



define BeregnungDOIF_Trigger DOIF (["BeregnungDurchlauf_AN_AUS_AUTO:on"] or ([?BeregnungDurchlauf_AN_AUS_AUTO] eq "auto" and [BeregnungDOIF_NachSonne] eq "cmd_1")) \
() \
() \
(set SqueezeBoxPlayer.* talk Automatik Beregnung gestartet, set $SELF cmd_2) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis1"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_3) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis2"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_4) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis3"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_5) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis4"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_6) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis5"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set $SELF cmd_7) \
DOELSEIF (0) \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
{foreach (AggrDoIf('@','^Beregner_','Kreis','"Kreis6"')) {fhem("set BeregnungDummy_Helper $_")}} \
(set SqueezeBoxPlayer.* talk Automatik Beregnung beendet, IF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "on") (set BeregnungDurchlauf_AN_AUS_AUTO off )) \
DOELSEIF ([BeregnungDurchlauf_AN_AUS_AUTO] eq "off") \
({foreach (AggrDoIf('@','^Beregner_')) {fhem("set BeregnungDummy_Helper $_")}}, set SqueezeBoxPlayer.* talk Automatik Beregnung beendet)
attr BeregnungDOIF_Trigger group Beregnung
attr BeregnungDOIF_Trigger wait 0,0,0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0,[BeregnungDOIF_Mapping],0:0


#------------------------- Beregnung Pumpe Cisterna bei Bedarf on -----------------------------#

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] ne "4") \
(set $SELF manu off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] ne "1") \
(set $SELF manu on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0") \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna devStateIcon disabled:general_aus@red:initialize initialize|initialized|cmd_2|cmd_4:general_an@yellow:disable cmd_1|cmd_3:general_an@green:disable
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna room Beregnung
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10


bisher hat wirklich jede Konstellation funktioniert, nur in genau dieser hier wird Beregner_01_Zitronen einfach ignoriert. Mann, Mann wo ist denn da jetzt bitte die Logik???

EDIT: ok, Zitronen wird richtigerweise getriggert, aber sofort wieder ausgeschaltet. Hab ich irgendwas in den waits, resp deiner verrückten Übernahme des waits aus mappingDOIF verbaselt?

EDITEDIT: Der verbaselt sich im MappingDOIF. Das war ja auch schon früher der Fall, konnte man bis jetzt aber mit dem Pseudo-Sleep abfangen. Deutlich sieht man es, wenn man mal die waits auf zb 5 sekunden stellt. Zum Teil (eben bei der Zitronen Konstellation kommt das off vor dem on und sonstige Schönheiten ... die auch immer mal anders ausfallen können). Ich glaube, deswegen hat dann auch der Umbau auf Homematic soviele Probleme bereitet. Da kommen so viele Events auf einmal, dass Mapping DOIF "nicht nachkommt", "nicht weiß was nehmen soll"?! :)

attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|[$self]|60*[BeregnungStandarddauer]|5|5

Mmh, Per, wie kann man das "entprellen"? Idee?
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 10 Mai 2017, 21:21:42
Kurzer Schuss ins Blaue (oder sogar ins Schwarze?): Dadurch, dass "Beregner_02_CampeggioUnten" off und (wie "Zitronen" "Kreis2") ist, wird der Timer auf 0 gesetzt, damit aber leider auch "Zitronen" beendet. Bisher war jeder Regner nur für seine Zeit zuständig, jetzt der letzte für den ganzen Kreis. Vllt. "einfach" die Aggregatsfunktion erweitern auf "status" eq "auto" (weiss nicht, ob das geht). Aber wie ich Damian kenne, geht das (und sei es erst morgen ;)).

Oder BeregnungDOIF_Mapping dahingehend anpassen, dass ein Nicht-Auto nach Start und Ende unterschiedlich (state) behandelt wird:
define BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(sleep 0.001;;set [$DEVICE:switch] on, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["^Beregner_:^off$"]) \
(sleep 0.001;;set [$DEVICE:switch] off, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["^Beregner_:^auto$"]) \
(sleep 0.001;;set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])
attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|[$self]|60*[BeregnungStandarddauer]|[$self]|0|0



Zitat von: holle75 am 10 Mai 2017, 18:05:07Puh, hast du es im Testsystem, drinnen gerade?
Welches Testsystem? Ich mach das am "offenen Herzen" ;D. Mit
include test.cfg
wird das reingenommen, nach Reboot ist das wieder spurlos (außer ein paar einmaligen Fehlermeldungen) verschwunden.

Zitat von: holle75 am 10 Mai 2017, 18:05:07EDITEDIT: Der verbaselt sich im MappingDOIF. Das war ja auch schon früher der Fall, konnte man bis jetzt aber mit dem Pseudo-Sleep abfangen. Deutlich sieht man es, wenn man mal die waits auf zb 5 sekunden stellt. Zum Teil (eben bei der Zitronen Konstellation kommt das off vor dem on und sonstige Schönheiten ... die auch immer mal anders ausfallen können). Ich glaube, deswegen hat dann auch der Umbau auf Homematic soviele Probleme bereitet. Da kommen so viele Events auf einmal, dass Mapping DOIF "nicht nachkommt", "nicht weiß was nehmen soll"?! :)

attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|[$self]|60*[BeregnungStandarddauer]|5|5

Mmh, Per, wie kann man das "entprellen"? Idee?

Pflege erstmal oben das ein. Die 5|5 kannst du machen, ich glaube aber nicht, dass du damit was änderst. DOIF (wie auch notify) gehen in der Reihenfolge vor, wie es auch im EventLog zu finden ist.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 10 Mai 2017, 23:55:25
Zitat von: Per am 10 Mai 2017, 21:21:42
Kurzer Schuss ins Blaue (oder sogar ins Schwarze?): Dadurch, dass "Beregner_02_CampeggioUnten" off und (wie "Zitronen" "Kreis2") ist, wird der Timer auf 0 gesetzt, damit aber leider auch "Zitronen" beendet. Bisher war jeder Regner nur für seine Zeit zuständig, jetzt der letzte für den ganzen Kreis. Vllt. "einfach" die Aggregatsfunktion erweitern auf "status" eq "auto" (weiss nicht, ob das geht). Aber wie ich Damian kenne, geht das (und sei es erst morgen ;)).

Das macht irgendwie mehr Sinn als meine Erklärung dass das DOIF in den events rumstochert :D ... man fängt halt klein an  :P

und den state in die Aggregatsfunktion zu nehmen kam mir auch schon kurz .... und wegen fehlendem knowhow auch wieder ganz schnell vergessen.... und nicht weiterverfolgt weil ich ja ans Gestochere glaubte.... und das wäre der sauberste Weg.

Zitat von: Per am 10 Mai 2017, 21:21:42
Oder BeregnungDOIF_Mapping dahingehend anpassen, dass ein Nicht-Auto nach Start und Ende unterschiedlich (state) behandelt wird:
define BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(sleep 0.001;;set [$DEVICE:switch] on, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["^Beregner_:^off$"]) \
(sleep 0.001;;set [$DEVICE:switch] off, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["^Beregner_:^auto$"]) \
(sleep 0.001;;set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off) \
DOELSEIF ([BeregnungDummy_Helper])
attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|[$self]|60*[BeregnungStandarddauer]|[$self]|0|0


... aber machst du so nicht auch "an" wenn state nicht auto ist ? ... wenn auch nur für eine Millisekunde? Denke, das würden die echten Schalter nicht so gerne öfter mögen.

Zitat von: Per am 10 Mai 2017, 21:21:42
wird das reingenommen, nach Reboot ist das wieder spurlos (außer ein paar einmaligen Fehlermeldungen) verschwunden.

Mmh, gut zu wissen.

Zitat von: Per am 10 Mai 2017, 21:21:42
Pflege erstmal oben das ein. Die 5|5 kannst du machen, ich glaube aber nicht, dass du damit was änderst. DOIF (wie auch notify) gehen in der Reihenfolge vor, wie es auch im EventLog zu finden ist.

Die 5|5 war nur ein Vorschlag um zu sehen wie "komisch" sich Mapping DOIF verhält, nicht als Fix gedacht. Die Reihenfolgen Info ist top. Und auch sinnig. Und widerlegt meine Gestocher-Theorie um so deutlicher.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 11 Mai 2017, 08:29:41
Zitat von: holle75 am 10 Mai 2017, 23:55:25... aber machst du so nicht auch "an" wenn state nicht auto ist ? ... wenn auch nur für eine Millisekunde?
Ja, wollte nur sehen, ob du um diese Zeit noch aufpasst :D
Ist der übliche C&P-Fehler. dort kommt eine leere Klammer oder dein Sleep rein, mehr nicht.

Evtl. kann auch das letzte DOELSEIF gelöscht werden, außer einem EventLog-Eintrag macht das ja nix effektiv. Weiss auch nicht mehr, wofür das mal gedacht war.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 11 Mai 2017, 15:40:45
define BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(sleep 0.001;;set [$DEVICE:switch] on, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["^Beregner_:^off$"]) \
(sleep 0.001;;set [$DEVICE:switch] off, set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["^Beregner_:^auto$"]) \
(sleep 0.001;;set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
() \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off)

attr BeregnungDOIF_Mapping cmdState [$self]|[$self]|[$self]|60*[BeregnungStandarddauer]|[$self]|0
attr BeregnungDOIF_Mapping do always
attr BeregnungDOIF_Mapping group Beregnung


so lässt er Zitronen immer noch aus. Vielleicht lag ich ja mit meinem Gestochere doch nicht so falsch  :'(

so sieht ein Durchgang im eventlog aus mit Filter .*BEREGNUNG.*

2017-05-11 15:43:52 dummy BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 on
2017-05-11 15:44:52 DOIF BeregnungDOIF_PumpeCisterna wait_timer: 11.05.2017 15:45:02 cmd_4 BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16
2017-05-11 15:44:52 dummy BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 off
2017-05-11 15:44:52 dummy BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2017-05-11 15:44:52 DOIF BeregnungDOIF_PumpeCisterna wait_timer: 11.05.2017 15:45:02 cmd_4 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
2017-05-11 15:44:52 dummy BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off
2017-05-11 15:44:52 dummy BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 on
2017-05-11 15:45:52 DOIF BeregnungDOIF_PumpeCisterna wait_timer: 11.05.2017 15:46:02 cmd_4 BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15
2017-05-11 15:45:52 dummy BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 off
2017-05-11 15:46:02 DOIF BeregnungDOIF_PumpeCisterna cmd_event: BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15


immer noch Zitronen an und sofort wieder aus.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 11 Mai 2017, 16:08:01
Muss $self nicht $SELF heissen?
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 11 Mai 2017, 16:22:17
Das ist von dir ;) .... aber auch in Groß wird Zitronen übersprungen. Gerade probiert

NEIN, jetzt gehts doch! ... hab mich mit dem wait verbaselt. So gehts (gerade ;) )

define BeregnungDOIF_Mapping DOIF (["^Beregner_:^on$"]) \
(sleep 0.001;;set [$DEVICE:switch] on, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] gestartet) \
DOELSEIF (["^Beregner_:^off$"]) \
(sleep 0.001;;set [$DEVICE:switch] off, sleep 0.001;;set SqueezeBoxPlayer.* talk [$DEVICE:talktext] beendet) \
DOELSEIF (["^Beregner_:^auto$"]) \
(sleep 0.001;;set [$DEVICE:switch] off) \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto" and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
(sleep 0.001;;set [$EVENT:switch] on) \
DOELSEIF ([BeregnungDummy_Helper] and [?BeregnungDOIF_Trigger:cmd_seqnr] eq "2") \
() \
DOELSEIF ([BeregnungDummy_Helper] and [?$EVENT] eq "auto") \
(sleep 0.001;;set [$EVENT:switch] off)

attr BeregnungDOIF_Mapping cmdState [$SELF]|[$SELF]|[$SELF]|60*[BeregnungStandarddauer]|[$SELF]|0
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 11 Mai 2017, 17:17:06
Sieht gut aus. Yes .... Danke, Per.

jetzt würde ich das gerne die Tage am Anfang zusammenschreiben damit auch andere was davon haben.

Aber eine kleine Sache habe ich noch. Im Laufe der Tests habe ich ja, wie du auch, alle Schalter gegen Dummies getauscht.

Die PozzoPumpen Automatik funktioniert mit meinem Homematic Schalter im Betriebssetup prima. Mit einem Dummy nicht.

Die Laufzeit wird nicht berechnet. Die Pozzo Automatik habe ich noch ein wenig erweitert, so dass sie auch läuft, wenn die Beregnung an ist und dann Mittags nochmal schaut ob insgesamt 30 Minuten gelaufen wurde. Wenn nicht substituiert sie die Differenz.

Der Code ist gerade so:

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([13:00-16:00] and [Xtender_AC_out] < 1200 and [?$SELF:Laufzeit] < 1800) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_4) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and [Xtender_AC_out] < 1200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and ([$SELF:cmd_seqnr] eq "1" or [$SELF:cmd] eq "2")) \
(set $SELF cmd_4) \
DOELSEIF ([Xtender_AC_out] > 2100 and ([$SELF:cmd_seqnr] eq "1" or [$SELF:cmd] eq "2")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])},set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)
attr PozzoHauptOben_PUMPE_PozzoDOIF devStateIcon disabled:general_aus@red:initialize initialize|initialized|cmd_1|cmd_1_2|cmd_3|cmd_4|cmd_5:general_an@yellow:disable cmd_1_1|cmd_2:general_an@green:disable
attr PozzoHauptOben_PUMPE_PozzoDOIF group Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit
attr PozzoHauptOben_PUMPE_PozzoDOIF room Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF sortby 7
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 180,1800-[$SELF:Laufzeit]:60:0:0:0
#set PozzoHauptOben_PUMPE_PozzoDOIF Laufzeit 0


aber mit einem Dummy

define Xtender_AC_out dummy
attr Xtender_AC_out room Beregnung
attr Xtender_AC_out setList state:slider,0,200,2400
attr Xtender_AC_out webCmd state


wird die Laufzeit nicht mehr Berechnet. Mir könnte es ja wurscht sein, aber so ein fertig importierbarer Code zum spielen und testen für andere, der auch komplett funktioniert wär schon was ;)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 11 Mai 2017, 17:41:13
(set PozzoHauptOben_PUMPE_Pozzo off,set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])})
sec sollte immer 0 sein, weil du gerade die Pumpe geschaltet hast. Eine echte Pumpe hat da vllt. etwas "Reaktionszeit", beim Dummy solltest du wahrscheinlich die Reihenfolge umdrehen:
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])},set PozzoHauptOben_PUMPE_Pozzo off)
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 11 Mai 2017, 17:49:08
probier ich, oben im Code schon geändert, nicht wundern. Hab gepennt
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 11 Mai 2017, 18:05:53
Genau das wars.

Trotzdem gerade überlegt, dass ich die PozzoPumpe rauslass. Wer hat schon zwei Pumpen. Machts nur komplizierter
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 11 Mai 2017, 18:15:23
Bennene sie doch Prozzo-Pumpe ;).

Mich würde schonmal das "Gesamtkunstwerk" in echt interessieren, die Namen der Devices machen neugierig...
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 11 Mai 2017, 22:17:29
Mußt du halt mal beim nächsten Italien-Urlaub vorbeikommen! Sehr nett hier. Hippie-See-Idylle meets Hardcoreautomation mit allen Bubenspielereien dies so braucht. Vom Trecker bis zur Solaranlage, Seecontainer, Motorsägen :D :D .... Da hättest du Freude bei .... aber nicht den Twilight Koordinaten folgen, die sind "abgeändert" :D
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 12 Mai 2017, 11:41:53
Zitat von: holle75 am 11 Mai 2017, 22:17:29Mußt du halt mal beim nächsten Italien-Urlaub vorbeikommen!
Ist das ne Einladung? ;D. Wäre mein erster Italien-Aufenthalt.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 12 Mai 2017, 12:32:14
Klar ist das ne Einladung. Und wenn du noch nicht in Italien warst dringend überfällig! Ist halt im Moment noch ein wenig baustellig :D ... aber wenn ein Camper oder Zelt dir zu unkommod ist, es gibt zum Schlafen hier rundrum ein paar nette Agriturismi.... oder du wartest noch ein Jahr, dann sollte fertig sein.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: Per am 12 Mai 2017, 13:45:07
Zitat von: holle75 am 12 Mai 2017, 12:32:14ein Camper
Bin selbst Camper (3x Esterel ;)), will sogar den Großen "verFHEMen" ;D ;D ;D.
Titel: Antw:Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig
Beitrag von: holle75 am 12 Mai 2017, 14:04:21
wie jetzt? Camper und nicht regelmäßig in IT? Na dann auf bald!
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 10 Juli 2017, 11:48:23
Per, habe das ganze noch ein wenig aufgebohrt und bin im Teststadium. Läuft ganz nett, nur meine Tiefenpumpe macht komische Sachen :)

Problem, sie schaltet sich beim Kreiswechsel zwischendurch ab.

Das ist der Beregnungs Log

2017-07-10_08:48:47 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2017-07-10_08:48:47 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 on
2017-07-10_08:48:47 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 on
2017-07-10_08:48:47 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 on
2017-07-10_08:48:47 PozzoHauptOben_PUMPE_Cisterna on
2017-07-10_08:48:47 PozzoHauptOben_PUMPE_Pozzo on
2017-07-10_08:58:42 PozzoHauptOben_PUMPE_Cisterna on   << addLog
2017-07-10_09:18:47 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off
2017-07-10_09:18:47 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 off
2017-07-10_09:18:47 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 off
2017-07-10_09:18:47 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 off
2017-07-10_09:18:47 BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 on
2017-07-10_09:18:47 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2017-07-10_09:19:07 PozzoHauptOben_PUMPE_Pozzo off
2017-07-10_09:19:15 PozzoHauptOben_PUMPE_Pozzo on
2017-07-10_09:28:42 PozzoHauptOben_PUMPE_Cisterna on   << addLog
2017-07-10_09:48:47 BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 off
2017-07-10_09:48:47 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off
2017-07-10_09:48:47 BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 on
2017-07-10_09:48:47 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 on
2017-07-10_09:48:47 PozzoHauptOben_PUMPE_Pozzo on
2017-07-10_09:49:07 PozzoHauptOben_PUMPE_Pozzo off
2017-07-10_09:49:16 PozzoHauptOben_PUMPE_Pozzo on
2017-07-10_09:58:42 PozzoHauptOben_PUMPE_Cisterna on   << addLog
2017-07-10_10:18:47 BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 off
2017-07-10_10:18:47 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 off
2017-07-10_10:18:47 BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 on
2017-07-10_10:18:48 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 on
2017-07-10_10:19:07 PozzoHauptOben_PUMPE_Pozzo off
2017-07-10_10:19:18 PozzoHauptOben_PUMPE_Pozzo on
2017-07-10_10:28:42 PozzoHauptOben_PUMPE_Cisterna on   << addLog
2017-07-10_10:48:48 BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 off
2017-07-10_10:48:48 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 off
2017-07-10_10:48:58 PozzoHauptOben_PUMPE_Cisterna off
2017-07-10_10:49:08 PozzoHauptOben_PUMPE_Pozzo off


und das die fhem.cfg für die Pumpe

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([12:30-14:00] and [Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:Laufzeit] < 7200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_4) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and [Xtender_AC_out:Power__W:d] < 1200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [$SELF:cmd] eq "2") \
(sleep 20;;set $SELF cmd_4) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500 and ([$SELF:cmd_seqnr] eq "1" or [$SELF:cmd] eq "2")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)
attr PozzoHauptOben_PUMPE_PozzoDOIF devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1:general_an@yellow:disable cmd_1_2:general_an@yellow:disable cmd_3:general_an@yellow:disable cmd_4:general_an@yellow:disable cmd_5:general_an@yellow:disable cmd_1_1:general_an@green:disable cmd_2:general_an@green:disable
attr PozzoHauptOben_PUMPE_PozzoDOIF group Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit mitBeregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF room System
attr PozzoHauptOben_PUMPE_PozzoDOIF setList mitBeregnung:mit_Beregnung,Mittags
attr PozzoHauptOben_PUMPE_PozzoDOIF sortby 7
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 180,7200-[$SELF:Laufzeit]:0:0:15:0
attr PozzoHauptOben_PUMPE_PozzoDOIF webCmd mitBeregnung


ich glaube das Problem ist, dass ja alle Beregner erstmal an, aber dann auch alle off geschaltet werden .... im selben Moment der nächste Kreis on geschaltet wird. Heißt aber, dass es einen Moment mit allen off gibt. Das scheint cmd 3 zu triggern. Dann dachte ich, vezögere ich halt den Befehl im Ausführungsteil von cmd 3, dass der DOELSEIF Fall im cmd 2 dann cmd 3 abbricht. Scheinbar macht er das nicht. Ich frage mich, warum? Glaube, Xtender_AC_out:Power__W, von cmd 2 triggert dann erst, wenn cmd 3 abgearbeitet ist. Davon ausgehend, dass [#"^BEREGNUNG_SCHALTER_":state:"^on$"] nur abgearbeitet wird, wenn ein anderes Device den DO-Fall triggert?

Idee?
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/...
Beitrag von: Per am 10 Juli 2017, 12:56:26
Zitat von: holle75 am 10 Juli 2017, 11:48:23Ich frage mich, warum?
Weil
(sleep 20;;set $SELF cmd_4)
ein Mini-at ergibt, welches unabhängig vom DOIF arbeitet, wenn es einmal angestartet wurde.
Vorteil: es geht auch mit set xxx cmd_3
Nachteil: es geht nicht weg, wenn DOIF umschaltet
Stell doch mal auf wait um.


Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 10 Juli 2017, 14:12:36
ich schau mal, was morgen passiert. Wenn ich mich recht erinnere, hatte ich es mit wait probiert, mit ähnlichem Ergebnis. Kann aber auch sein, dass ich das wait für den Fall nicht lange genug gewählt hatte. Ich schau. Danke dir.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 11 Juli 2017, 09:50:35
(fast) selbes Ergebnis:

beregnung log
017-07-11_08:48:50 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2017-07-11_08:48:50 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 on
2017-07-11_08:48:50 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 on
2017-07-11_08:48:50 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 on
2017-07-11_08:48:50 PozzoHauptOben_PUMPE_Cisterna on
2017-07-11_08:48:50 PozzoHauptOben_PUMPE_Pozzo on
2017-07-11_09:08:43 PozzoHauptOben_PUMPE_Cisterna on   << addLog
2017-07-11_09:18:50 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off
2017-07-11_09:18:51 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 off
2017-07-11_09:18:51 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 off
2017-07-11_09:18:51 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 off
2017-07-11_09:18:51 BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 on
2017-07-11_09:18:51 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2017-07-11_09:19:36 PozzoHauptOben_PUMPE_Pozzo off
2017-07-11_09:19:46 PozzoHauptOben_PUMPE_Pozzo on


jetzt mit
define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([12:30-14:00] and [Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:Laufzeit] < 7200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_4) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and [Xtender_AC_out:Power__W:d] < 1200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [$SELF:cmd] eq "2") \
(set $SELF cmd_4) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500 and ([$SELF:cmd_seqnr] eq "1" or [$SELF:cmd] eq "2")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)
attr PozzoHauptOben_PUMPE_PozzoDOIF devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1:general_an@yellow:disable cmd_1_2:general_an@yellow:disable cmd_3:general_an@yellow:disable cmd_4:general_an@yellow:disable cmd_5:general_an@yellow:disable cmd_1_1:general_an@green:disable cmd_2:general_an@green:disable
attr PozzoHauptOben_PUMPE_PozzoDOIF group Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit mitBeregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF room System
attr PozzoHauptOben_PUMPE_PozzoDOIF setList mitBeregnung:mit_Beregnung,Mittags
attr PozzoHauptOben_PUMPE_PozzoDOIF sortby 7
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 180,7200-[$SELF:Laufzeit]:0:45:0:0
attr PozzoHauptOben_PUMPE_PozzoDOIF webCmd mitBeregnung
#set PozzoHauptOben_PUMPE_PozzoDOIF Laufzeit 0


sleep raus, wait rein
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 14 Juli 2017, 19:32:47

2017-07-14_17:46:16 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2017-07-14_17:46:16 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 on
2017-07-14_17:46:16 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 on
2017-07-14_17:46:16 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 on
2017-07-14_17:46:16 PozzoHauptOben_PUMPE_Pozzo on
2017-07-14_17:56:17 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off
2017-07-14_17:56:17 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 off
2017-07-14_17:56:17 BEREGNUNG_SCHALTER_Blauregen_12_7_MEQ0064131_17 off
2017-07-14_17:56:17 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 off
2017-07-14_17:56:17 BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 on
2017-07-14_17:56:17 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2017-07-14_18:06:17 BEREGNUNG_SCHALTER_HinterKueche_12_7_MEQ0064131_15 off
2017-07-14_18:06:17 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 off
2017-07-14_18:06:17 BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 on
2017-07-14_18:06:17 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 on

2017-07-14_18:10:17 PozzoHauptOben_PUMPE_Pozzo off
2017-07-14_18:10:24 PozzoHauptOben_PUMPE_Pozzo on

2017-07-14_18:16:17 BEREGNUNG_SCHALTER_Waschhaus_12_7_MEQ0064131_16 off
2017-07-14_18:16:17 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04 off
2017-07-14_18:16:17 BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 on
2017-07-14_18:16:17 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 on

2017-07-14_18:20:17 PozzoHauptOben_PUMPE_Pozzo off
2017-07-14_18:20:25 PozzoHauptOben_PUMPE_Pozzo on

2017-07-14_18:26:17 BEREGNUNG_SCHALTER_CampeggioOben_12_7_MEQ0064131_13 off
2017-07-14_18:26:17 BEREGNUNG_SCHALTER_CampeggioUnten_12_7_MEQ0064131_18 off

2017-07-14_18:30:17 PozzoHauptOben_PUMPE_Pozzo off


wait habe ich jetzt mal übetrieben auf 4 Min. gesetzt. Wieso wird das wait komplett durchgeführt obwohl ein anderer DOIF-Fall definitiv eingetreten ist? ... und wieso tritt dann der DOIF-Fall eben doch nach Ablauf des waits ein?

das wait sollte doch "überschrieben" werden?

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([12:30-14:00] and [Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:Laufzeit] < 7200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_4) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and [Xtender_AC_out:Power__W:d] < 1200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [$SELF:cmd] eq "2") \
(set $SELF cmd_4) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500 and ([$SELF:cmd_seqnr] eq "1" or [$SELF:cmd] eq "2")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)
attr PozzoHauptOben_PUMPE_PozzoDOIF devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1:general_an@yellow:disable cmd_1_2:general_an@yellow:disable cmd_3:general_an@yellow:disable cmd_4:general_an@yellow:disable cmd_5:general_an@yellow:disable cmd_1_1:general_an@green:disable cmd_2:general_an@green:disable
attr PozzoHauptOben_PUMPE_PozzoDOIF group Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit mitBeregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF room System
attr PozzoHauptOben_PUMPE_PozzoDOIF setList mitBeregnung:mit_Beregnung,Mittags
attr PozzoHauptOben_PUMPE_PozzoDOIF sortby 7
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 180,7200-[$SELF:Laufzeit]:0:240:0:0
attr PozzoHauptOben_PUMPE_PozzoDOIF webCmd mitBeregnung
#set PozzoHauptOben_PUMPE_PozzoDOIF Laufzeit 0
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Per am 14 Juli 2017, 20:15:35
Stimmt, da war noch was. Muss mir dazu aber nochmal den Thread durchlesen, um zu wissen, was ich mir damals dabei gedacht hatte.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 16 Juli 2017, 00:44:33
... kam dir der Gedanke noch?
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/...
Beitrag von: Per am 17 Juli 2017, 14:13:47
Was mir als erstes auffällt: in Bedingung 3 und 4 wird abgefragt, ob $SELF:cmd(_seqnr) 1 bzw 2 ist. Aber triggernd, nicht mit "?". Muss das so? Darf eigentlich nicht, da attr selftrigger nicht aktiviert ist (was wiederum richtig ist).
Weiss aber nicht, wie sich das auswirkt, ob die Abfrage dennoch stattfindet, wenn auch nicht triggern, dazu kenne ich DOIF viel zu wenig. Aber mit den "?" machst du nix falsch.
Kannst du den status des "PozzoHauptOben_PUMPE_PozzoDOIF" mit loggen?
Für lists werden die Zeiten nicht reichen.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 17 Juli 2017, 17:00:16
Leider, wie immer, ein sehr guter Punkt von dir mit dem ? ..... das könnte das Problem sein. Ich probiere und berichte.... man ist aber auch manchmal blind.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 17 Juli 2017, 17:08:38
probiert. Das löst nicht das Problem. Ist aber trotzdem richtig. Ich mach jetzt mal ein eigenes DOIF für die Beregner.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 17 Juli 2017, 19:14:26
selbst wenn ich den Part

[#"^BEREGNUNG_SCHALTER_":state:"^on$"]

in ein anderes DOIF lege und dann über eine "Variable" abfrage, also den Trigger aus PozzoHauptOben_PUMPE_PozzoDOIF rausnehme, macht er, trotz jetzt den Fragezeichen, den selben Mist. Ich logge jetzt mal den status mit
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 19 Juli 2017, 09:47:18
2017-07-19_08:53:43 PozzoHauptOben_PUMPE_PozzoDOIF wait_timer: 19.07.2017 08:53:45 cmd_2 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
2017-07-19_08:53:45 PozzoHauptOben_PUMPE_PozzoDOIF wait_timer: no timer
2017-07-19_08:53:45 PozzoHauptOben_PUMPE_PozzoDOIF cmd_nr: 2
2017-07-19_08:53:45 PozzoHauptOben_PUMPE_PozzoDOIF cmd: 2
2017-07-19_08:53:45 PozzoHauptOben_PUMPE_PozzoDOIF cmd_event: BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
2017-07-19_08:53:45 PozzoHauptOben_PUMPE_PozzoDOIF cmd_2
2017-07-19_09:23:43 PozzoHauptOben_PUMPE_PozzoDOIF wait_timer: 19.07.2017 09:23:53 cmd_3 BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF wait_timer: no timer
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF Laufzeit: 1808
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF cmd_nr: 4
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF cmd: 4
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF cmd_event: set_cmd_4
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF cmd_4
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF cmd_nr: 3
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF cmd: 3
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF cmd_event: BEREGNUNG_SCHALTER_ZirkusUnten_2_2_MEQ0726012_04
2017-07-19_09:23:53 PozzoHauptOben_PUMPE_PozzoDOIF cmd_3
2017-07-19_09:23:57 PozzoHauptOben_PUMPE_PozzoDOIF wait_timer: 19.07.2017 09:23:59 cmd_2 Xtender_AC_out
2017-07-19_09:23:59 PozzoHauptOben_PUMPE_PozzoDOIF wait_timer: no timer
2017-07-19_09:23:59 PozzoHauptOben_PUMPE_PozzoDOIF cmd_nr: 2
2017-07-19_09:23:59 PozzoHauptOben_PUMPE_PozzoDOIF cmd: 2
2017-07-19_09:23:59 PozzoHauptOben_PUMPE_PozzoDOIF cmd_event: Xtender_AC_out
2017-07-19_09:23:59 PozzoHauptOben_PUMPE_PozzoDOIF cmd_2


log für einmal Beregner-Kreis umschalten. Und so geht es dann immer.

DOIF
define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([12:30-14:00] and [Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:Laufzeit] < 7200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_4) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and [Xtender_AC_out:Power__W:d] < 1200) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [?$SELF:cmd] eq "2") \
(set $SELF cmd_4) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500 and ([?$SELF:cmd_seqnr] eq "1" or [?$SELF:cmd] eq "2")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)
attr PozzoHauptOben_PUMPE_PozzoDOIF devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1:general_an@yellow:disable cmd_1_2:general_an@yellow:disable cmd_3:general_an@yellow:disable cmd_4:general_an@yellow:disable cmd_5:general_an@yellow:disable cmd_1_1:general_an@green:disable cmd_2:general_an@green:disable
attr PozzoHauptOben_PUMPE_PozzoDOIF group Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit mitBeregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF room System
attr PozzoHauptOben_PUMPE_PozzoDOIF setList mitBeregnung:mit_Beregnung,Mittags
attr PozzoHauptOben_PUMPE_PozzoDOIF sortby 7
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 180,7200-[$SELF:Laufzeit]:2:10:0:0
attr PozzoHauptOben_PUMPE_PozzoDOIF webCmd mitBeregnung
#set PozzoHauptOben_PUMPE_PozzoDOIF Laufzeit 0


was wahrscheinlich reinspielt, ist, dass ich mehrere Kreise gleichzeitig laufen lasse. Somit auch beim Kreiswechsel mehrere Beregner sowohl on als auch off geschaltet werden (im Log sieht man nur den ersten/letzten?). Im Moment wird cmd 3 komplett ausgeführt (weil vielleicht der letzte Beregner in der Abarbeitung off geht?) und dann triggert Xtender_AC_out (Abfrageintervall 10sek) wieder cmd 2. so entsteht die Pause. Aber was ich dann nicht verstehe: Selbst wenn ich das wait auf zb 4 Minuten stelle sollte  Xtender_AC_out innerhalb der 10 sek. cmd 2 triggern und das wait für cmd 3 überschreiben. Wieso passiert das nicht? Wieso wird das wait für cmd 3 komplett ausgeführt und dann darf  Xtender_AC_out erst triggern?

edit: Das DOIF für die cisterna läuft sauber durch.

define BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] ne "4") \
(set $SELF manu off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] ne "1") \
(set $SELF manu on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0") \
(set PozzoHauptOben_PUMPE_Cisterna off)
attr BeregnungDOIF_PumpeCisterna devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_2:general_an@yellow:disable cmd_4:general_an@yellow:disable cmd_1:general_an@green:disable cmd_3:general_an@green:disable
attr BeregnungDOIF_PumpeCisterna group Beregnung
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna room System
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:10
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/...
Beitrag von: Per am 19 Juli 2017, 11:36:24
Ändere doch die zweite Bedingung mal in:
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and ?[Xtender_AC_out:Power__W:d] < 1200)
Ich habe den Eindruck, dass ist ein "außenliegendes" Problem, die Leistung des Xtender_AC_out geht natürlich hoch, wenn Pumpen aus- und runter, wenn sie angehen. Du willst aber den Moment, bevor sie geschaltet werden.
Im ersten Fall scheint es aber beabsichtigt zu sein, wobei es da bestimmt auch noch zu Seiteneffekten kommen kann. Aber zumindest hat der hier nicht reingegrätscht.
Die Timer hat schön gearbeitet, nachdem er die Trigger bekommen hat. Da sehe ich keinen Fehler.

Du könntest mal noch den Zähler # mitloggen (über attr cmdState oder attr status oder so.)
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 19 Juli 2017, 12:20:23
so ist doch die zweite Bedingung?

Aber guter Punkt!

Klar, das erklärt, warum cmd 2 erst wieder getriggert werden kann, nachdem die Pozzopumpe ausgeschaltet wird und der Stromverbrauch unter 1200 W sinkt. Somit kann auch das wait nicht vorher überschrieben werden.

Ich bin ganz anfänglich davon ausgegangen, dass NUR EINMAL die Beregner cmd 2 auslösen und dann am Ende cmd 3..... und habe darüber, dass das ja mehrmals geschieht dann im Problemfinden gar nicht weiter nachgedacht.

mmh, aber wie erreiche ich dann die Funktionalität, dass er bei mehr als 2500W die Pozzopumpe abschaltet, aber bei unter 1200W wieder einschaltet?
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/...
Beitrag von: Per am 19 Juli 2017, 13:09:20
Zitat von: holle75 am 19 Juli 2017, 12:20:23mmh, aber wie erreiche ich dann die Funktionalität, dass er bei mehr als 2500W die Pozzopumpe abschaltet, aber bei unter 1200W wieder einschaltet?
Kann es sein, dass beim Ein-/Ausschalten die Werte überschwingen?

Kannst du die gewünschte (!) Funktion dieses DOIF mal als Textaufgabe schreiben? Manchmal findet man (ich!) Fehler, wenn man versucht, einem GGüber das Erdachte zu erklären.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 19 Juli 2017, 13:25:18
überschwingen (Anlauf Pumpen) tun die Werte nicht, da der Zähler nur alle 10 sekunden gelesen wird und die Werte mit ausreichend Spatz gewählt sind. Habe jetzt nochmal cmd 1 "abgesichert" und aus cmd 2 den Stromzähler rausgenommen. Nicht probiert, aber die Logik des Problems habe ich jetzt erkannt. Am Strom sollte es gelegen haben.

so siehts aus:
define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([12:30-14:00] and [Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:Laufzeit] < 9000 and [?$SELF:cmd] ne "2" and [?$SELF:cmd] ne "3") \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_4) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0") \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [?$SELF:cmd] eq "2") \
(set $SELF cmd_4) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500 and ([?$SELF:cmd_seqnr] eq "1" or [?$SELF:cmd] eq "2")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)

attr PozzoHauptOben_PUMPE_PozzoDOIF group Beregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit mitBeregnung
attr PozzoHauptOben_PUMPE_PozzoDOIF room System
attr PozzoHauptOben_PUMPE_PozzoDOIF setList mitBeregnung:mit_Beregnung,Mittags
attr PozzoHauptOben_PUMPE_PozzoDOIF sortby 7
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 180,9000-[$SELF:Laufzeit]:2:10:0:0
attr PozzoHauptOben_PUMPE_PozzoDOIF webCmd mitBeregnung


was ich erreichen möchte:

- zwischen 12:30 und 14:00 soll die Zisterne gefüllt werden (wenn die Pumpe nicht schon mit den Beregnern lief, resp die verbleibende Zeit soll gelaufen werden). Hier kann ich wählen (var mitBeregnung), ob die Pumpe mit den Beregnern läuft, oder generell erst Mittags.

- wenn die Beregner laufen (und ich das wünsche ... var mitBeregnung) soll PozzoPumpe laufen.
- wenn die Beregner stehen, soll PozzoPumpe stehen (bis zum Mittag ... Restlaufzeit).
- egal ob Mittags oder mit den Beregnern, soll die Pumpe ausgehen, wenn der Stromverbrauch über 2500W (inkl Pumpe) liegt und  wieder loslaufen, wenn der Stromverbrauch (dann ohne Pumpe) unter 1200W liegt.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/...
Beitrag von: Per am 19 Juli 2017, 14:18:43
Zitat von: holle75 am 19 Juli 2017, 13:25:18- egal ob Mittags oder mit den Beregnern, soll die Pumpe ausgehen, wenn der Stromverbrauch über 2500W (inkl Pumpe) liegt und  wieder loslaufen, wenn der Stromverbrauch (dann ohne Pumpe) unter 1200W liegt.
Soll sie Mittag oder mit den Pumpen angehen, wenn der Verbrauch zwischen 1200W und (2500-Pumpe)W liegt?
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/...
Beitrag von: Per am 19 Juli 2017, 14:58:27
Ich bin mal von Loslaufen ausgegangen:
define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([Xtender_AC_out:Power__W:d] > 2500) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([12:30-14:00] and [?$SELF:Laufzeit] < 9000 and (([?$SELF:cmd] ne "1"  and [Xtender_AC_out:Power__W:d] < 2000) or ([Xtender_AC_out:Power__W:d] < 1200)) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_1) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and (([?$SELF:cmd] ne "1"  and [Xtender_AC_out:Power__W:d] < 2000) or [Xtender_AC_out:Power__W:d] < 1200)) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [?$SELF:cmd] eq "3") \
(set $SELF cmd_1) \
DOELSEIF ([Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:cmd] eq "1") \
()



Wenn myreading (https://forum.fhem.de/index.php/topic,71000.0.html) freigeschaltet wird oder du dir die Beta runter lädst, kannst du auch vereinfachen:
define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([Xtender_AC_out:Power__W:d] > 2500) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([12:30-14:00] and [?$SELF:Laufzeit] < 9000 and [$SELF:sperre]) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_1) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and [$SELF:sperre]) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [?$SELF:cmd] eq "3") \
(set $SELF cmd_1) \
DOELSEIF ([Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:cmd] eq "1") \
()

attr PozzoHauptOben_PUMPE_PozzoDOIF sperre:(([?$SELF:cmd] ne "1"  and [Xtender_AC_out:Power__W:d] < 2000) or [Xtender_AC_out:Power__W:d] < 1200)


Dazu bei beiden
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 0:180,9000-[$SELF:Laufzeit]:2:10:180
Die 2000 sind mal (2500 - Pumpe) mit Pumpe = 500W angenommen.

Klammern und Sonderzeichen sind nochmal zu prüfen, da ich unterwegs bin und keinen Zugriff auf eine Fhem-Oberfläche habe.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 19 Juli 2017, 16:09:40
ein paar Fragen ;)

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([Xtender_AC_out:Power__W:d] > 2500) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \

müßte ich noch gegen ein falsches Berechnen der Laufzeit absichern. Darf also nur eintreten, wenn das DOIF die Pumpe anmacht, sonst würde das überschreiten von 2500W (außerhalb) immer eine neue Laufzeit berechnen.

Die PozzoPumpe zieht ca 1000W, deswegen die Schwellen bei unter 1200W (~ 1000W Grundverbrauch inkl. Zisternenpumpe) und 2500W wenn die PozzoPumpe dazu kommt.

GanzGanz verstehe ich die Zusammenhänge jetzt nicht, aber ich probiere es mal so:

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([Xtender_AC_out:Power__W:d] > 2500 and ([?$SELF:cmd_seqnr] eq "1" or [?$SELF:cmd] eq "3")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([12:30-14:00] and [?$SELF:Laufzeit] < 9000 and (([?$SELF:cmd] ne "1" and [Xtender_AC_out:Power__W:d] < 2500) or [Xtender_AC_out:Power__W:d] < 1200)) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_1) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and (([?$SELF:cmd] ne "1"  and [Xtender_AC_out:Power__W:d] < 2500) or [Xtender_AC_out:Power__W:d] < 1200)) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [?$SELF:cmd] eq "3") \
(set $SELF cmd_1) \
DOELSEIF ([Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:cmd] eq "1") \
() \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)

attr PozzoHauptOben_PUMPE_PozzoDOIF wait 0:180,9000-[$SELF:Laufzeit]:2:10:180:0
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/...
Beitrag von: Per am 19 Juli 2017, 16:53:16
Was hängen denn noch für Verbraucher dran?

Die tägliche Rücksetzung hatte ich vergessen  :-[
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 19 Juli 2017, 19:50:06
Ich habe jetzt mal deine Idee aufgegriffen und in "mein" DOIF reingebastelt. So verstehe ich es wenigstens ganz. Obs richtig ist ....


define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([12:30-14:00] and [Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:Laufzeit] < 9000 and [?$SELF:cmd] ne "2") \
(set PozzoHauptOben_PUMPE_Pozzo on) \
(set $SELF cmd_4) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" and (([?$SELF:cmd] ne "4" and [Xtender_AC_out:Power__W:d] < 2500) or [Xtender_AC_out:Power__W:d] < 1200)) \
(set PozzoHauptOben_PUMPE_Pozzo on) \
DOELSEIF ([?$SELF:mitBeregnung] eq "mit_Beregnung" and [#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0" and [?$SELF:cmd] eq "2") \
(set $SELF cmd_4) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500 and ([?$SELF:cmd_seqnr] eq "1" or [?$SELF:cmd] eq "2")) \
(set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])}, set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)


attr PozzoHauptOben_PUMPE_PozzoDOIF wait 180,9000-[$SELF:Laufzeit]:2:10:0:0


... und teste. Falls dir was auffällt, lass wissen.
Titel: Antw:Beregnung/mehrere Kreise schaltbar
Beitrag von: Per am 02 Oktober 2018, 12:08:41
Zitat von: holle75 am 19 Juli 2017, 19:50:06und teste
Die (2.) Saison ist rum, hat es funktioniert?
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: holle75 am 02 Oktober 2018, 13:11:49
Oh, wie ne Eins .... habe die ganze Beregnung noch wesentlich weiter aufgebohrt und denke, damit jetzt unter den 10 komplexesten Beregnungen im "Hobbybereich" weltweit zu liegen :D

Nee, keine Ahnung, aber in Kombi mit der Wetterstation und Sensoren und Wettervorhersagen und Pumpen und Anwesenheit und SolaranlagenVerbrauch und und und funktioniert das wirklich schön. Ich schreib dir jetzt mal noch im anderen Thread wegen dem "skippen"

https://forum.fhem.de/index.php/topic,91605.msg841813.html#msg841813 (https://forum.fhem.de/index.php/topic,91605.msg841813.html#msg841813)
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Rheininsel am 09 Oktober 2018, 10:45:58
Ich habe mich damit auch letztes Jahr beschäftigt und in diesem Jahr sind aus ursprünglich 4 Bewässerungskreisen schon 12 geworden, welche in unterschiedlicher Dauer angesteuert werden können (siehe Anhang).
Dahinter liegen rund 380 Zeilen DOIF für eine Ansteuerung morgens, abends oder eben zu beiden Zeiten...

Da auch meine Pumpe nicht alle Kreise zusammen versorgen kann, so sucht sich das Script selbst seine "passenden" Größen zusammen um die Pumpe nicht zu überfordern. Ebenfalls ist es möglich mit dem letzten Auswahlfeld den entprechenden Kreis manuell für eine dort auswählbare Zeit zu starten. Ich müsste jetzt nur mal versuchen das ganze in den neuen Perl-Modus zu packen bzw. Subs hinzu zu fügen, dann könnte das Script auch mit der Hälfte des Codes auskommen können.

Grüße
Gregor
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Damian am 09 Oktober 2018, 19:11:47
Zitat von: Rheininsel am 09 Oktober 2018, 10:45:58
Ich habe mich damit auch letztes Jahr beschäftigt und in diesem Jahr sind aus ursprünglich 4 Bewässerungskreisen schon 12 geworden, welche in unterschiedlicher Dauer angesteuert werden können (siehe Anhang).
Dahinter liegen rund 380 Zeilen DOIF für eine Ansteuerung morgens, abends oder eben zu beiden Zeiten...

Da auch meine Pumpe nicht alle Kreise zusammen versorgen kann, so sucht sich das Script selbst seine "passenden" Größen zusammen um die Pumpe nicht zu überfordern. Ebenfalls ist es möglich mit dem letzten Auswahlfeld den entprechenden Kreis manuell für eine dort auswählbare Zeit zu starten. Ich müsste jetzt nur mal versuchen das ganze in den neuen Perl-Modus zu packen bzw. Subs hinzu zu fügen, dann könnte das Script auch mit der Hälfte des Codes auskommen können.

Grüße
Gregor

Hast du viele DOIFs oder alles in einem?
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Rheininsel am 09 Oktober 2018, 19:57:13
Derzeit ist es verteilt in mehrere. Der große Steuerungs-DIIF hat dabei die 380 Zeilen Code, da ich sehr viele Berechnungen drin machen muss (Perl).
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Damian am 09 Oktober 2018, 20:24:48
Zitat von: Rheininsel am 09 Oktober 2018, 19:57:13
Derzeit ist es verteilt in mehrere. Der große Steuerungs-DIIF hat dabei die 380 Zeilen Code, da ich sehr viele Berechnungen drin machen muss (Perl).
OK.

Das wäre tatsächlich eine Herausforderung, die Sache sauber im Perl Modus abzubilden.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/...
Beitrag von: Per am 10 Oktober 2018, 11:42:52
Häng doch mal rein...
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Rheininsel am 21 April 2019, 09:53:03
Nach sehr langer Zeit ist jetzt wieder Bewässerungszeit und ich wollte Euch nicht den Code schuldig bleiben... Sorry. Wer mehr Infos haben möchte... Ich bemühe mich nun um eine Zeitnahe Antwort ;-)


(([{sunrise(+3600,"06:30","08:30")}|8] or [{sunrise(+7200,"07:30","08:30")}|7]) and [11_Gartenautomatik] eq "JA" and [01_MODUS] eq "Sommer" and [Wetterstation:statRainHour24] < (2 + (([Wetter:fc1_high_c]-20)/5) ))
       ({
          prowl("Bewässerung wird jetzt gestartet","","0","0");
          my $testwert;;;;
          my $testwert2;;;;
          my $testwert3;;;;
          my $testwert4;;;;
          my @Ventilwerte;;;;
          my @Ventilgroessen;;;;
          my @Ventilgruppen;;;;
          my @Ventilzeiten;;;;
          my @Startzeit;;;;
          my $Ventilwert;;;;
          my $i=0;;;;
          my $j=0;;;;
          my $z1=0;;;;
          my $z2=0;;;;
          my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);;;;
          my $Zeitspeicher=3;;;;
          my $aktuelleZeit=0;;;;
          my $sec2;;;;
          my $min2;;;;
          my $hour2;;;;
          my $mday2;;;;
          my $mon2;;;;
          my $temperatur=ReadingsVal('Wetter', 'fc1_high_c', '25');;;;
          my $temperatur_korrekturwert=ReadingsVal('Korrekturfaktor', 'state', '10');;;;
          my $temp_korrekturwert;;;;
          if ($temperatur > 25) {
             $temp_korrekturwert=(($temperatur-25))/$temperatur_korrekturwert;;;;
          } else {
             $temp_korrekturwert=0;;;;
          }


          @Ventilgroessen[1] = 0;;;;
          @Ventilgroessen[2] = 0;;;;
          @Ventilgroessen[3] = 0;;;;
          @Ventilgroessen[4] = 0;;;;
          @Ventilgroessen[5] = 0;;;;
          @Ventilgroessen[6] = 0;;;;
          @Ventilgroessen[7] = 0;;;;
          @Ventilgroessen[8] = 0;;;;

          push(@Ventilwerte,['Gartenventil01',ReadingsVal('Gartenventil01', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil01', 'Dauer', 'AUS'),ReadingsVal('Gartenventil01', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil02',ReadingsVal('Gartenventil02', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil02', 'Dauer', 'AUS'),ReadingsVal('Gartenventil02', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil03',ReadingsVal('Gartenventil03', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil03', 'Dauer', 'AUS'),ReadingsVal('Gartenventil03', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil04',ReadingsVal('Gartenventil04', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil04', 'Dauer', 'AUS'),ReadingsVal('Gartenventil04', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil05',ReadingsVal('Gartenventil05', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil05', 'Dauer', 'AUS'),ReadingsVal('Gartenventil05', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil06',ReadingsVal('Gartenventil06', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil06', 'Dauer', 'AUS'),ReadingsVal('Gartenventil06', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil07',ReadingsVal('Gartenventil07', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil07', 'Dauer', 'AUS'),ReadingsVal('Gartenventil07', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil08',ReadingsVal('Gartenventil08', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil08', 'Dauer', 'AUS'),ReadingsVal('Gartenventil08', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil09',ReadingsVal('Gartenventil09', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil09', 'Dauer', 'AUS'),ReadingsVal('Gartenventil09', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil10',ReadingsVal('Gartenventil10', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil10', 'Dauer', 'AUS'),ReadingsVal('Gartenventil10', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil11',ReadingsVal('Gartenventil11', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil11', 'Dauer', 'AUS'),ReadingsVal('Gartenventil11', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil12',ReadingsVal('Gartenventil12', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil12', 'Dauer', 'AUS'),ReadingsVal('Gartenventil12', 'Volumen', 'gross')]);;

          for my $row (@Ventilwerte) {

            if (@$row[1] eq "morgens" or @$row[1] eq "beides") {
              if (@$row[2] != 0) {
                 if    (@$row[3] eq "klein")  { @$row[3] = 1;;;; }
                 elsif (@$row[3] eq "mittel") { @$row[3] = 2;;;; }
                 elsif (@$row[3] eq "gross")  { @$row[3] = 4;;;; }
                 

                 if     ((@Ventilgroessen[1] + @$row[3]) <= 4) { @Ventilgroessen[1] += @$row[3];;;; push( @{$Ventilgruppen[1]}, @$row[0] );;;; push( @{$Ventilzeiten[1]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[2] + @$row[3]) <= 4) { @Ventilgroessen[2] += @$row[3];;;; push( @{$Ventilgruppen[2]}, @$row[0] );;;; push( @{$Ventilzeiten[2]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[3] + @$row[3]) <= 4) { @Ventilgroessen[3] += @$row[3];;;; push( @{$Ventilgruppen[3]}, @$row[0] );;;; push( @{$Ventilzeiten[3]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[4] + @$row[3]) <= 4) { @Ventilgroessen[4] += @$row[3];;;; push( @{$Ventilgruppen[4]}, @$row[0] );;;; push( @{$Ventilzeiten[4]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[5] + @$row[3]) <= 4) { @Ventilgroessen[5] += @$row[3];;;; push( @{$Ventilgruppen[5]}, @$row[0] );;;; push( @{$Ventilzeiten[5]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[6] + @$row[3]) <= 4) { @Ventilgroessen[6] += @$row[3];;;; push( @{$Ventilgruppen[6]}, @$row[0] );;;; push( @{$Ventilzeiten[6]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[7] + @$row[3]) <= 4) { @Ventilgroessen[7] += @$row[3];;;; push( @{$Ventilgruppen[7]}, @$row[0] );;;; push( @{$Ventilzeiten[7]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[8] + @$row[3]) <= 4) { @Ventilgroessen[8] += @$row[3];;;; push( @{$Ventilgruppen[8]}, @$row[0] );;;; push( @{$Ventilzeiten[8]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[9] + @$row[3]) <= 4) { @Ventilgroessen[9] += @$row[3];;;; push( @{$Ventilgruppen[9]}, @$row[0] );;;; push( @{$Ventilzeiten[9]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[10] + @$row[3]) <= 4) { @Ventilgroessen[10] += @$row[3];;;; push( @{$Ventilgruppen[10]}, @$row[0] );;;; push( @{$Ventilzeiten[10]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[11] + @$row[3]) <= 4) { @Ventilgroessen[11] += @$row[3];;;; push( @{$Ventilgruppen[11]}, @$row[0] );;;; push( @{$Ventilzeiten[11]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[12] + @$row[3]) <= 4) { @Ventilgroessen[12] += @$row[3];;;; push( @{$Ventilgruppen[12]}, @$row[0] );;;; push( @{$Ventilzeiten[12]}, @$row[2] );;;; }
                   
              }
            }
          }

          my $anzahl_ventilgruppen;;;;
          my $anzahl_ventiluntergruppen;;;;
          my $zwischenwert=0;;;;
          my $maximale_Ventilzeiten=0;;;;
          my $steuerwert;;;;
          my $ListeVentile;;;;
          my $ListeZeiten;;;;

          $anzahl_ventilgruppen = scalar @Ventilgruppen;;;;
          $z1 = 1;;;;
         
          while($z1 < $anzahl_ventilgruppen) {
            my $aktuelleZeit  = mktime($sec+$Zeitspeicher+(($sec+$Zeitspeicher)*$temp_korrekturwert), $min, $hour, $mday, $mon, $year);;;;
            ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)  = localtime($aktuelleZeit);;;;
            if ($sec < 10) { $sec2 = "0";;} else { $sec2 = "";;}
            if ($min < 10) { $min2 = "0";;} else { $min2 = "";;}
            if ($hour < 10) { $hour2 = "0";;} else { $hour2 = "";;}
            if ($mday < 10) { $mday2 = "0";;} else { $mday2 = "";;}
            if ($mon < 9) {$mon2 = "0";;} else { $mon2 = "";;}

            if ($z1==0) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[0]};;;; 
              $ListeVentile = "@{@Ventilgruppen[0]}";
              $ListeZeiten  = "@{$Ventilzeiten[0]}";
            }
            elsif ($z1==1) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[1]};;;; 
              $ListeVentile = "@{@Ventilgruppen[1]}";
              $ListeZeiten  = "@{$Ventilzeiten[1]}";
            }
            elsif ($z1==2) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[2]};;;; 
              $ListeVentile = "@{@Ventilgruppen[2]}";
              $ListeZeiten  = "@{$Ventilzeiten[2]}";
            }
            elsif ($z1==3) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[3]};;;; 
              $ListeVentile = "@{@Ventilgruppen[3]}";
              $ListeZeiten  = "@{$Ventilzeiten[3]}";
            }
            elsif ($z1==4) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[4]};;;; 
              $ListeVentile = "@{@Ventilgruppen[4]}";
              $ListeZeiten  = "@{$Ventilzeiten[4]}";
            }
            elsif ($z1==5) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[5]};;;; 
              $ListeVentile = "@{@Ventilgruppen[5]}";
              $ListeZeiten  = "@{$Ventilzeiten[5]}";
            }
            elsif ($z1==6) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[6]};;;; 
              $ListeVentile = "@{@Ventilgruppen[6]}";
              $ListeZeiten  = "@{$Ventilzeiten[6]}";
            }
            elsif ($z1==7) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[7]};;;; 
              $ListeVentile = "@{@Ventilgruppen[7]}";
              $ListeZeiten  = "@{$Ventilzeiten[7]}";
            }
            elsif ($z1==8) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[8]};;;; 
              $ListeVentile = "@{@Ventilgruppen[8]}";
              $ListeZeiten  = "@{$Ventilzeiten[8]}";
            }
            elsif ($z1==9) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[9]};;;; 
              $ListeVentile = "@{@Ventilgruppen[9]}";
              $ListeZeiten  = "@{$Ventilzeiten[9]}";
            }
            elsif ($z1==10) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[10]};;;; 
              $ListeVentile = "@{@Ventilgruppen[10]}";
              $ListeZeiten  = "@{$Ventilzeiten[10]}";
            }
            elsif ($z1==11) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[11]};;;; 
              $ListeVentile = "@{@Ventilgruppen[11]}";
              $ListeZeiten  = "@{$Ventilzeiten[11]}";
            }
            elsif ($z1==12) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[12]};;;; 
              $ListeVentile = "@{@Ventilgruppen[12]}";
              $ListeZeiten  = "@{$Ventilzeiten[12]}";
            }
            $z2 = 1;;;;
            my @ListeVentile = split (/ /,$ListeVentile);
            my @ListeZeiten  = split (/ /,$ListeZeiten);
           
            foreach my $AktuellesVentil (@ListeVentile) {
                my $AktuelleVentilzeit = shift(@ListeZeiten);
                if ($AktuelleVentilzeit > $maximale_Ventilzeiten)
                   {
                    $maximale_Ventilzeiten = $AktuelleVentilzeit;;;;
                   }
                fhem ("define Start_$AktuellesVentil at ".($year+1900)."-".$mon2.($mon+1)."-".$mday2.$mday."T".$hour2.$hour.":".$min2.$min.":".$sec2.$sec." set Bewaesserung_Sw_".substr ($AktuellesVentil, 12, 2)." on-for-timer ".($AktuelleVentilzeit*10+(($AktuelleVentilzeit*10)*$temp_korrekturwert))."");
                fhem ("attr Start_$AktuellesVentil room Bewässerung");
                fhem ("attr Start_$AktuellesVentil group aktuell_Zeitsteuerung");
            }
                   
                $testwert .= "Maxwert -> ".$maximale_Ventilzeiten."\n";;;;
                $Zeitspeicher = ($maximale_Ventilzeiten*10)-5;;;; ##$Zeitspeicher+
                $maximale_Ventilzeiten = 0;;
            $z1++;;;;
          }
         
         
        })

DOELSEIF

(([{sunset("REAL",0,"18:00","21:00")}]) and [11_Gartenautomatik] eq "JA" and [01_MODUS] eq "Sommer" and [Wetterstation:statRainHour24] < (2 + (([Wetter:fc1_high_c]-20)/5) ))
       ({
          prowl("Bewässerung wird jetzt gestartet","","0","0");
          my $testwert;;;;
          my $testwert2;;;;
          my $testwert3;;;;
          my $testwert4;;;;
          my @Ventilwerte;;;;
          my @Ventilgroessen;;;;
          my @Ventilgruppen;;;;
          my @Ventilzeiten;;;;
          my @Startzeit;;;;
          my $Ventilwert;;;;
          my $i=0;;;;
          my $j=0;;;;
          my $z1=0;;;;
          my $z2=0;;;;
          my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);;;;
          my $Zeitspeicher=3;;;;
          my $aktuelleZeit=0;;;;
          my $sec2;;;;
          my $min2;;;;
          my $hour2;;;;
          my $mday2;;;;
          my $mon2;;;;
          my $temperatur=ReadingsVal('Wetter', 'fc1_high_c', '25');;;;
          my $temperatur_korrekturwert=ReadingsVal('Korrekturfaktor', 'state', '10');;;;
          my $temp_korrekturwert;;;;
          if ($temperatur > 25) {
             $temp_korrekturwert=(($temperatur-25))/$temperatur_korrekturwert;;;;
          } else {
             $temp_korrekturwert=0;;;;
          }


          @Ventilgroessen[1] = 0;;;;
          @Ventilgroessen[2] = 0;;;;
          @Ventilgroessen[3] = 0;;;;
          @Ventilgroessen[4] = 0;;;;
          @Ventilgroessen[5] = 0;;;;
          @Ventilgroessen[6] = 0;;;;
          @Ventilgroessen[7] = 0;;;;
          @Ventilgroessen[8] = 0;;;;

          push(@Ventilwerte,['Gartenventil01',ReadingsVal('Gartenventil01', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil01', 'Dauer', 'AUS'),ReadingsVal('Gartenventil01', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil02',ReadingsVal('Gartenventil02', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil02', 'Dauer', 'AUS'),ReadingsVal('Gartenventil02', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil03',ReadingsVal('Gartenventil03', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil03', 'Dauer', 'AUS'),ReadingsVal('Gartenventil03', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil04',ReadingsVal('Gartenventil04', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil04', 'Dauer', 'AUS'),ReadingsVal('Gartenventil04', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil05',ReadingsVal('Gartenventil05', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil05', 'Dauer', 'AUS'),ReadingsVal('Gartenventil05', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil06',ReadingsVal('Gartenventil06', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil06', 'Dauer', 'AUS'),ReadingsVal('Gartenventil06', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil07',ReadingsVal('Gartenventil07', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil07', 'Dauer', 'AUS'),ReadingsVal('Gartenventil07', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil08',ReadingsVal('Gartenventil08', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil08', 'Dauer', 'AUS'),ReadingsVal('Gartenventil08', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil09',ReadingsVal('Gartenventil09', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil09', 'Dauer', 'AUS'),ReadingsVal('Gartenventil09', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil10',ReadingsVal('Gartenventil10', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil10', 'Dauer', 'AUS'),ReadingsVal('Gartenventil10', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil11',ReadingsVal('Gartenventil11', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil11', 'Dauer', 'AUS'),ReadingsVal('Gartenventil11', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil12',ReadingsVal('Gartenventil12', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil12', 'Dauer', 'AUS'),ReadingsVal('Gartenventil12', 'Volumen', 'gross')]);;

          for my $row (@Ventilwerte) {

            if (@$row[1] eq "abends" or @$row[1] eq "beides") {
              if (@$row[2] != 0) {
                 if    (@$row[3] eq "klein")  { @$row[3] = 1;;;; }
                 elsif (@$row[3] eq "mittel") { @$row[3] = 2;;;; }
                 elsif (@$row[3] eq "gross")  { @$row[3] = 4;;;; }
                 

                 if     ((@Ventilgroessen[1] + @$row[3]) <= 4) { @Ventilgroessen[1] += @$row[3];;;; push( @{$Ventilgruppen[1]}, @$row[0] );;;; push( @{$Ventilzeiten[1]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[2] + @$row[3]) <= 4) { @Ventilgroessen[2] += @$row[3];;;; push( @{$Ventilgruppen[2]}, @$row[0] );;;; push( @{$Ventilzeiten[2]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[3] + @$row[3]) <= 4) { @Ventilgroessen[3] += @$row[3];;;; push( @{$Ventilgruppen[3]}, @$row[0] );;;; push( @{$Ventilzeiten[3]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[4] + @$row[3]) <= 4) { @Ventilgroessen[4] += @$row[3];;;; push( @{$Ventilgruppen[4]}, @$row[0] );;;; push( @{$Ventilzeiten[4]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[5] + @$row[3]) <= 4) { @Ventilgroessen[5] += @$row[3];;;; push( @{$Ventilgruppen[5]}, @$row[0] );;;; push( @{$Ventilzeiten[5]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[6] + @$row[3]) <= 4) { @Ventilgroessen[6] += @$row[3];;;; push( @{$Ventilgruppen[6]}, @$row[0] );;;; push( @{$Ventilzeiten[6]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[7] + @$row[3]) <= 4) { @Ventilgroessen[7] += @$row[3];;;; push( @{$Ventilgruppen[7]}, @$row[0] );;;; push( @{$Ventilzeiten[7]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[8] + @$row[3]) <= 4) { @Ventilgroessen[8] += @$row[3];;;; push( @{$Ventilgruppen[8]}, @$row[0] );;;; push( @{$Ventilzeiten[8]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[9] + @$row[3]) <= 4) { @Ventilgroessen[9] += @$row[3];;;; push( @{$Ventilgruppen[9]}, @$row[0] );;;; push( @{$Ventilzeiten[9]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[10] + @$row[3]) <= 4) { @Ventilgroessen[10] += @$row[3];;;; push( @{$Ventilgruppen[10]}, @$row[0] );;;; push( @{$Ventilzeiten[10]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[11] + @$row[3]) <= 4) { @Ventilgroessen[11] += @$row[3];;;; push( @{$Ventilgruppen[11]}, @$row[0] );;;; push( @{$Ventilzeiten[11]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[12] + @$row[3]) <= 4) { @Ventilgroessen[12] += @$row[3];;;; push( @{$Ventilgruppen[12]}, @$row[0] );;;; push( @{$Ventilzeiten[12]}, @$row[2] );;;; }
                   
              }
            }
          }

          my $anzahl_ventilgruppen;;;;
          my $anzahl_ventiluntergruppen;;;;
          my $zwischenwert=0;;;;
          my $maximale_Ventilzeiten=0;;;;
          my $steuerwert;;;;
          my $ListeVentile;;;;
          my $ListeZeiten;;;;

          $anzahl_ventilgruppen = scalar @Ventilgruppen;;;;
          $z1 = 1;;;;
         
          while($z1 < $anzahl_ventilgruppen) {
            my $aktuelleZeit  = mktime($sec+$Zeitspeicher+(($sec+$Zeitspeicher)*$temp_korrekturwert), $min, $hour, $mday, $mon, $year);;;;
            ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)  = localtime($aktuelleZeit);;;;
            if ($sec < 10) { $sec2 = "0";;} else { $sec2 = "";;}
            if ($min < 10) { $min2 = "0";;} else { $min2 = "";;}
            if ($hour < 10) { $hour2 = "0";;} else { $hour2 = "";;}
            if ($mday < 10) { $mday2 = "0";;} else { $mday2 = "";;}
            if ($mon < 9) {$mon2 = "0";;} else { $mon2 = "";;}

            if ($z1==0) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[0]};;;; 
              $ListeVentile = "@{@Ventilgruppen[0]}";
              $ListeZeiten  = "@{$Ventilzeiten[0]}";
            }
            elsif ($z1==1) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[1]};;;; 
              $ListeVentile = "@{@Ventilgruppen[1]}";
              $ListeZeiten  = "@{$Ventilzeiten[1]}";
            }
            elsif ($z1==2) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[2]};;;; 
              $ListeVentile = "@{@Ventilgruppen[2]}";
              $ListeZeiten  = "@{$Ventilzeiten[2]}";
            }
            elsif ($z1==3) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[3]};;;; 
              $ListeVentile = "@{@Ventilgruppen[3]}";
              $ListeZeiten  = "@{$Ventilzeiten[3]}";
            }
            elsif ($z1==4) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[4]};;;; 
              $ListeVentile = "@{@Ventilgruppen[4]}";
              $ListeZeiten  = "@{$Ventilzeiten[4]}";
            }
            elsif ($z1==5) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[5]};;;; 
              $ListeVentile = "@{@Ventilgruppen[5]}";
              $ListeZeiten  = "@{$Ventilzeiten[5]}";
            }
            elsif ($z1==6) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[6]};;;; 
              $ListeVentile = "@{@Ventilgruppen[6]}";
              $ListeZeiten  = "@{$Ventilzeiten[6]}";
            }
            elsif ($z1==7) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[7]};;;; 
              $ListeVentile = "@{@Ventilgruppen[7]}";
              $ListeZeiten  = "@{$Ventilzeiten[7]}";
            }
            elsif ($z1==8) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[8]};;;; 
              $ListeVentile = "@{@Ventilgruppen[8]}";
              $ListeZeiten  = "@{$Ventilzeiten[8]}";
            }
            elsif ($z1==9) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[9]};;;; 
              $ListeVentile = "@{@Ventilgruppen[9]}";
              $ListeZeiten  = "@{$Ventilzeiten[9]}";
            }
            elsif ($z1==10) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[10]};;;; 
              $ListeVentile = "@{@Ventilgruppen[10]}";
              $ListeZeiten  = "@{$Ventilzeiten[10]}";
            }
            elsif ($z1==11) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[11]};;;; 
              $ListeVentile = "@{@Ventilgruppen[11]}";
              $ListeZeiten  = "@{$Ventilzeiten[11]}";
            }
            elsif ($z1==12) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[12]};;;; 
              $ListeVentile = "@{@Ventilgruppen[12]}";
              $ListeZeiten  = "@{$Ventilzeiten[12]}";
            }
            $z2 = 1;;;;
            my @ListeVentile = split (/ /,$ListeVentile);
            my @ListeZeiten  = split (/ /,$ListeZeiten);
           
            foreach my $AktuellesVentil (@ListeVentile) {
                my $AktuelleVentilzeit = shift(@ListeZeiten);
                if ($AktuelleVentilzeit > $maximale_Ventilzeiten)
                   {
                    $maximale_Ventilzeiten = $AktuelleVentilzeit;;;;
                   }
                fhem ("define Start_$AktuellesVentil at ".($year+1900)."-".$mon2.($mon+1)."-".$mday2.$mday."T".$hour2.$hour.":".$min2.$min.":".$sec2.$sec." set Bewaesserung_Sw_".substr ($AktuellesVentil, 12, 2)." on-for-timer ".($AktuelleVentilzeit*10+(($AktuelleVentilzeit*10)*$temp_korrekturwert))."");
                fhem ("attr Start_$AktuellesVentil room Bewässerung");
                fhem ("attr Start_$AktuellesVentil group aktuell_Zeitsteuerung");
            }
                   
                $testwert .= "Maxwert -> ".$maximale_Ventilzeiten."\n";;;;
                $Zeitspeicher = ($maximale_Ventilzeiten*10)-5;;;; ##$Zeitspeicher+
                $maximale_Ventilzeiten = 0;;
            $z1++;;;;
          }
         
         
        })


Es wird mit verschiedenen Dummys gearbeitet und auch die Ventile sind nochmals einzeln steuerbar. Die zugehörige Pumpe zur Versorgung aus Wasserfässern wird nur eingeschaltet, wenn auch ein Ventil geöffnet wurde.

Grüße und schöne Ostern!

Gregor
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Damian am 21 April 2019, 10:40:14
Das sieht nicht nach einem Output von Rawdefinition aus: Warum hast du vier Semikolons, statt einem?

Aufwändigere Berechnungen würde ich alleine schon aus Performance-Gründen in eine Funktion auslagern. In deinem Fall wird bei jeder Ausführung der ganze Perlcode übersetzt. Unnötige Trigger würde ich mit ? ausbauen.

Effizienter und auch übersichtlicher:

DOIF
## Definition der beiden Bewesserungsroutinen

subs {
sub bewesserung1
{
   prowl("Bewässerung wird jetzt gestartet","","0","0");
          my $testwert;
          my $testwert2;
          my $testwert3;
...
}

sub bewesserung2
{
...
}

} ## end of subs

## Ausführungsblock 1
{if (([{sunrise(+3600,"06:30","08:30")}|8] or [{sunrise(+7200,"07:30","08:30")}|7]) and [?11_Gartenautomatik] eq "JA" and [?01_MODUS] eq "Sommer" and [?Wetterstation:statRainHour24] < (2 + ([?Wetter:fc1_high_c]-20)/5)) {
   bewesserung1();
}
}

## Ausführungsblock 2
{if ([{sunset("REAL",0,"18:00","21:00")}] and [?11_Gartenautomatik] eq "JA" and [?01_MODUS] eq "Sommer" and [?Wetterstation:statRainHour24] < (2 + ([?Wetter:fc1_high_c]-20)/5)) {
  bewesserung2();
}
}


Das war Perl-Modus.
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Rheininsel am 21 April 2019, 11:00:15
Hihi! Das schaut nach Potential aus. Danke! Ich werde das anpassen. Schaut wirklich besser aus.

Grüße
Gregor
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert
Beitrag von: Damian am 21 April 2019, 11:06:41
Zitat von: Rheininsel am 21 April 2019, 11:00:15
Hihi! Das schaut nach Potential aus. Danke! Ich werde das anpassen. Schaut wirklich besser aus.

Grüße
Gregor

Du solltest bei der Umstellung daran denken, dass im Perl-Modus der Namensraum von DOIF gekapselt (geschützt) ist, das hat den Vorteil, dass man sich nicht bestehende Routinen versehentlich überschreibt, die außerhalb der DOIF-Welt definiert wurden.  Bei fremden Routinen, die angemeckert werden, musst du :: voranstellen z. B. ::prowl(...).
Titel: Antw:[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig...
Beitrag von: Per am 25 April 2019, 12:45:02
Ein paar Anmerkungen, ohne weitere Syntaxprüfungen, mathematische Vereinfachungen oder Auslagerung in Funktionen u.ä.:
1.

          push(@Ventilwerte,['Gartenventil01',ReadingsVal('Gartenventil01', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil01', 'Dauer', 'AUS'),ReadingsVal('Gartenventil01', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil02',ReadingsVal('Gartenventil02', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil02', 'Dauer', 'AUS'),ReadingsVal('Gartenventil02', 'Volumen', 'gross')]);;
...
          push(@Ventilwerte,['Gartenventil11',ReadingsVal('Gartenventil11', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil11', 'Dauer', 'AUS'),ReadingsVal('Gartenventil11', 'Volumen', 'gross')]);;
          push(@Ventilwerte,['Gartenventil12',ReadingsVal('Gartenventil12', 'Betrieb', 'AUS'),ReadingsVal('Gartenventil12', 'Dauer', 'AUS'),ReadingsVal('Gartenventil12', 'Volumen', 'gross')]);;


Mit Änderung der Nahmen auf ohne führende 0 (sonst wird es etwas aufwendiger):


my @a = (1..12);
for my $i (@a){
          my $GV_Nr = 'Gartenventil' . $i;
          push(@Ventilwerte,[$GV_Nr, ReadingsVal($GV_Nr, 'Betrieb', 'AUS'),ReadingsVal($GV_Nr, 'Dauer', 'AUS'),ReadingsVal($GV_Nr, 'Volumen', 'gross')]);
}


2.

                 if     ((@Ventilgroessen[1] + @$row[3]) <= 4) { @Ventilgroessen[1] += @$row[3];;;; push( @{$Ventilgruppen[1]}, @$row[0] );;;; push( @{$Ventilzeiten[1]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[2] + @$row[3]) <= 4) { @Ventilgroessen[2] += @$row[3];;;; push( @{$Ventilgruppen[2]}, @$row[0] );;;; push( @{$Ventilzeiten[2]}, @$row[2] );;;; }
...
                 elsif  ((@Ventilgroessen[11] + @$row[3]) <= 4) { @Ventilgroessen[11] += @$row[3];;;; push( @{$Ventilgruppen[11]}, @$row[0] );;;; push( @{$Ventilzeiten[11]}, @$row[2] );;;; }
                 elsif  ((@Ventilgroessen[12] + @$row[3]) <= 4) { @Ventilgroessen[12] += @$row[3];;;; push( @{$Ventilgruppen[12]}, @$row[0] );;;; push( @{$Ventilzeiten[12]}, @$row[2] );;;; }

-->

my @a = (1..12);
for my $i (@a){
                 if     ((@Ventilgroessen[$i] + @$row[3]) <= 4) { @Ventilgroessen[$i] += @$row[3];push( @{$Ventilgruppen[$i]}, @$row[0] );push( @{$Ventilzeiten[$i]}, @$row[2] );
                                  break;}
}


und 3.

            if ($z1==0) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[0]};;;; 
              $ListeVentile = "@{@Ventilgruppen[0]}";
              $ListeZeiten  = "@{$Ventilzeiten[0]}";
            }
            elsif ($z1==1) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[1]};;;; 
              $ListeVentile = "@{@Ventilgruppen[1]}";
              $ListeZeiten  = "@{$Ventilzeiten[1]}";
            }
...
            elsif ($z1==11) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[11]};;;; 
              $ListeVentile = "@{@Ventilgruppen[11]}";
              $ListeZeiten  = "@{$Ventilzeiten[11]}";
            }
            elsif ($z1==12) {
              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[12]};;;; 
              $ListeVentile = "@{@Ventilgruppen[12]}";
              $ListeZeiten  = "@{$Ventilzeiten[12]}";
            }

-->

              $anzahl_ventiluntergruppen = scalar @{@Ventilgruppen[$z1]}; 
              $ListeVentile = "@{@Ventilgruppen[$z1]}";
              $ListeZeiten  = "@{$Ventilzeiten[$z1]}";