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
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).
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?
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")\
}\
}
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())
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").
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
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.
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.)
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
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).
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?
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?
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?
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()}
in der Tat,
hatte ich gestern abend noch on-for-timer mal ausprobiert. Zunächst ganz einfach mit:
define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on-for-timer:21600 (isPoolpumpeAutomatik())
heute morgen hat FHEM die Poolpumpe an:
Profil 0: Sonntag 09:00:00 on-for-timer:21600
Profil 1: Montag 09:00:00 on-for-timer:21600
Profil 2: Dienstag 09:00:00 on-for-timer:21600
Profil 3: Mittwoch 09:00:00 on-for-timer:21600
Profil 4: Donnerstag 09:00:00 on-for-timer:21600
Profil 5: Freitag 09:00:00 on-for-timer:21600
Profil 6: Samstag 09:00:00 on-for-timer:21600
STATE on-for-timer:21600
Noch habe ich das richtige Aktormodul nicht. Es soll eine OBI-WLAN-Steckdose werden, welche hier schon liegt. Aber ich warte noch auf den FTDI USB zu Serial Wandler aus China um ESP-Easy drauf zu laden, so dass ich im Moment nur FHEM intern probiere. Ob die Obi-Steckdose on-for-timer kann, weiß ich nicht.
Bei:
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()}
bekomme ich die Antwort: Unknown command fhem, try help.
Vermutlich geht dann mehrzeilig nicht, vielleicht liegt es an den Hochkommata; evtl. geht es z.B. so:
define PoolpumpeAuto WeekdayTimer Poolpumpe de 09:00:00|on { fhem ("set $NAME on-for-timer 1*HOURSECONDS+ReadingsVal('SensorPool1','Temperature',20)*12*MINUTESECONDS") if isPoolpumpeAutomatik()}
Was die Firmaware angeht: Sowohl ESPEasy wie MQTT2_DEVICE kennen SetExtensions; damit sollte on-for-timer kein Thema sein.
Hallo zusammen,
der FTDI USB zu Serial Wandler zum flashen der OBI-WLAN-Steckdose ist da. ESP-Easy ist drauf. Aber es war nicht leicht die richtigen Einstellungen zu finden und die OBI-WLAN-Steckdose halbwegs zu zähmen, aber nun geht es zumindestens mit festen Schaltzeiten und mit Klick auf der FHEM Oberfläche, siehe: https://forum.fhem.de/index.php/topic,84777.msg954059.html#msg954059
Bezüglich des WeekdayTimer habe ich noch keine Lösung gefunden.
Das mit dem "on-for-timer" möchte ich gerne verwerfen.
Viel lieber wäre es mir einen Tipp zu bekommen, wie ich die Ausschaltzeit berechnen kann, so dass je wärmer es wird je länger die Poolpumpe läuft.
Danke und mit lieben Grüßen Bracew
Zitat von: Bracew am 30 Juni 2019, 18:53:31
Bezüglich des WeekdayTimer habe ich noch keine Lösung gefunden.
Das mit dem "on-for-timer" möchte ich gerne verwerfen.
Viel lieber wäre es mir einen Tipp zu bekommen, wie ich die Ausschaltzeit berechnen kann, so dass je wärmer es wird je länger die Poolpumpe läuft.
Was spricht denn gegen die on-for-timer-Lösung?
Ansonsten hattest du einen Tipp: Das müßte mit einer Perl-Funktion klappen, die du als Uhrzeit angibst. Diese muß eine Uhrzeit (für den off-Befehl) zurückgeben... Diese Perl-Funktion wird dann (durch den WDT-Code automatisch) jeden Tag um 00:00 Uhr ausgeführt, was bedeutet, dass - anders als bei on-for-timer - die Temperatur im Einschaltzeitpunkt noch nicht bekannt ist.
Finde ich weniger elegant als on-for-timer und sehe auch sonst keinen Vorteil, da in beiden Fällen schlicht ein interner Timer in FHEM gesetzt und abgearbeitet wird (jedenfalls mit dieser Hardware als Empfänger des on-for-... Befehls).
Hallo Beta-User,
ZitatWas spricht denn gegen die on-for-timer-Lösung?
Sie hat im Test nicht funktioniert. Im Device stand der Text: 1*HOURSECONDS... und keine Zeitangabe.
Ich hab den genauen Text nicht mehr in Erinnerung.
Aber da ich jetzt die richtige Schaltsteckdose habe, werde ich das nochmals am nächsten Wochenende ausprobieren.
Danke für Dein Engagement, mit lieben Grüßen
Bracew
Ah ok. Damit kann man was anfangen...
Das war erst mal auch nur Pseudocode (ich kann das nicht wirklich testen, aber das Fehlerfragment ist eigentlich logisch...), jetzt evtl. dann mal mit folgendem an den Start gehen:
{ if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','Temperature',20)*12*MINUTESECONDS; fhem ("set $NAME on-for-timer $duration") }}
Kann ich das irgendwie anders als mit einem Reellen Device testen (z.B.Dummy)?
Sonst wie gesagt am Wochenende.
Vermutlich schon; und du kannst die Perl-Sachen auch "isoliert" über die Kommandozeile eingeben (dann mit den geschweiften Klammern drumrum)...
{HOURSECONDS+ReadingsVal('SensorPool1','Temperature',20)*12*MINUTESECONDS} in der Kommandozeile ergibt: 19872,
sieht gut aus!
Wie könnte ich jetzt einen WeekdayTimer mit on-for-timer auf einen Dummy loslassen?
{ReadingsVal('SensorPool1','Temperature',20)} ergibt aber 22.1
obwohl der Pool im Moment über 30°C hat :-\
Aahhh, falsche Schreibweise mit:
{ReadingsVal('SensorPool1','temperature',20)} ergibt es 30.3
das sieht gut aus!
Zitat von: Bracew am 01 Juli 2019, 17:51:42
Wie könnte ich jetzt einen WeekdayTimer mit on-for-timer auf einen Dummy loslassen?
Einfach das Zieldevice entsprechend wählen... (Statt Poolpumpe, oder wie auch immer das im Original hieß)
Mit:
define Poolpumpe1 structure room Lampe_BS4
attr Poolpumpe1 comment FunkSchalter für Poolpumpe
attr Poolpumpe1 group Pool1
attr Poolpumpe1 room test
attr Poolpumpe1 icon scene_swimming
define PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS; fhem ("set $NAME on-for-timer $duration") }}
attr PoolpumpeAutoTest commandTemplate set $NAME $EVENT
attr PoolpumpeAutoTest group Pool1
attr PoolpumpeAutoTest room test
attr PoolpumpeAutoTest icon scene_swimming
kommt:
ZitatERROR:
Unknown command fhem, try help.
Ein Komma zuviel hinter MINUTESECONDS?
Hab's rausgenommen und kommt kein Fehler
list PoolpumpeAutoTest
Internals:
COMMAND { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS fhem ("set $NAME on-for-timer $duration") }}
CONDITION
DEF Poolpumpe1 de 09:00:00|on { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS fhem ("set $NAME on-for-timer $duration") }}
DEVICE Poolpumpe1
FUUID 5d1a300e-f33f-8319-*
GlobalDaylistSpec
LANGUAGE de
NAME PoolpumpeAutoTest
NR 823
Profil 0: Sonntag 09:00:00 on
Profil 1: Montag 09:00:00 on
Profil 2: Dienstag 09:00:00 on
Profil 3: Mittwoch 09:00:00 on
Profil 4: Donnerstag 09:00:00 on
Profil 5: Freitag 09:00:00 on
Profil 6: Samstag 09:00:00 on
STATE active
STILLDONETIME 0
TYPE WeekdayTimer
READINGS:
2019-07-01 18:08:52 currValue on
2019-07-01 18:08:52 nextUpdate 2019-07-02 09:00:00
2019-07-01 18:08:52 nextValue on
2019-07-01 18:08:52 state active
SWITCHINGTIMES:
09:00:00|on
TIMER:
PoolpumpeAutoTest_SetTimerOfDay:
HASH PoolpumpeAutoTest
MODIFIER SetTimerOfDay
NAME PoolpumpeAutoTest_SetTimerOfDay
SETTIMERATMIDNIGHT 1
dayNumber:
!$we 8
$we 7
di 2
do 4
fr 5
mi 3
mo 1
sa 6
so 0
helper:
daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
SWITCHINGTIME:
0:
09:00:00 on
1:
09:00:00 on
2:
09:00:00 on
3:
09:00:00 on
4:
09:00:00 on
5:
09:00:00 on
6:
09:00:00 on
longDays:
de:
Sonntag
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Samstag
Wochenende
Werktags
en:
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
weekend
weekdays
fr:
Dimanche
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
weekend
jours de la semaine
profil:
1:
EPOCH 1561964400
PARA on
TIME 09:00:00
TAGE:
0
1
2
3
4
5
6
profile_IDX:
0:
09:00:00 1
1:
09:00:00 1
2:
09:00:00 1
3:
09:00:00 1
4:
09:00:00 1
5:
09:00:00 1
6:
09:00:00 1
shortDays:
de:
so
mo
di
mi
do
fr
sa
$we
!$we
en:
su
mo
tu
we
th
fr
sa
$we
!$we
fr:
di
lu
ma
me
je
ve
sa
$we
!$we
Attributes:
commandTemplate set $NAME $EVENT
group Pool1
icon scene
Mal sehen, ob es heute Nacht um 0:00 richtig rechnet. Im Moment ist ja noch nichts drin, so wie ich es interpretiere.
...wenn, dann eher ein Semikolon zu wenig, aber definitiv nicht zuviel...
(das sind zwei Perl-Zeilen, die da getrennt werden. Wenn das mit den zwei Zeilen grundsätzlich nicht geht, geht evtl. ein myUtils-Aufruf, der die beiden Zeilen dann intern ausführt, aber aus WDT-Sicht eben eine Zeile ist. Viel mehr fällt mir grade nicht ein...
Habe grade nochmal einen Test gemacht: mit zwei ";;" scheint die Perl-Geschichte durchzulaufen. Ist die übliche "Escaperei", die man auch anderswo braucht. Also sollte das funktionieren:
define PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS;; fhem ("set $NAME on-for-timer $duration") }}
oder (in der Art hatte ich es getestet, ist aber nur eine andere Schreibweise):
define PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS;; fhem ("set $NAME on-for-timer $duration") if isPoolpumpeAutomatik() }
Ich habe mal beide Varianten bei meinem FHEM versucht. Heraus kommt immer, dass keine "off" Zeit im Device steht, siehe Bild (von der 2. Variante).
define Poolpumpe1 structure room Lampe_BS4
attr Poolpumpe1 comment FunkSchalter für Poolpumpe
attr Poolpumpe1 group Pool1
attr Poolpumpe1 room test
attr Poolpumpe1 icon scene_swimming
#define PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { if isPoolpumpeAutomatik() {my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS;; fhem ("set $NAME on-for-timer $duration") }}
define PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS;; fhem ("set $NAME on-for-timer $duration") if isPoolpumpeAutomatik() }
attr PoolpumpeAutoTest commandTemplate set $NAME $EVENT
attr PoolpumpeAutoTest group Pool1
attr PoolpumpeAutoTest room test
attr PoolpumpeAutoTest icon scene_swimming
Wie testest Du das? kannst Du unter des Tages eine Neuberechnung machen lassen? Ich dachte dies geschieht immer nur um Mitternacht.
ich sehe da nur ein ";" in DEF und command?
Wenn du die Berechnung in der Perl-Anweisung hinten machen läßt, wird das zur Ausführugnszeit berechnet.
Ich hatte unterdessen den Auszug aus der fhem.cfg noch zu vor eingefügt. Entschuldigung.
Hier in der DEF mit 2 Semikolon
Bitte möglichst cfg-editing unterlassen... Eine RAW-Def oder ein list tut es auch.
Was den screenshots angeht: Bitte sieh dir die Detailseite des Aktors an. MWn wird die Info auf der WDT-Seite nicht erneuert. (Alternativ: refreshen).
Du kannst zu Testzwecken auch das "SwitchInThePast" (oder so) setzen. Dann müßte eine Änderung auch direkt eine Neuberechnung der letzten Schaltanweisung erfolgen und diese ausgeführt werden (beim Neustart und wohl auch beim Ändern der DEF von 9:00 Uhr auf 9:01 Uhr).
Ich habe im DeviceOverview mit Klick auf DEF die Zeit auf 09:01:00 geändert, anschließend Save config und Restart, aber keine Änderung.
Wie muss ich das mit dem "SwitchInThePast" genau setzen. Übrigens, Google führt mich dazu auf Seiten für Brustvergrößerungen.
es gibt ein Attribut, das irgendwie so heißt (steht auch in der cref). Das auf 1 oder on setzten, was auch immer davon in FHEMWEB verfügbar ist...
Ohne das Attribut kannst du ändern und neustarten, wie du magst, 9:00 Uhr ist vorbei :) .
Also, hier die RAW-Def:
defmod PoolpumpeAutoTest WeekdayTimer Poolpumpe1 de 09:00:00|on { my $duration = HOURSECONDS+ReadingsVal('SensorPool1','temperature',20)*12*MINUTESECONDS;;;; fhem ("set $NAME on-for-timer $duration") if isPoolpumpeAutomatik() }
attr PoolpumpeAutoTest commandTemplate set $NAME $EVENT
attr PoolpumpeAutoTest group Pool1
attr PoolpumpeAutoTest icon scene_swimming
attr PoolpumpeAutoTest room test
attr PoolpumpeAutoTest switchInThePast 1
setstate PoolpumpeAutoTest on
setstate PoolpumpeAutoTest 2019-07-02 18:03:08 currValue on
setstate PoolpumpeAutoTest 2019-07-02 18:03:08 nextUpdate 2019-07-03 09:00:00
setstate PoolpumpeAutoTest 2019-07-02 18:03:08 nextValue on
setstate PoolpumpeAutoTest 2019-07-02 18:03:08 state on
Mal sehen ob und ggf. wie es morgen funktioniert.
Vielleicht noch zwei Anmerkungen:
- das mit dem Attribut war eigentlich nur für Testzwecke gedacht. Im laufenden Betrieb braucht man das bei dieser Art Zieldevice m.E. nicht.
- Das mit der Berechnung ist so: "hinten" wir der Code (vereinfacht gesagt) dann ausgewertet, wenn einer der Schaltzeitpunkte erreicht ist. Man kann aber auch die Schaltzeitpunkte in Perl berechnen. Diese Codes werden dann um Mitternacht jeweils neu berechnet, der Rückgabewert der aufgerufenen Funktion muß aber eine gültige Uhrzeit zurückliefern (Format HH:MM o. HH:MM:SS)
Hallo an Alle,
hallo Beta-User,
nachdem nun diese Woche der neue Lötkolben zusammen mit einem Sonoff S20 (https://www.amazon.de/Komforthaus-Schaltsteckdose-deutsche-Version-Android/dp/B07BRZ7JDX/ref=sr_1_6?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=sonoff+s20&qid=1562423547&s=gateway&sr=8-6 (https://www.amazon.de/Komforthaus-Schaltsteckdose-deutsche-Version-Android/dp/B07BRZ7JDX/ref=sr_1_6?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=sonoff+s20&qid=1562423547&s=gateway&sr=8-6)) eingetroffen ist, habe ich den Sonoff S20 auf Tasmota geflasht (https://github.com/arendst/Sonoff-Tasmota/wiki (https://github.com/arendst/Sonoff-Tasmota/wiki)).
Den Sonoff S20 konnte ich in FHEM via MQTT einbinden:
# #################################################################
# FHEM eigenen MQTT Broker anlegen - FHEM als MQTT-Server
# https://wiki.fhem.de/wiki/MQTT#MQTT2_CLIENT
# #################################################################
define myBroker MQTT2_SERVER 1883 global
setuuid myBroker 5d1e4efa-f33f-8****
# #################################################################
# Pool-Pumpe automatisch und per Hand schalten
# #################################################################
#
# Welcher Schalter fuer Pool mit Handschaltung: Sonoff-S20 via MQTT2
#
define Poolpumpe MQTT2_DEVICE DVES_B0B3EB
setuuid Poolpumpe 5d1f3d1b-***
attr Poolpumpe IODev myBroker
attr Poolpumpe autocreate 0
attr Poolpumpe model A_01a_tasmota_basic_state_power1
attr Poolpumpe readingList tele/sonoff/LWT:.* LWT\
tele/sonoff/STATE:.* { json2nameValue($EVENT) }\
tele/sonoff/SENSOR:.* { json2nameValue($EVENT) }\
tele/sonoff/INFO.:.* { json2nameValue($EVENT) }\
stat/sonoff/RESULT:.* { json2nameValue($EVENT) }
attr Poolpumpe room Garten
attr Poolpumpe group Pool
attr Poolpumpe setList off:noArg cmnd/sonoff/POWER1 0\
on:noArg cmnd/sonoff/POWER1 1\
toggle:noArg cmnd/sonoff/POWER1 2
attr Poolpumpe setStateList on off toggle
attr Poolpumpe stateFormat POWER1
attr Poolpumpe icon scene_swimming
#
# 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
#
# Automatische Schaltung wenn Automatik an mit variabler Endzeit
# berechnet aus Temperatur
# https://forum.fhem.de/index.php/topic,101687.msg951463.html#msg951463
#
define PoolpumpeAuto WeekdayTimer Poolpumpe 09:00:00|on { my $duration = HOURSECONDS*2+ReadingsVal('SensorPool2','temperature',20)*12*MINUTESECONDS;;;; fhem ("set $NAME on-for-timer $duration") if isPoolpumpeAutomatik() }
attr PoolpumpeAuto commandTemplate set $NAME $EVENT
attr PoolpumpeAuto group Pool
attr PoolpumpeAuto room hidden
attr PoolpumpeAuto icon scene_swimming
#
Heute habe ich beobachten können, dass um 9:00 Uhr die Pumpe pünktlich anging und nach Ablauf der berechneten Zeit von 7 Std. und 2 Min. um 16:02 Uhr wieder ausging. ;D
Ende Gut, alles Gut, aber mit Sonoff S20 statt OBI-Steckdose und mit MQTT statt Esp-Easy.
Hätte vielleicht auch in der OBI-ESPEasy Kombination funktioniert, wenn ich den "Richtigen" .bin File auf die OBI-Steckdose geflasht hätte. Grundfehler war meiner Vermutung nach, dass ich den *normal_ESP8266_4M.bin statt den *normal_ESP8266_1M.bin genommen hatte.
Na ja, jedenfalls freue ich mich.
An dieser Stelle vielen, vielen Dank an Beta-User für seine geduldige Hilfe.
Gruß Bracew
P.S.: Gibt es eine Möglichkeit die An- und Ausschaltzeit auf der FHEM Oberfläche anzuzeigen, zur Kontrolle?
Schön, dass es jetzt läuft, wie du das gerne hättest :) .
Bei laufenden on-for-timer-Anweisungen (&Co) gibt es eine Teilstruktur bei den Internals des geschalteten Geräts, in denen was dazu drinsteht; einfach mal ein "list" machen und jeweils testen (die aktualisierten Daten werden aber nur sichtbar, wenn du die Seite dann jeweils neu lädst).
Ansonsten:
-jeweils RAW-Definitionen wären besser als der cfg-Auszug (weniger wegen dir selbst, sondern mehr wegen eventueller Nachahmer, die sich damit evtl. ein Bein stellen, weil sie den falschen Editor benutzen oder whatever...)
- [gelöst]? (ersten Beitrag editieren)
Schönes WE noch,
Beta-User
Mit "Anzeigen" meinte ich: auf der Weboberfläche, also zum Beispiel in der Gruppe Pool.
Zum Beispiel, wie beigefügter manipulierter Screenshot:
Es steht in einem Internal bzw. man kann auch laufende Timer auswerten/sich listen lassen (siehe cancel).
Ergo kann man das auch mit viel Aufwand in STATE bringen via stateFormat (Perl, InternalVal...).
Etwas einfacher (aber auch vereinfacht) müßte es gehen, wenn du dir die Attribute zu MQTT2_DEVICE mal näher ansiehst: Da hat Rudi was in MQTT2_DEVICE eingebaut, dass man zumindest die Frage, ob ein Timer läuft, per Symbol angezeigt bekommt. Das dürfte in der Regel ausreichen, oder? Wenn du kontrollieren willst, wie lange der Timer läuft, mußt du dann eben in die list-Anzeige oder (wenn das geht, ich nutze dafür ggf. erweiterten eigenen code) läßt dir mit cancel anzeigen, was so alles ansteht...
Zitat...auch mit viel Aufwand...
Ah ok, dann hat sich die Frage erübrigt.
Schönes Wochenende wünscht
Bracew
Na ja, du könntest einiges dabei lernen...
Jedenfalls: "setExtensionsEvent" auf "1" zu setzen, ist nicht ganz so aufwändig, und sollte schon mal eine Basisinfo liefern ;) .
Ok, gerne, aber vielleicht ein anderes Mal. Nun muss ich mich um die Familie kümmern.
"setExtensionsEvent" auf "1" zu setzen --> Aber wie und wo?
Am jeweiligen MQTT2_DEVICE ;) .
Da ist kein Attribut setExtensionsEvent am MQTT2_DEVICE Poolpumpe?
FHEM ist aktuell?
Ok, jetzt ist FHEM aktuell und jetzt habe ich setExtensionsEvent gefunden ::)
Und wo finde ich jetzt "Basisinfo"?
"Basisinfo" zu?
Soweit ich das in Erinnerung habe, ist das nicht besonders kompliziert... Das Attribut setzen, dann sollten via SetExtensions gesetzten on/off-for/till-timer einfach eine andere/erweiterte Info in den STATE (oder vorgelagert state) schreiben. Kann sein, dass du dann ggf. noch devStateIcon anpassen mußt (ich habe grad nur ein paar Lampen am Start, da macht das {zigbee2mqtt_devStateIcon255($name,'hex',1)}. Das dürfte hier (ohne hex) auch gehen, also {zigbee2mqtt_devStateIcon255($name,'',1)}, wenn's nicht so schon paßt.
Grade beim Nachdenken in mysensors.template gefunden:
attr DEVICE devStateIcon .*on:on .*off:off on.(for.timer|till.*):on-for-timer:off off.(for.timer|till.*):off-for-timer:on blink.*:light_toggle:off
Müßte eigentlich hier auch passen...
Was ich jetzt sehe ist, dass im DeviceOverview von Poolpumpe steht: state set_on-for-timer 24768
Aus diesen 24768 Sekunden kann ich mir händische errechnen 6 Std.+52 Min.+blabla Sek.
im DeviceOverview steht: state on 2019-07-07 09:00:00
Ich kann mir somit zusammenreimen, dass die Pumpe von 9:00 Uhr bis 15:52 Uhr läuft.
Das hat allerdings einen schlechten WAF (Woman acceptance factor).
Für einen besseren WAF müsste ich es hinkriegen, dass auf der FHEM Weboberfläche im Raum Garten in der Gruppe Pool irgendwo sinngemäß steht:
"Poolpumpe läuft heute von 9:00 Uhr bis 15:52 Uhr" oder
"Poolpumpe An: 9:00 Uhr Aus: 15:52 Uhr" oder nur
"An: 9:00 Uhr Aus: 15:52 Uhr" in der Gruppe Pool wäre das noch selbsterklärend.
Nur wie?
Ich bin der Sache ein wenig näher gekommen. Mit:
define PoolpumpeAn weblink htmlCode { '<b>Poolpumpe an:</b> ' . ReadingsVal("PoolpumpeAuto", "nextUpdate", "") . '<br>'}
attr PoolpumpeAn group Pool
attr PoolpumpeAn room Garten
define PoolpumpeAus weblink htmlCode { '<b>Poolpumpe aus:</b> ' . secs2hms(ReadingsVal('SensorPool2','temperature',20)*12*MINUTESECONDS+HOURSECONDS*2+HOURSECONDS*9) . '<br>'}
attr PoolpumpeAus group Pool
attr PoolpumpeAus room Garten
zeigt FHEM in der Weboberfläche wie beigefügtes Bild an.
Hat aber das Problem, dass die Aus-Zeit bei jedem Refresh neu abhängig von der Temperatur berechnet wird. Ändert sich im Laufe des Tages die Temperatur (was normal ist), ändert sich auch die Ausschaltzeit. >:(
Eigentlich dürfte PoolpumpeAus nur einmal am Tag um 9:00 Uhr gefüllt werden. Aber wie?
Hmmm,
mit weblink kenne ich mich nicht aus, denke aber, das ist nicht der optimale Weg.
Wie bereits ausgeführt, gibt es ein paar Internals im Zieldevice, die ggf. auf einen laufenden Timer hinweisen. Das kannst du (an diesem Device jeweils) für ein Perl-devStateIcon oder (mehrzeiliges) Perl-stateFormat nutzen, um denselben Effekt zu erzielen.
Ganz egal, wie du es letztlich löst vielleicht noch ein Tipp: Nutze den WDT-Perl-Code, um die errechnete Einschaltdauer _auch_ in ein (zusätzliches) _Reading_ des Zieldevices zu schreiben ;) .
Hallo Beta-User,
danke für Deine Hinweise, jedoch bin ich leider nicht auf Deinem Level und habe nicht Deine Erfahrung. Ich habe lange gesucht aber letztendlich nicht verstanden, was Du mit
mit: "Das kannst du (an diesem Device jeweils) für ein Perl-devStateIcon oder (mehrzeiliges) Perl-stateFormat nutzen, um denselben Effekt zu erzielen."
bzw. "Einschaltdauer _auch_ in ein (zusätzliches) _Reading_ des Zieldevices zu schreiben "
sagen willst
Aber, ich habe es jetzt für mich halbwegs zufriedenstellend gelöst. FHEM schaltet über den WDT die Pumpe automatisch Ein- und Aus, wie in Antwort #39 am: 06 Juli 2019, 17:03:46 dargestellt.
Aus dem ReadingsVal("PoolpumpeAuto", "nextUpdate", "") lasse ich über den Weblink die nächste ANschaltzeit in der Weboberfläche ausgeben. Andere Wege wie dies funktionieren könnte (Dein Kommentar:"...das ist nicht der optimale Weg.") kenne ich bisher leider nicht.
Wenn um 9:00 Uhr die Pumpe vom WDT eingeschaltet wird lasse ich FHEM kurz danach die selbe Berechnung nochmals machen, addiere die Zeit von 0:00 Uhr bis 9:00 Uhr noch oben drauf (+HOURSECONDS*9) und lasse dies in einem Dummy (PoolpumpeAusDummy) speichern.
Danach wieder, wie bei AN: Aus dem ReadingsVal("PoolpumpeAusDummy", "state", "") lasse ich über den Weblink die AUSschaltzeit ausgeben.
Danke für die vielen Hilfen, einen schönen Sommer und
liebe Grüße von
Bracew
Es tut mir leid, wenn dir meine Hinweise nicht detailliert genug waren, und schön, dass es dir gelungen ist, das auf eine für dich zufriedenstellende Weise zu lösen.
Wie immer, führen viele Wege zum Ziel.
Kurz ein paar Anmerkungen, zu meinen "kryptischen" Anregungen:
Mit "Zieldevice" ist das Device gemeint, das du eigentlich schalten willst, also "Poolpumpe".
Ein zusätzliches Reading kann man dort z.B. mit "setreading Poolpumpe bla 12345" setzen. Das ginge auch direkt im WDT als weitere "Zeile" in dem vorhandenen Perl-Code. Also einfach hinten ein weiteres ";;", und dann die Anweisung, das ganze (da Perl direkt) wieder verpackt in "fhem (..." und unter Verwendung der bereits errechneten Variable für die Einschaltdauer ("$duration"). Du kannst da natürlich aber vorneweg auch die Ausschaltzeit errechnen, indem du die aktuelle Zeit addierst, das ganze schon formatierst...
(Für solche Aktionen muß ich auch nachsehen, wie das woanders gelöst ist.)
Du erreichst damit, dass erst mal alle relevanten Infos direkt bei dem Device stehen, um das es geht.
Dann kannst du dort das Attribut stateFormat nutzen, um die Dinge zu formatieren. Dort ist Perl-Code zulässig, so dass du da alles mögliche in diesem Code abfragen und verarbeiten kannst (ganz ähnlich wie in dem WDT, um den es ursprünglich ging); man kann auch eigene myUtils-Funktionen aufrufen.
Ist die Ausgabe mehrzeilig, kann man das nutzen, um z.B. auch mehrere Icons zum aufhübschen zu verwenden. Es gibt nicht soooo viele Beispiele dazu, aber zum einen muß das auch nicht "auf einen Rutsch" fertig sein, und zum anderen kann man dann ja wieder fragen, wenn man einen Schritt weiter ist.
Die Grundlagen zum "Aufhübschen" des DeviceOverview sind im Wiki zu finden: https://wiki.fhem.de/wiki/DeviceOverview_anpassen, da sind auch ein paar Links drin.
Hallo Beta-User,
so, nun habe ich alle Info's in die Readings des Zieldevice geschrieben (siehe Bild) und ohne Dummy die Auszeit angezeigt:
#
# Automatische Schaltung wenn Automatik an mit variabler Endzeit
#
define PoolpumpeAuto WeekdayTimer Poolpumpe 09:00:00|on { my $duration = HOURSECONDS*2+ReadingsVal('SensorPool2','temperature',20)*12*MINUTESECONDS;;;; fhem ("set $NAME on-for-timer $duration");;;; fhem ("setreading Poolpumpe PoolpumpeOnForTimer $duration");;;; fhem ("setreading Poolpumpe PoolpumpeLaufZeit " .secs2hms($duration));;;; fhem ("setreading Poolpumpe PoolpumpeAusZeit " .secs2ymdhms($duration+HOURSECONDS*9)) }
setuuid PoolpumpeAuto 5d20d493-****
attr PoolpumpeAuto commandTemplate set $NAME $EVENT
attr PoolpumpeAuto group Pool
attr PoolpumpeAuto icon scene_swimming
attr PoolpumpeAuto room hidden
#
# In Weboberflaeche ansehen wann Automatik AN schaltet
#
define PoolpumpeAn weblink htmlCode { '<b>Poolpumpe   an:</b> ' . ReadingsVal("PoolpumpeAuto", "nextUpdate", "") . '<br>'}
attr PoolpumpeAn group Pool
attr PoolpumpeAn room Garten
#
# In Weboberflaeche ansehen wann Automatik AUS schaltet
#
define PoolpumpeAus weblink htmlCode { '<b>Poolpumpe aus:</b> ' . ReadingsVal("Poolpumpe", "PoolpumpeAusZeit", "") . '<br>'}
attr PoolpumpeAus group Pool
attr PoolpumpeAus room Garten
#
Die Berechnung der PoolpumpeAusZeit habe ich in 99_myUtils ausgelagert.
Einen Nachteil des "On-for-Timer" im WDT habe ich nun rausgefunden. Wenn, während des (mehrstündigen) on-for-timer Laufes, FHEM aus welchen Gründen auch immer z.B. einen Restart hat, schaltet die Pumpe nicht mehr aus bzw. nicht mehr zur gewünschten Zeit aus. Irgendwie ist dann die AUSschaltzeit durcheinander.
In so fern wäre der "normale" WDT mit ANschaltzeit und berechneter AUSschaltzeit ohne on-for-timer, z.B. ähnlich
define PoolpumpeAuto WeekdayTimer Poolpumpe 09:00:00|on 17:00:00|off (isPoolpumpeAutomatik())
(nur statt 17:00:00 eine berechnete Zeit) besser vor Fehlern während der Laufzeit des on-for-timer gesichert.
:)
Wenn es jetzt drum geht, die weblinks noch durch ein stateFormat "wegzuformatieren", sollten wir einen Blick auf ein "list" der Poolpumpe werfen ;) .
"Extra für dich" habe ich im WDT die Option eingebaut, die Timer neu errechnen lassen zu können, nicht nur um Mitternacht. Das macht "set <wdt> enable" jetzt auch zur Laufzeit.
Das könntest du nutzen, um z.B. bei einem Einschaltbefehl die Timer nochmal neu zu berechnen (ungetesteter Pseudo-Code, bitte Zeilenumbrüche und ";" ggf. Checken, ebenso den Kommandotrenner in der ersten fhem-Anweisung; weiter gehe ich davon aus, dass secs2hms irgend ein Zeitformat zurückliefert; das hat aber uU. das Problem, dass es jeweils ausgehend von der aktuellen Uhrzeit ist):
define PoolpumpeAuto WeekdayTimer Poolpumpe 09:00:00|on {secs2hms(HOURSECONDS*2+ReadingsVal('SensorPool2','temperature',20)*12*MINUTESECONDS )}|off
{return unless isPoolpumpeAutomatik();;\
if($EVENT eq "on" ){\
fhem ("set $NAME on; set PoolpumpeAuto enable")};;\
} else {\
fhem ("set $NAME off");;\
}\
}
Bitte kein Switchinthepast, sonst kann das eine Endlosschleife geben...
Und eigentlich sollte ein on-for-timer ein InternalTimer sein, der mit (in fhem.save) abgespeichert wird (oder anders gesagt: wenn, dann ist das ein generelles on-for-timer-Problem mit allen per SetExtensions gesetzten on/off-for/till-Anweisungen).
Hallo,
die Lösung des Problems per WeekdayTimer mit on-for-timer war mir nicht stabil genug. Bei Handeingriffen während on-for-timer hat die Pumpe Nachmittags manchmal nicht mehr ausgeschaltet.
Ich habe umgestellt auf doif. Damit wird zuverlässig die Poolpumpe an- und abgeschaltet.
Danke für Eure Hilfen
Gruß Bracew