[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung

Begonnen von holle75, 22 März 2017, 14:38:32

Vorheriges Thema - Nächstes Thema

holle75

Hello,

ich möchte eine Tiefenpumpe abhängig von Monat, Sonnenstand und gerade aktuellem Stromverbrauch schalten. Im Moment sieht das so aus:

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 2000) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off) \
DOELSEIF ([13:00-15:00] and ($month < [Beregnung_Startmonat] or $month > [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 2000) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off)
attr PozzoHauptOben_PUMPE_PozzoDOIF group System
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 60,9000:60,1800


Was ich gerade nicht verstehe ist, warum der zweite Strang einen Stromverbrauch über 2000 W ignoriert. Sprich, die Pumpe läuft trotzdem ihre 30 Minuten bis Ende der wait-zeit.


Die finale Idee ist, dass der erste Strang bei erreichen eines bestimmten Sonnenstandes/höhe die Pumpe, wenn Stromverbrauch nicht höher als 2000W, für 2.5 Stunden einschaltet. Der zweite Strang die Pumpe insgesamt, in der Zeit zwischen 13:00 und 15:00 Uhr, eine halbe Stunde laufen lässt und zwischendurch, falls Verbrauch über 2000 W, abstellt.

.... für beide Stränge würde ich mir wünschen, dass bei über 2000W die Pumpe ausschaltet um dann falls Verbrauch wieder unter 2000W sozusagen mit dem Ablauf weitermacht.

Ich denke, mein Code ist generell für das gewünschte noch nicht fertig (wie soll das DOIF wissen, wie lange schon gelaufen wurde?) und würde mich über euren Input freuen.

Trotzdem ignoriert er im Moment das überschreiten der 2000W. Das erschließt sich mir noch nicht.

lieb Gruß

H.

Damian

ohne list von dem Modul im vermeintlichen Zustand wird man dir nicht helfen können.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

sorry

Internals:
   DEF        ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 2000) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off)
DOELSEIF ([13:00-15:00] and ($month < [Beregnung_Startmonat] or $month > [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 2000) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off)
   NAME       PozzoHauptOben_PUMPE_PozzoDOIF
   NR         693
   NTFY_ORDER 50-PozzoHauptOben_PUMPE_PozzoDOIF
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2017-03-23 11:31:49   Device          Xtender_AC_out
     2017-03-22 13:30:00   cmd             2.2
     2017-03-22 13:30:00   cmd_event       timer_1
     2017-03-22 13:30:00   cmd_nr          2
     2017-03-22 13:30:00   cmd_seqnr       2
     2017-03-23 11:31:49   e_Xtender_AC_out_Power__W 91 W
     2017-03-23 11:31:29   e_myTwilight_elevation 48.83
     2017-03-22 13:30:00   state           cmd_2
     2017-03-22 15:00:00   timer_1_c2      23.03.2017 13:00:00
     2017-03-22 15:00:00   timer_2_c2      23.03.2017 15:00:00
     2017-03-22 13:30:00   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'myTwilight','elevation','','',AttrVal($hash->{NAME},'notexist',undef)) > InternalDoIf($hash,'Beregnung_Startelevation','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) and ($month >= InternalDoIf($hash,'Beregnung_Startmonat','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) and $month <= InternalDoIf($hash,'Beregnung_Endmonat','STATE','','',AttrVal($hash->{NAME},'notexist',undef))) and ReadingValDoIf($hash,'Xtender_AC_out','Power__W','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) < 2000
     1          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ($month < InternalDoIf($hash,'Beregnung_Startmonat','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) or $month > InternalDoIf($hash,'Beregnung_Endmonat','STATE','','',AttrVal($hash->{NAME},'notexist',undef))) and ReadingValDoIf($hash,'Xtender_AC_out','Power__W','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) < 2000
   Days:
   Devices:
     0           myTwilight Beregnung_Startelevation Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out
     1           Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out
     all         myTwilight Beregnung_Startelevation Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Pozzo on
       1          set PozzoHauptOben_PUMPE_Pozzo off
     1:
       0          set PozzoHauptOben_PUMPE_Pozzo on
       1          set PozzoHauptOben_PUMPE_Pozzo off
     2:
   Helper:
     event      Power__W: 91 W
     globalinit 1
     last_timer 2
     sleepdevice timer_1
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Xtender_AC_out
     timerevent statEnergy_total__kWh: Hour: 0.000 Day: 3.262 Month: 115.460 Year: 314.772,statEnergy_total__kWhLast: Hour: 0.141 Day: 6.958 Month: 93.361 Year: 352.096 (since: 2016-09-02 ),statEnergy_total__kWhHourLast: 0.141
     triggerDev Xtender_AC_out
     timerevents:
       statEnergy_total__kWh: Hour: 0.000 Day: 3.262 Month: 115.460 Year: 314.772
       statEnergy_total__kWhLast: Hour: 0.141 Day: 6.958 Month: 93.361 Year: 352.096 (since: 2016-09-02 )
       statEnergy_total__kWhHourLast: 0.141
     timereventsState:
       statEnergy_total__kWh: Hour: 0.000 Day: 3.262 Month: 115.460 Year: 314.772
       statEnergy_total__kWhLast: Hour: 0.141 Day: 6.958 Month: 93.361 Year: 352.096 (since: 2016-09-02 )
       statEnergy_total__kWhHourLast: 0.141
     triggerEvents:
       Power__W: 91 W
     triggerEventsState:
       Power__W: 91 W
   Internals:
     0           Beregnung_Startelevation:STATE Beregnung_Startmonat:STATE Beregnung_Endmonat:STATE
     1           Beregnung_Startmonat:STATE Beregnung_Endmonat:STATE
     all         Beregnung_Startelevation:STATE Beregnung_Startmonat:STATE Beregnung_Endmonat:STATE
   Interval:
     0          -1
     1          0
   Itimer:
   Localtime:
     0          1490270400
     1          1490277600
   Readings:
     0           myTwilight:elevation Xtender_AC_out:Power__W
     1           Xtender_AC_out:Power__W
     all         myTwilight:elevation Xtender_AC_out:Power__W
   Realtime:
     0          13:00:00
     1          15:00:00
   Regexp:
     0:
     1:
     All:
   State:
   Time:
     0          13:00:00
     1          15:00:00
   Timecond:
     0          1
     1          1
   Timer:
     0          0
     1          0
   Timers:
     1           0  1
   Trigger:
   Triggertime:
     1490270400:
       localtime  1490270400
       Hash:
     1490277600:
       localtime  1490277600
       Hash:
Attributes:
   group      System
   wait       60,9000:60,1800

Damian

Hier ist zwar nicht der Zustand den du beschreibst: 91 Watt ist nicht über 2000 Watt, allerdings wird über 2000 Watt auch nichts passieren, da du keinen Fall dafür definiert hast. Dazu musst du mindestens DOELSE hinten dran hängen, damit das Modul den Zustand wechseln kann.

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

holle75

Jo, das alte Hirn. Logisch. Danke

Hättest du noch eine Idee für die Gesamtlaufzeit von cmd_2_1 30 min und cmd_1_1 2.5 Stunden? Mir fällt partout nichts ein, wie man das umsetzen könnte ohne es ganz komplex zu machen.

mit dem DOELSE würde das DOIF ja nach unterschreiten der Stromschwelle "immer wieder von vorne anfangen"

Holle

Per

Du kannst wait ja berechnete Werte vorsetzen. Also beim Start die Zeit setzen und dann die neuen Variablen für wait berechnen.

holle75

Danke Per, nur wie bekomme ich die bereits gelaufene Zeit? Es gibt ja keine fixe Startzeit.... und ein Start kann in einem Zeitraum mehrmals passieren. Die gelaufene Zeit muß ich pro Durchlauf addieren und dann von der wait-zeit des neuen Startes/Endes abziehen.

Hättest du ein Beispiel?

holle75

Dank Pers Anregung probiere ich es jetzt mal so. Morgen weiss ich mehr. Keine Ahnung was ich da verzapft habe ....

define PozzoLaufZeitDummy dummy
attr PozzoLaufZeitDummy group System

define PozzoLaufZeitDummyReset at *04:00:00 set PozzoLaufZeitDummy 0
attr PozzoLaufZeitDummyReset group System

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [PozzoLaufZeitDummy] < 8400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])}) \
DOELSEIF ([13:00-16:00] and ($month < [Beregnung_Startmonat] or $month > [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [PozzoLaufZeitDummy] < 1400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])}) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])})
attr PozzoHauptOben_PUMPE_PozzoDOIF group System
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 0,9000-[PozzoLaufZeitDummy]:0,1800-[PozzoLaufZeitDummy]:0


Internals:
   DEF        ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [PozzoLaufZeitDummy] < 8400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])})
DOELSEIF ([13:00-16:00] and ($month < [Beregnung_Startmonat] or $month > [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [PozzoLaufZeitDummy] < 1400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])})
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])})
   NAME       PozzoHauptOben_PUMPE_PozzoDOIF
   NR         703
   NTFY_ORDER 50-PozzoHauptOben_PUMPE_PozzoDOIF
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2017-03-24 21:04:32   Device          Xtender_AC_out
     2017-03-24 13:30:00   cmd             2.2
     2017-03-24 13:30:00   cmd_event       timer_1
     2017-03-24 13:30:00   cmd_nr          2
     2017-03-24 13:30:00   cmd_seqnr       2
     2017-03-23 13:41:34   e_Beregnung_Startelevation_STATE 18
     2017-03-23 13:41:26   e_Beregnung_Startmonat_STATE 5
     2017-03-24 21:04:32   e_Xtender_AC_out_Power__W 194 W
     2017-03-24 21:02:28   e_myTwilight_elevation -26.48
     2017-03-24 13:30:00   state           cmd_2
     2017-03-24 20:57:30   timer_1_c2      25.03.2017 13:00:00
     2017-03-24 20:57:30   timer_2_c2      25.03.2017 16:00:00
     2017-03-24 20:57:29   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'myTwilight','elevation','','',AttrVal($hash->{NAME},'notexist',undef)) > InternalDoIf($hash,'Beregnung_Startelevation','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) and ($month >= InternalDoIf($hash,'Beregnung_Startmonat','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) and $month <= InternalDoIf($hash,'Beregnung_Endmonat','STATE','','',AttrVal($hash->{NAME},'notexist',undef))) and ReadingValDoIf($hash,'Xtender_AC_out','Power__W','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) < 1200 and InternalDoIf($hash,'PozzoLaufZeitDummy','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) < 8400
     1          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"") and ($month < InternalDoIf($hash,'Beregnung_Startmonat','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) or $month > InternalDoIf($hash,'Beregnung_Endmonat','STATE','','',AttrVal($hash->{NAME},'notexist',undef))) and ReadingValDoIf($hash,'Xtender_AC_out','Power__W','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) < 1200 and InternalDoIf($hash,'PozzoLaufZeitDummy','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) < 1400
     2          ReadingValDoIf($hash,'Xtender_AC_out','Power__W','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 2500
   Days:
   Devices:
     0           myTwilight Beregnung_Startelevation Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out PozzoLaufZeitDummy
     1           Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out PozzoLaufZeitDummy
     2           Xtender_AC_out
     all         myTwilight Beregnung_Startelevation Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out PozzoLaufZeitDummy
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Pozzo on
       1          set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])}
     1:
       0          set PozzoHauptOben_PUMPE_Pozzo on
       1          set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])}
     2:
       0          set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_PozzoDOIF:state:sec])}
     3:
   Helper:
     event      Energy_total__kWh: 2549.127 kWh,statEnergy_total__kWh: Hour: 0.018 Day: 6.072 Month: 128.550 Year: 327.862,statEnergy_total__kWhDay: 6.072
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev Xtender_AC_out
     triggerEvents:
       Energy_total__kWh: 2549.127 kWh
       statEnergy_total__kWh: Hour: 0.018 Day: 6.072 Month: 128.550 Year: 327.862
       statEnergy_total__kWhDay: 6.072
     triggerEventsState:
       Energy_total__kWh: 2549.127 kWh
       statEnergy_total__kWh: Hour: 0.018 Day: 6.072 Month: 128.550 Year: 327.862
       statEnergy_total__kWhDay: 6.072
   Internals:
     0           Beregnung_Startelevation:STATE Beregnung_Startmonat:STATE Beregnung_Endmonat:STATE PozzoLaufZeitDummy:STATE
     1           Beregnung_Startmonat:STATE Beregnung_Endmonat:STATE PozzoLaufZeitDummy:STATE
     all         Beregnung_Startelevation:STATE Beregnung_Startmonat:STATE Beregnung_Endmonat:STATE PozzoLaufZeitDummy:STATE
   Interval:
     0          -1
     1          0
   Itimer:
   Localtime:
     0          1490443200
     1          1490454000
   Readings:
     0           myTwilight:elevation Xtender_AC_out:Power__W
     1           Xtender_AC_out:Power__W
     2           Xtender_AC_out:Power__W
     all         myTwilight:elevation Xtender_AC_out:Power__W
   Realtime:
     0          13:00:00
     1          16:00:00
   Regexp:
     0:
     1:
     2:
     All:
   State:
   Time:
     0          13:00:00
     1          16:00:00
   Timecond:
     0          1
     1          1
   Timer:
     0          0
     1          0
   Timers:
     1           0  1
   Trigger:
   Triggertime:
     1490443200:
       localtime  1490443200
       Hash:
     1490454000:
       localtime  1490454000
       Hash:
Attributes:
   group      System
   wait       0,9000-[PozzoLaufZeitDummy]:0,1800-[PozzoLaufZeitDummy]:0

holle75

.... man sollte vielleicht die Laufzeit der Pumpe und nicht des DOIF berechnen:

define PozzoLaufZeitDummy dummy
attr PozzoLaufZeitDummy group System

define PozzoLaufZeitDummyReset at *04:00:00 set PozzoLaufZeitDummy 0
attr PozzoLaufZeitDummyReset group System

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [?PozzoLaufZeitDummy] < 8400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])}) \
DOELSEIF ([13:00-16:00] and ($month < [Beregnung_Startmonat] or $month > [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [?PozzoLaufZeitDummy] < 1400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])}) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])})
attr PozzoHauptOben_PUMPE_PozzoDOIF group System
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 0,9000-[PozzoLaufZeitDummy]:0,1800-[PozzoLaufZeitDummy]:0


... und morgen schauen ob es jetzt besser funktioniert ;)

holle75

... und um die Falschberechnung der Laufzeit (cmd_3) durch den Stromverbrauch "außerhalb des DOIF" zu unterbinden:

define PozzoLaufZeitDummy dummy
attr PozzoLaufZeitDummy group System

define PozzoLaufZeitDummyReset at *04:00:00 set PozzoLaufZeitDummy 0
attr PozzoLaufZeitDummyReset group System

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [?PozzoLaufZeitDummy] < 8400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])}) \
DOELSEIF ([13:00-16:00] and ($month < [Beregnung_Startmonat] or $month > [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [?PozzoLaufZeitDummy] < 1400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])}) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2500 and ([PozzoHauptOben_PUMPE_PozzoDOIF] eq "cmd_1_1" or [PozzoHauptOben_PUMPE_PozzoDOIF] eq "cmd_2_1")) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])})
attr PozzoHauptOben_PUMPE_PozzoDOIF group System
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 300,9000-[PozzoLaufZeitDummy]:300,1800-[PozzoLaufZeitDummy]:0


.... vielleicht funktioniert es jetzt wie gewünscht? Werde berichten.


holle75

final ist es jetzt das geworden. Falls es jemand braucht. Scheint zu funktionieren (erst 2 Tage getestet).

define PozzoLaufZeitDummy dummy
attr PozzoLaufZeitDummy group System

define PozzoLaufZeitDummyReset at *04:00:00 set PozzoLaufZeitDummy 0
attr PozzoLaufZeitDummyReset group System

define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [?PozzoLaufZeitDummy] < 8400) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])}) \
DOELSEIF ([13:00-16:00] and ($month < [Beregnung_Startmonat] or $month > [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [?PozzoLaufZeitDummy] < 1200) (set PozzoHauptOben_PUMPE_Pozzo on) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])}) \
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2100 and ([PozzoHauptOben_PUMPE_PozzoDOIF] eq "cmd_1_1" or [PozzoHauptOben_PUMPE_PozzoDOIF] eq "cmd_2_1")) (set PozzoHauptOben_PUMPE_Pozzo off,set PozzoLaufZeitDummy {([PozzoLaufZeitDummy]+[PozzoHauptOben_PUMPE_Pozzo:state:sec])})
attr PozzoHauptOben_PUMPE_PozzoDOIF group System
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 300,9000-[PozzoLaufZeitDummy]:300,1800-[PozzoLaufZeitDummy]:0

Per

Zitat von: holle75 am 27 März 2017, 19:53:26final
Statt des separaten Dummies würde ich ein Userreading im DOIF verwenden.

Auch den täglichen Reset um 4 Uhr kannst du in das DOIF aufnehmen
DOELSEIF ([4:00]) (set PozzoLaufZeitDummy 0)
, meiner Ansicht nach kollidiert das mit keinem anderen Zweig.

Auch auf den Eigennamen innerhalb des DOIF würde ich mit [$SELF] ersetzen. Evtl. mit [?$SELF]?


define PozzoHauptOben_PUMPE_PozzoDOIF DOIF ([myTwilight:elevation] > [Beregnung_Startelevation] and ($month >= [Beregnung_Startmonat] and $month <= [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:Laufzeit] < 8400)
(set PozzoHauptOben_PUMPE_Pozzo on)
(set $SELF cmd_3)
DOELSEIF ([13:00-16:00] and ($month < [Beregnung_Startmonat] or $month > [Beregnung_Endmonat]) and [Xtender_AC_out:Power__W:d] < 1200 and [?$SELF:Laufzeit] < 1200)
(set PozzoHauptOben_PUMPE_Pozzo on)
(set $SELF cmd_3)
DOELSEIF ([Xtender_AC_out:Power__W:d] > 2100 and [$SELF:cmd_seqnr] == "1")
(set PozzoHauptOben_PUMPE_Pozzo off,set $SELF Laufzeit {[$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec]})
DOELSEIF ([04:00]) (set $SELF Laufzeit 0)

attr PozzoHauptOben_PUMPE_PozzoDOIF group System
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 300,9000-[$SELF:Laufzeit]:300,1800-[$SELF:Laufzeit]:0:0


Sieht auf dem ersten Blick nicht viel kleiner aus als deins, aber ich habe Zeilenumbrüche drin ;).

Ohne FHEM-System zur Hand und daher ungetestet!

holle75

Hallo Per, sieht auf jeden Fall galanter aus. Denke, ich verstehe es sogar.
Wie muß ich das Userreading LAUFZEIT definieren? Im Moment bekomme ich noch einen Error reading does not exist: [PozzoHauptOben_PUMPE_PozzoDOIF:Laufzeit].

... und ich wußte nicht, dass ich DOIF in einen cmd-Zustand "zwingen" kann. DOIF ignoriert dann die Bedingungen und führt trotzdem den Zweig aus?


Per

Zitat von: holle75 am 28 März 2017, 18:47:08Wie muß ich das Userreading LAUFZEIT definieren?
CommandRef

Zitat von: holle75 am 28 März 2017, 18:47:08... und ich wußte nicht, dass ich DOIF in einen cmd-Zustand "zwingen" kann. DOIF ignoriert dann die Bedingungen und führt trotzdem den Zweig aus?
Ja, aber evtl. ist ein Update auf die aktuelle Version nötig.

holle75

Habe die commanref jetzt zwei mal durch, finde aber keine Erklärung für Userreadings. Kleiner Hinweis an welcher Stelle des Manifestes?