[gelöst] Beregnung/mehrere Kreise schaltbar/Sonnenstandabhängig/Pumpen gesteuert

Begonnen von holle75, 03 April 2017, 17:43:09

Vorheriges Thema - Nächstes Thema

Per

#90
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"]

holle75

#91
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



holle75

#92
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.

Per

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"] (bewirkt, dass nur extakt dieser Wert (+ Regex) getriggert wird, nicht alles was bei "BeregnungDurchlauf_AN_AUS_AUTO" kommt.
oder
2. checkReadingEvent



holle75

#94
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?


Per

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.

holle75

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?

Per

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 ;).

holle75

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.

Per

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.

holle75

#100
... 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

Per

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 zu automatisieren.

holle75

#102
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 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?

Per

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.

holle75

#104
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 ;)