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.
ohne list von dem Modul im vermeintlichen Zustand wird man dir nicht helfen können.
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
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.
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
Du kannst wait ja berechnete Werte vorsetzen. Also beim Start die Zeit setzen und dann die neuen Variablen für wait berechnen.
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?
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
.... 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 ;)
... 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.
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
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!
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?
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.
Habe die commanref jetzt zwei mal durch, finde aber keine Erklärung für Userreadings. Kleiner Hinweis an welcher Stelle des Manifestes?
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).
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
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?
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?
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. ;)
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.
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])})
Inzwischen war es schon wieder 2x 13 Uhr...
Jup, und wie "oben" im Edit geschrieben funktioniert es so. Danke für deine Hilfe Per.
Im Edit steht noch "sollte" ;). Aber schön, dass es geht. Konnte es ja nicht am eigenen System nachbasteln, also "graue" Theorie.
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ß
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.