Hallo Liebe FHEM KollegInnen,
ich steuere unter anderem meine Poolpumpe über FHEM. Das funktioniert eigentlich ganz gut.
Derzeit verwende ich einen DOIF Befehl der wie folgt aussieht:
(([08:30-10:30] or [13:00-15:30] or [19:00-20:00]) or ([11:00-12:00] or [16:00-17:00]) and ([Temperaturen:Pooltemperatur]>=25) or ([05:00-06:30] or [20:30-21:30]) and ([Temperaturen:Pooltemperatur]>=28) or ([22:00-23:00]) and ([Temperaturen:Pooltemperatur]>=30)) (set EDI_Poolpumpe on) DOELSE (set EDI_Poolpumpe off)
Die Logik hinter dem Befehl ist, dass die Pumpe zum einem zu bestimmten Zeiträumen laufen soll, zum anderem zusätzlich wenn die Pooltemperatur bestimmte Werte erreicht bzw. überschreitet.
FEHM schaltet so wie ich das möchte.
Warum nun dieser Beitrag?
Ein kleines Problem gibt es. Die Pooltemperaturmessung befindet sich nicht im Pool sondern direkt nach der Pumpe in der Leitung. Wenn die Pumpe nun einige Stunden steht, entspricht das Messergebnis nicht der Pooltemperatur sonder annähernd der Temperatur im Technikraum (hier befindet sich die Pumpe und die Temeraturmessung).
Ich möchte daher neben den fixen, Temperaturunabhängigen Schaltungen zu den anderen Schalten die Pumpe einschalten und nach 3 min die Temperatur auswerten und entscheiden ob die Pumpe laufen soll oder nicht.
Es ist hoffe ich so erklärt, dass man sich auskennt.
Evtl. ist einen Variante mit einer Durchschnittstemperatur möglich - hier sollten jedoch auch nur die Werte verwendet werden wenn die Pumpe läuft. Das hätte einen Charme - leider habe ich keine Ahnung wie sowas umzusetzen ist.
Bitte um Rückmeldung!
Schöne Grüße aus Österreich
Markus
Das könntest Du mit einer verzögerten Abfrage der Temperatur im Befehlszweig zur Entscheidung, ob die Pumpe laufen soll.
Prinzipiell etwa so:
(Deine Bedingungen) (set Pumpe on) (IF (<Temperaturbedingung>) (set Pumpe off)) (set Pumpe off)
und die Attribute
wait 0, 180, 3600
timerWithWait 1
Dein DOIF wird lesbarer, wenn Du Code-Tags verwendest.
Hallo Ellert,
danke für die schnelle Antwort. Vom Prinzip her kann ich dir absolut folgen.
Aber wie genau müsste ich das umsetzen
Bin noch nicht der große FHEM Experte!
mfg
Markus
Ich habe folgendes versucht:
([08:30-10:30] or [13:00-15:30] or [19:00-20:00]) (set EDI_Poolpumpe on)
DOELSEIF ([11:00-12:00] or [16:00-17:00]) (set EDI_Poolpumpe on) (if ([Temperaturen:Pooltemperatur]>=25) (set EDI_Poolpumpe off)) DOELSEIF ([05:00-06:30] or [20:00-21:30]) (set EDI_Poolpumpe on) (if ([Temperaturen:Pooltemperatur]>=28) (set EDI_Poolpumpe off)) DOELSEIF ([22:00-23:00]) (set EDI_Poolpumpe on) (if ([Temperaturen:Pooltemperatur]>=30) (set EDI_Poolpumpe off)) DOELSE (set EDI_Poolpumpe off)
Atrribute wait und timerWithWait habe ich auch gesetzt.
Leider funktioniert das nicht - es kommt keine Fehlermeldung, aber der Status bleibt auf "initialized".
Bin für alle Hinweise dankbar.
@ MadMax75: Bitte lies Dir die Hinweise von Ellert
genau durch und beachte sie:
Zitat von: Ellert am 28 Mai 2016, 18:00:15
Prinzipiell etwa so:
(Deine Bedingungen) (set Pumpe on) ([b]IF[/b] (<Temperaturbedingung>) (set Pumpe off)) (set Pumpe off)
Dein DOIF wird lesbarer, wenn Du Code-Tags verwendest. -> Route (Hashtag #) aus der Symbolleiste verwenden!
@FranzB94:
Sorry, evtl. stehe ich auf der Leitung. Aber was ist hier mit "(IF (<Temperaturbedingung>)" gemeint?
Ich habe meine Bedingungen und die Temperaturbedingungen inkludiert. Das b vor und nach dem IF ist mir etwas rätaselhaft.
([08:30-10:30] or [13:00-15:30] or [19:00-20:00]) (set EDI_Poolpumpe on)
DOELSEIF ([11:00-12:00] or [16:00-17:00]) (set EDI_Poolpumpe on) (if ([Temperaturen:Pooltemperatur]>=25) (set EDI_Poolpumpe off)) (set EDI_Poolpumpe off) DOELSEIF ([05:00-06:30] or [20:00-21:30]) (set EDI_Poolpumpe on) (if ([Temperaturen:Pooltemperatur]>=28) (set EDI_Poolpumpe off)) (set EDI_Poolpumpe off) DOELSEIF ([22:00-23:00]) (set EDI_Poolpumpe on) (if ([Temperaturen:Pooltemperatur]>=30) (set EDI_Poolpumpe off)) (set EDI_Poolpumpe off) DOELSE (set EDI_Poolpumpe off)
Ich habe mein Problem wie folgt gelöst:
Ein DOIF für Schaltzeiten ohne Temperatureinfluss
define Schaltplan_Poolpumpe DOIF ([08:30] or [13:00]) (set EDI_Poolpumpe on) DOELSEIF ([10:45] or [15:15]) (set EDI_Poolpumpe off)
Ein DOIF mit Temperaturen größer 23°C (nur dann soll gem. diesen Zeiten die Pumpe laufen)
define Schaltplan_Poolpumpe_23 DOIF ([11:00] or [16:00]) (set EDI_Poolpumpe on) DOELSEIF (([11:00-11:45] or [16:00-16:45]) and ([Temperaturen:Pooltemperatur]<23)) (set EDI_Poolpumpe off) DOELSEIF ([11:45] or [16:45]) (set EDI_Poolpumpe off)
Ein DOIF mit Temperaturen größer 25°C (nur dann soll gem. diesen Zeiten die Pumpe laufen)
define Schaltplan_Poolpumpe_25 DOIF ([12:00] or [18:30] or [21:00]) (set EDI_Poolpumpe on) DOELSEIF (([12:00-12:45] or [18:30-19:15] or [21:00-21:45]) and ([Temperaturen:Pooltemperatur]<25)) (set EDI_Poolpumpe off) DOELSEIF ([12:45] or [19:15] or [21:45]) (set EDI_Poolpumpe off)
Für die Temperatur DOIFs habe ich ein wait definiert.
wait 0:180
Leider funktioniert das mit den Temperaturen nicht immer zuverlässig. Der Plan die Pumpe wird zu einem Schaltzeitpunkt eingeschaltet, nach 180 Sekunden wird die Temperatur ermittelt. Wenn die Pooltemperatur kleiner X°C liegt, dann Pumpe wieder ausschalten. X mal beobachtet - in 80% der Fälle läuft es richtig. Warum bei ca. 20% der Fälle nicht?
Hat jemand eine Idee?