FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: holle75 am 22 März 2017, 14:38:32

Titel: [gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 22 März 2017, 14:38:32
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.
Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: Damian am 22 März 2017, 22:23:13
ohne list von dem Modul im vermeintlichen Zustand wird man dir nicht helfen können.
Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: holle75 am 23 März 2017, 11:33:50
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
Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: Damian am 23 März 2017, 13:16:34
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.

Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: holle75 am 23 März 2017, 13:30:57
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
Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: Per am 23 März 2017, 14:43:20
Du kannst wait ja berechnete Werte vorsetzen. Also beim Start die Zeit setzen und dann die neuen Variablen für wait berechnen.
Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: holle75 am 23 März 2017, 15:36:01
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?
Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: holle75 am 24 März 2017, 21:05:51
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
Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: holle75 am 25 März 2017, 15:40:43
.... 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 ;)
Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: holle75 am 26 März 2017, 14:50:43
... 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.

Titel: Antw:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: holle75 am 27 März 2017, 19:53:26
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
Titel: A:Verständnisfrage Pumpensteuerung abhängig von Monat/Sonnenstand/Stromverbrauch
Beitrag von: Per am 28 März 2017, 12:19:16
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!
Titel: [gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 28 März 2017, 18:47:08
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?

Titel: A:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr...
Beitrag von: Per am 29 März 2017, 11:55:38
Zitat von: holle75 am 28 März 2017, 18:47:08Wie muß ich das Userreading LAUFZEIT definieren?
CommandRef (https://fhem.de/commandref_DE.html#userReadings)

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.
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 29 März 2017, 13:15:46
Habe die commanref jetzt zwei mal durch, finde aber keine Erklärung für Userreadings. Kleiner Hinweis an welcher Stelle des Manifestes?
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr....
Beitrag von: Per am 29 März 2017, 16:11:43
In meinem Link ist ein Anker, vllt. nach dem Laden nochmal in der URL direkt mit Enter anspringen (die CommandRef ist recht groß, das dauert eine Weile zu laden).
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: Ellert am 29 März 2017, 18:00:37
https://fhem.de/commandref_DE.html#setreading
oder
https://fhem.de/commandref_DE.html#userReadings
oder
https://fhem.de/commandref_DE.html#DOIF_Benutzerreadings
oder
https://fhem.de/commandref_DE.html#DOIF_setList__readingList
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 29 März 2017, 19:07:18
Uiuiui, ok, danke euch beiden.

Liest sich (trotz und wegen der vielen Stellen und Möglichkeiten) kompliziert.

Verstehe ich das richtig, dass ich mit

attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit

Laufzeit noch im DOIF definieren muß und gut?
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit ...
Beitrag von: Per am 30 März 2017, 14:16:06
Zitat von: holle75 am 29 März 2017, 19:07:18
Verstehe ich das richtig, dass ich mit

attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit

Laufzeit noch im DOIF definieren muß und gut?
Mal ausprobiert?
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 30 März 2017, 14:35:31
Hallo Per, hast ja recht. Aber um es sauber auszuprobieren muß ich ja bis zum nächsten Tag um 13:00 warten. Dachte, da frag ich mal um nicht komplett daneben zu liegen. ;)
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 30 März 2017, 15:26:06
nach einem DOIF-Update und

attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit
attr PozzoHauptOben_PUMPE_PozzoDOIF setList Laufzeit:0


beschwert fhem sich nicht mehr. Schauen wir mal was morgen um 13:00 passiert.
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 31 März 2017, 13:29:58
Der nach 13:00-Test:

List

Internals:
   DEF        ([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)
   NAME       PozzoHauptOben_PUMPE_PozzoDOIF
   NR         705
   NTFY_ORDER 50-PozzoHauptOben_PUMPE_PozzoDOIF
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2017-03-31 13:18:35   Device          Xtender_AC_out
     2017-03-31 13:16:03   Laufzeit        {{0 + 621} + 341}
     2017-03-31 13:16:03   cmd             2.2
     2017-03-31 13:16:03   cmd_event       Xtender_AC_out
     2017-03-31 13:16:03   cmd_nr          2
     2017-03-31 13:16:03   cmd_seqnr       2
     2017-03-30 16:31:58   e_PozzoHauptOben_PUMPE_PozzoDOIF_Laufzeit 0
     2017-03-30 16:31:58   e_PozzoHauptOben_PUMPE_PozzoDOIF_cmd_seqnr 2
     2017-03-31 13:18:35   e_Xtender_AC_out_Power__W 262 W
     2017-03-31 13:15:38   e_myTwilight_elevation 53.25
     2017-03-30 16:31:43   last_cmd        cmd_2
     2017-03-31 13:16:03   state           cmd_2
     2017-03-30 16:35:22   timer_01_c02    31.03.2017 13:00:00
     2017-03-30 16:35:22   timer_02_c02    31.03.2017 16:00:00
     2017-03-31 04:00:00   timer_03_c04    01.04.2017 04:00:00
     2017-03-31 13:16:03   wait_timer      no timer
   Condition:
     0          ReadingValDoIf($hash,'myTwilight','elevation') > InternalDoIf($hash,'Beregnung_Startelevation','STATE') and ($month >= InternalDoIf($hash,'Beregnung_Startmonat','STATE') and $month <= InternalDoIf($hash,'Beregnung_Endmonat','STATE')) and ReadingValDoIf($hash,'Xtender_AC_out','Power__W','','(-?\d+(\.\d+)?)') < 1200 and ReadingValDoIf($hash,'PozzoHauptOben_PUMPE_PozzoDOIF','Laufzeit') < 8400
     1          DOIF_time($hash,0,1,$wday,$hms) and ($month < InternalDoIf($hash,'Beregnung_Startmonat','STATE') or $month > InternalDoIf($hash,'Beregnung_Endmonat','STATE')) and ReadingValDoIf($hash,'Xtender_AC_out','Power__W','','(-?\d+(\.\d+)?)') < 1200 and ReadingValDoIf($hash,'PozzoHauptOben_PUMPE_PozzoDOIF','Laufzeit') < 1200
     2          ReadingValDoIf($hash,'Xtender_AC_out','Power__W','','(-?\d+(\.\d+)?)') > 2100 and ReadingValDoIf($hash,'PozzoHauptOben_PUMPE_PozzoDOIF','cmd_seqnr') == "1"
     3          DOIF_time_once($hash,2,$wday)
   Days:
   Devices:
     0           myTwilight Beregnung_Startelevation Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out
     1           Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out
     2           Xtender_AC_out PozzoHauptOben_PUMPE_PozzoDOIF
     all         myTwilight Beregnung_Startelevation Beregnung_Startmonat Beregnung_Endmonat Xtender_AC_out PozzoHauptOben_PUMPE_PozzoDOIF
   Do:
     0:
       0          set PozzoHauptOben_PUMPE_Pozzo on
       1          set PozzoHauptOben_PUMPE_PozzoDOIF cmd_3
     1:
       0          set PozzoHauptOben_PUMPE_Pozzo on
       1          set PozzoHauptOben_PUMPE_PozzoDOIF cmd_3
     2:
       0          set PozzoHauptOben_PUMPE_Pozzo off,set PozzoHauptOben_PUMPE_PozzoDOIF Laufzeit {[PozzoHauptOben_PUMPE_PozzoDOIF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec]}
     3:
       0          set PozzoHauptOben_PUMPE_PozzoDOIF Laufzeit 0
     4:
   Helper:
     event      Energy_total__kWh: 2589.541 kWh,statEnergy_total__kWh: Hour: 0.307 Day: 3.470 Month: 168.964 Year: 368.276,statEnergy_total__kWhDay: 3.470
     globalinit 1
     last_timer 3
     sleepdevice Xtender_AC_out
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Xtender_AC_out
     timerevent Energy_total__kWh: 2589.541 kWh,statEnergy_total__kWh: Hour: 0.307 Day: 3.470 Month: 168.964 Year: 368.276,statEnergy_total__kWhDay: 3.470
     triggerDev Xtender_AC_out
     timerevents:
       Energy_total__kWh: 2589.541 kWh
       statEnergy_total__kWh: Hour: 0.307 Day: 3.470 Month: 168.964 Year: 368.276
       statEnergy_total__kWhDay: 3.470
     timereventsState:
       Energy_total__kWh: 2589.541 kWh
       statEnergy_total__kWh: Hour: 0.307 Day: 3.470 Month: 168.964 Year: 368.276
       statEnergy_total__kWhDay: 3.470
     triggerEvents:
       Energy_total__kWh: 2589.541 kWh
       statEnergy_total__kWh: Hour: 0.307 Day: 3.470 Month: 168.964 Year: 368.276
       statEnergy_total__kWhDay: 3.470
     triggerEventsState:
       Energy_total__kWh: 2589.541 kWh
       statEnergy_total__kWh: Hour: 0.307 Day: 3.470 Month: 168.964 Year: 368.276
       statEnergy_total__kWhDay: 3.470
   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          1490958000
     1          1490968800
     2          1491012000
   Readings:
     0           myTwilight:elevation Xtender_AC_out:Power__W PozzoHauptOben_PUMPE_PozzoDOIF:Laufzeit
     1           Xtender_AC_out:Power__W PozzoHauptOben_PUMPE_PozzoDOIF:Laufzeit
     2           Xtender_AC_out:Power__W PozzoHauptOben_PUMPE_PozzoDOIF:cmd_seqnr
     all         myTwilight:elevation Xtender_AC_out:Power__W PozzoHauptOben_PUMPE_PozzoDOIF:Laufzeit PozzoHauptOben_PUMPE_PozzoDOIF:cmd_seqnr
   Realtime:
     0          13:00:00
     1          16:00:00
     2          04:00:00
   Regexp:
     0:
     1:
     2:
     3:
     All:
   State:
   Time:
     0          13:00:00
     1          16:00:00
     2          04:00:00
   Timecond:
     0          1
     1          1
     2          3
   Timer:
     0          0
     1          0
     2          0
   Timers:
     1           0  1
     3           2
   Trigger:
   Triggertime:
     1490968800:
       localtime  1490968800
       Hash:
     1491012000:
       localtime  1491012000
       Hash:
Attributes:
   devStateIcon disabled:general_aus@red:initialize initialized:general_an@yellow:disable cmd_1:general_an@yellow:disable cmd_1_1:general_an@green:disable cmd_2:general_an@yellow:disable cmd_2_1:general_an@green:disable cmd_3:general_an@yellow:disable cmd_4:general_an@yellow:disable initialize:general_an@yellow:disable
   group      System
   readingList Laufzeit
   room       System
   sortby     7
   wait       300,9000-[$SELF:Laufzeit]:300,1800-[$SELF:Laufzeit]:0:0



Laufzeit hat Klammerberechnung (text) und die Pumpe läuft nicht mehr an (weil Klammerwerte nicht als Zahl gesehen und somit nicht kleiner als 1200 ist?). Hat jemand einen Klammer-Tip?

Edit: So sollte es gehen. Man beachte "()" um der Berechnung:

(set PozzoHauptOben_PUMPE_Pozzo off,set $SELF Laufzeit {([$SELF:Laufzeit] + [PozzoHauptOben_PUMPE_Pozzo:state:sec])})
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: Per am 02 April 2017, 13:30:48
Inzwischen war es schon wieder 2x 13 Uhr...
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 02 April 2017, 14:28:42
Jup, und wie "oben" im Edit geschrieben funktioniert es so. Danke für deine Hilfe Per.
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: Per am 03 April 2017, 07:59:31
Im Edit steht noch "sollte" ;). Aber schön, dass es geht. Konnte es ja nicht am eigenen System nachbasteln, also "graue" Theorie.
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit Laufzeitberechnung
Beitrag von: holle75 am 03 April 2017, 13:31:35
Wo du Recht hast ....

final (hoffentlich jetzt wirklich), falls es jemand gebrauchen kann, hier der Code.

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] eq  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 devStateIcon disabled:general_aus@red:initialize initialized:general_an@yellow:disable cmd_1:general_an@yellow:disable cmd_1_1:general_an@green:disable cmd_2:general_an@yellow:disable cmd_2_1:general_an@green:disable cmd_3:general_an@yellow:disable cmd_4:general_an@yellow:disable initialize:general_an@yellow:disable
attr PozzoHauptOben_PUMPE_PozzoDOIF group System
attr PozzoHauptOben_PUMPE_PozzoDOIF readingList Laufzeit
attr PozzoHauptOben_PUMPE_PozzoDOIF room System
attr PozzoHauptOben_PUMPE_PozzoDOIF sortby 7
attr PozzoHauptOben_PUMPE_PozzoDOIF wait 300,9000-[$SELF:Laufzeit]:300,1800-[$SELF:Laufzeit]:0:0


PS @Per: hätte da noch eine sehr wilde Beregnungssteuerung. Falls du noch mehr Muse für Denksportaufgaben hättest (es funktioniert großartig, aber ist so unhübsch, dass selbst mir schlecht wird), würde ich noch einen weiteren Thread aufmachen?

Nochmal Danke und Gruß
Titel: Antw:[gelöst] Pumpensteuerung abhängig Monat/Sonne/Stromverbr. mit ...
Beitrag von: Per am 03 April 2017, 14:06:47
Zitat von: holle75 am 03 April 2017, 13:31:35hätte da noch eine sehr wilde Beregnungssteuerung. Falls du noch mehr Muse für Denksportaufgaben hättest (es funktioniert großartig, aber ist so unhübsch, dass selbst mir schlecht wird), würde ich noch einen weiteren Thread aufmachen?
Mach mal. Im schlimmsten Fall behälst du deine alte Lösung und dümmer werden wir davon bestimmt auch nicht.