[gelöst]Poolpumpe mit WeekdayTimer abhängig von Pooltemperatur ausschalten

Begonnen von Bracew, 22 Juni 2019, 17:20:32

Vorheriges Thema - Nächstes Thema

Bracew

Hallo,

ich habe am Pool im Garten

1) zwei DS18B20 Temperaturfühler an einem ESP8266 (NodeMCU) mit ESP-Easy, welche per WLAN an FHEM die Wassertemperaturen im Pool senden. Klappt wunderbar. Temperatur wird angezeigt und in Logfile gespeichert.
# #################################################################
# Temperaturmessung PoolSensor 1 (DS18b20) OBEN mit NodeMCU
# #################################################################
#
define SensorPool1 ESPEasy 192.168.0.60 80 espBridge ESP_Easy_DS18b20_1
attr   SensorPool1 IODev espBridge
attr   SensorPool1 Interval 0
attr   SensorPool1 group Pool-Temperatur
attr   SensorPool1 presenceCheck 0
attr   SensorPool1 readingSwitchText 0
attr   SensorPool1 room Garten
attr   SensorPool1 setState 3
attr   SensorPool1 sortby 2
attr   SensorPool1 stateFormat <span style="color:red">Temperatur aktuell OBEN: temperature °C </span>
#
define LogfileSensorPool1 FileLog ./log/PiSensorPool1-%Y.log SensorPool1
attr   LogfileSensorPool1 group Pool-Temperatur
attr   LogfileSensorPool1 logtype temp4:window,text
attr   LogfileSensorPool1 room Garten
attr   LogfileSensorPool1 sortby 4
#
# #################################################################
# Temperaturmessung PoolSensor 2 (DS18b20) UNTEN mit NodeMCU
# #################################################################
#
define SensorPool2 ESPEasy 192.168.0.60 80 espBridge ESP_Easy_DS18b20_2
attr   SensorPool2 IODev espBridge
attr   SensorPool2 Interval 0
attr   SensorPool2 group Pool-Temperatur
attr   SensorPool2 presenceCheck 0
attr   SensorPool2 readingSwitchText 0
attr   SensorPool2 room Garten
attr   SensorPool2 setState 3
attr   SensorPool2 sortby 3
attr   SensorPool2 stateFormat <span style="color:blue">Temperatur aktuell UNTEN: temperature °C </span>
#
define LogfileSensorPool2 FileLog ./log/PiSensorPool2-%Y.log SensorPool2
attr   LogfileSensorPool2 group Pool-Temperatur
attr   LogfileSensorPool2 logtype temp4:window,text
attr   LogfileSensorPool2 room Garten
attr   LogfileSensorPool2 sortby 5
#
# #################################################################
# Temperaturanzeige PoolSensor 1+2 (DS18b20) OBEN+UNTEN als GRAPH
# #################################################################
#
define SVG_SensorPool3 SVG LogfileSensorPool1:WeBeTemp2x:CURRENT
attr   SVG_SensorPool3 group Pool-Temperatur
attr   SVG_SensorPool3 label "OBEN Max.=$data{max1}°C, Min.=$data{min1}°C, Letzte=$data{currval1}°C | UNTEN Max.=$data{max2}°C, Min.=$data{min2}°C, Letzte=$data{currval2}°C"
attr   SVG_SensorPool3 room Garten
attr   SVG_SensorPool3 sortby 1


2) ein Schaltsteckdose, welche die Poolpumpe an und ausschalten kann. Die Schaltsteckdose wird von FHEM per WeekdayTimer gesteuert.
# #################################################################
# Pool-Pumpe automatisch und per Hand schalten
# #################################################################
#
# In Weboberflaeche anklicken ob Automatik An oder Aus sein soll
#
define PoolpumpeAutomatik dummy
attr   PoolpumpeAutomatik devStateIcon ja:ampel_gruen:nein nein:ampel_rot:ja
attr   PoolpumpeAutomatik group Pool
attr   PoolpumpeAutomatik icon scene_swimming
attr   PoolpumpeAutomatik room Garten
attr   PoolpumpeAutomatik sortby 1
attr   PoolpumpeAutomatik webCmd ja:nein
#
# Zusammenfassung, welche Schalter fuer Pool geschaltet werden sollen
#
define Poolpumpe structure room Lampe_BS4
attr   Poolpumpe comment FunkSchalter für Poolpumpe
attr   Poolpumpe group Pool
attr   Poolpumpe room Garten
attr   Poolpumpe sortby 2
attr   Poolpumpe icon scene_swimming
#
define PoolpumpeAuto WeekdayTimer Poolpumpe 09:00:00|on 15:00:00|off (isPoolpumpeAutomatik())
attr   PoolpumpeAuto commandTemplate set $NAME  $EVENT
attr   PoolpumpeAuto group Pool
attr   PoolpumpeAuto room hidden
attr   PoolpumpeAuto icon scene_swimming


Die Poolpumpe wird zur Zeit fest um 9:00 Uhr ein und um 15:00 ausgeschaltet. Läuft also mit fester Lauflänge 6 Stunden pro Tag.
Soweit so gut.

Ich würde die Laufzeit der Pumpe jedoch gerne abhängig von der Temperatur schalten.
Je wärmer die Wassertemperatur desto länger sollte die Poolpumpe laufen.
Zum Beispiel 1 Stunde (=60 Minuten) Grundlaufzeit plus 12 Minuten je Grad Temperatur länger.
  Bei 20°C Wassertemperatur also 60+20*12=300 Minuten (=5 Stunden)
  Bei 25°C Wassertemperatur also 60+25*12=360 Minuten (=6 Stunden)
  Bei 30°C Wassertemperatur also 60+30*12=420 Minuten (=7 Stunden)

Wie muss ich den WeekdayTimer umbauen um das zu erreichen?
Ich bitte um Eure Hilfe.

Danke Bracew

Ergänzung vom 06.07.2019: Vorläufige Lösung, siehe Antwort #39
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Der Spur nach:

isPoolpumpeAutomatik()

in ein disablecondition-Attribut packen

und dann hinten Perl-Code verwenden, der bei $EVENT eq "on" die Berechnung der Dauer macht und mit on-for-timer entsprechend lange einschaltet (und "off" durchreicht).

(Nebenbemerkung: direktes cfg-Editieren ist nicht mehr das empfohlene Vorgehen).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Bracew

Vielen Dank für Deine Hilfe,
jedoch verstehe ich es nicht wie Du das meinst bzw. was ich ändern müsste
Wäre es dir möglich ein Beispiel zu geben?
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Zum ersten Punkt: defmod rr_Kind1_Presence_Timer WeekdayTimer rr_Kind1 !$we|06:45|absent $we|10:00|awoken $we|10:30|home 56|23:00|gotosleep 56|23:30|asleep
attr rr_Kind1_Presence_Timer userattr HT_Devices
attr rr_Kind1_Presence_Timer commandTemplate set $NAME  $EVENT
attr rr_Kind1_Presence_Timer delayedExecutionCond {ReadingsVal($NAME,'smartphone','absent') eq 'present' and $EVENT eq 'absent'?1:0}
attr rr_Kind1_Presence_Timer disable 0
attr rr_Kind1_Presence_Timer icon status_automatic
attr rr_Kind1_Presence_Timer room Steuerung->Presence

Da wird dann nur geschaltet, wenn das Smartphone da ist.

Hier ein Beispiel für einen Perlcode-Aufruf:
defmod Timer_Umwaelzpumpe WeekdayTimer MYSENSOR_96 !$we|05:50|on $we|06:55|on 12:30|on {fhem ("set $NAME status1 $EVENT") if (ReadingsVal('MYSENSOR_96','temperature21',0) < 35 and ReadingsVal('Status_Urlaub','state',"off") ne "on")}
attr Timer_Umwaelzpumpe commandTemplate set $NAME  $EVENT
attr Timer_Umwaelzpumpe group Heizung
attr Timer_Umwaelzpumpe icon sani_water_cold
attr Timer_Umwaelzpumpe room Bad_EG,Heizung


Das mußt du dann ausbauen und beide $EVENT-Fälle unterscheiden mit (Perl-) if ... else .... So ähnlich wie beispielsweise in diesem (etwas komplizierteren) notify:
defmod Tuerkontakt_WZ_notify notify (Balkontuer|Terrassentuer_WZ):(open|closed).* {\
  if($EVENT eq "open" )\
    {fhem 'defmod at_Check_WZ at +00:01:30 {if (ReadingsVal("Heizperiode","state","off") eq "on" && (Value("Balkontuer") eq "open" or Value("Terrassentuer_WZ") eq "open") ) {fhem "set Virtueller_Tuerkontakt_WZ offen"}}';;\
  } else {\
    fhem "set Virtueller_Tuerkontakt_WZ geschlossen" if( Value("Virtueller_Tuerkontakt_WZ") ne "geschlossen" && Value("Balkontuer") eq "closed" && Value("Terrassentuer_WZ") eq "closed")\
  }\
}

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Bracew

Sieht sehr kompliziert aus,
ich dachte es gäbe eher die Möglichkeit á la:

define PoolpumpeAuto WeekdayTimer Poolpumpe 09:00:00|on [Einschaltzeit+ReadingsVal("SensorPool1", "Temperature", "") *12)]|off (isPoolpumpeAutomatik())

oder

define PoolpumpeAuto WeekdayTimer Poolpumpe 09:00:00|on (10:00:00+ReadingsVal("SensorPool1", "Temperature", "") *12))|off (isPoolpumpeAutomatik())
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Das zweite _könnte_ so ähnlich klappen, aber:
Es muß eine Perl-Anweisung als Zeitangabe da stehen. Siehe commandref zu WeekdayTimer und dort die Beispiele, z.B. {sunrise_abs_dat($date)}.
Du mußt als oder eine Formel finden, die da richtig rechnet. Dabei beachten: WDT rechnet die Zeiten nur zu Tagesbeginn aus, danach sind sie fix. Wenn du zum Einschaltzeitpunkt die Temp. berücksichtigen willst, mußt du dann rechnen (also "hinten").
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Byte09

wenn du nicht an dem 'wdt' festhalten willst/musst könnte ich dir ein entsprechendes 'MSwitch' zusammenbauen , ist damit relativ einfach zu machen .

sag einfach bescheid , wenn du es versuchen möchtest .

gruss Byte09

Bracew

1.) wann die Laufzeit berechnet wird, z.B. nur zu Tagesbeginn, wäre ziemlich egal.
Ich habe mal
define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on {10:00:00+ReadingsVal("SensorPool1","Temperature",20)*12}|off (isPoolpumpeAutomatik())
in runden oder auch geschweiften Klammern eingesetzt:
Profil 0: Sonntag 00:00:00 off, 09:00:00 on
Profil 1: Montag 00:00:00 off, 09:00:00 on
Profil 2: Dienstag 00:00:00 off, 09:00:00 on
Profil 3: Mittwoch 00:00:00 off, 09:00:00 on
Profil 4: Donnerstag 00:00:00 off, 09:00:00 on
Profil 5: Freitag 00:00:00 off, 09:00:00 on
Profil 6: Samstag 00:00:00 off, 09:00:00 on

Off ist immer 00:00:00.
Wird das neu erst um Mitternacht berechnet? Muss ich darauf warten ob es funktionieren würde?

2.) MSwitch kenne ich noch gar nicht. Ist mir neu.
Aber es muss nicht WeekdayTimer sein, Hauptsache die Pumpe würde entsprechend laufen. Ob mit WdT oder MSwitch wäre mir egal.
Ich würde die Automatik nur gerne über die Ampel (isPoolpumpeAutomatik()) im Winter aus im im Sommer einschalten können.
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Bracew

Ich habe mir mal MSwitch im Wiki angelesen....sieht für einen Anfänger wie mich kompliziert aus. Falls es mit WdT realisierbar wäre, so würde ich diesen Weg bevorzugen.
Auch weil ich gewohnt bin in der fhem.cfg zu editieren (obwohl dies "...nicht mehr das empfohlene Vorgehen..." ist. Aber ich bin mit Fortran und Cobol und so groß geworden.)
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Byte09

Zitat von: Bracew am 22 Juni 2019, 19:14:46
Ich habe mir mal MSwitch im Wiki angelesen....sieht für einen Anfänger wie mich kompliziert aus.......

hmm ..... ist es eigentlich nicht , wenn man einmal etwas eingerichtet hat  ;) . Es ist wohl eher das wiki das es kompliziert erscheinen lässt  ???

gruss Byte09

Beta-User

Es geht, aber du mußt anders mit den Zeiten rechnen: nur Sekunden, ausgehend von "jetzt". 10:00:00 Uhr wäre also " jetzt" (um Mitternacht)+ 10*HOURSECONDS.
Den Teil kann man auch via Kommandozeile testen (mit Klammern eingeben).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Bracew

bei meinem WdT:
define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on {10:00:00+ReadingsVal("SensorPool1","Temperature",20)*12}|off (isPoolpumpeAutomatik())

müsste ich ja nur den {10:00:00+ReadingsVal("SensorPool1","Temperature",20)*12} Teil noch klären, ob und wie es funktioniert.

Aber wie?
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Bracew

Zitat von: Beta-User am 22 Juni 2019, 19:26:38
Den Teil kann man auch via Kommandozeile testen (mit Klammern eingeben).

Das mit der "Kommandozeile"  kenne ich auch nicht. Ich weiß wo die "Kommandozeile" ist, aber wie muss ich das Eingeben zum testen?
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Bracew

Auch mit:
define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on {10*HOURSECONDS+ReadingsVal("SensorPool1","Temperature",20)*12*MINUTESECONDS}|off (isPoolpumpeAutomatik())

bekomme ich nur:
Profil 0: Sonntag 00:00:00 off, 09:00:00 on
Profil 1: Montag 00:00:00 off, 09:00:00 on
Profil 2: Dienstag 00:00:00 off, 09:00:00 on
Profil 3: Mittwoch 00:00:00 off, 09:00:00 on
Profil 4: Donnerstag 00:00:00 off, 09:00:00 on
Profil 5: Freitag 00:00:00 off, 09:00:00 on
Profil 6: Samstag 00:00:00 off, 09:00:00 on


Muss das nun noch in einen String umgewandelt werden?
FHEM auf Raspberry Pi
für z.B. Lichtsteuerung, Temperaturmessung, Balkonkraftwerk,
Öltankfüllstandsmessung und für Hühnerstall Hühnerklappe

Beta-User

Wie gesagt, du mußt die Zeit von "Mitternacht" dazurechnen. Das könnte "time" sein (müßte ich auch nachsehen). Und dann das ermittelte Sekundenergebnis wieder in das übliche Zeitformat formatieren, das gibt auch {sunrise_abs_dat($today)} zurück (in die Kommandozeile eingegeben).

Ich würde nochmal empfehlen, das ganze mit "on-for-timer" zu lösen, das sollte das Aktormodul doch können, oder? Dann berechnest du einfach die Einschaltdauer. Etwa so:

define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on { my $duration = 1*HOURSECONDS+ReadingsVal("SensorPool1","Temperature",20)*12*MINUTESECONDS;
fhem ("set $NAME on-for-timer $duration") if isPoolpumpeAutomatik()}

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files