Poolsteuerung mit FHEM

Für unseren Pool setze ich meine low-budget Poolsteuerung mit FHEM ein.  Ein Nachbau auf eigenes Risiko ist selbstverständlich erlaubt. Die Beschreibungen sind noch mager, aber Anregungen für Verbesserungen sind immer willkommen.

Poolsteuerung mit FHEM
Aktuelle Daten aus der Poolsteuerung
Pool 3 Tage mit FHEM Steuerung
3 Tage: Ein Sonnen-, ein Regen- und ein Wolkentag

Features

  • Steuerung der täglichen Filterzeit (=Pumpenlaufzeit) abhängig von der Wassertemperatur in zwei täglichen Filterzeitfenstern  (dadurch auch bessere Dosierung der Chlortabletten)
  • Steuerung der Solarheizung abhängig von Wasser- und Solartemperatur inkl. Hysterese,  einstellbarer Solarzeitfenster, Wasserüberhitzungschutz, täglicher Absorbespülung
  • Abschaltung der Filterpumpe bei Trockenlauf mit E-Mail-Benachrichtigung
  • Pumpenmodi An, Aus und Auto mit Fernbedienung für die Umschaltung
  • NEU: Auslesen von Sensoren für ph, Redox, Druck, Durchfluss, Temperatur durch einen Mini-PC auf Arduino-Basis und Dosiersteuerung für Flüssig-Chlor und ph-Senker
  • Steuerung der LED-Poolbeleuchtung in Abhängigkeit von der Sonnenuntergangzeit und dem Wochentag
  • Alle Schaltaktionen werden protokolliert, tägliche Statistik per E-Mail, bunte Graphiken
  • Drahtlose Verbindung zu vielen Sensoren und Aktoren, dadurch minimaler Verkabelungsaufwand
  • FHEM als mächtige SmartHome-Zentrale für die Steuerung des ganzen Hauses einsetzbar
  • Sehr geringer Standby-Stromverbrauch
  • Übers Internet/VPN weltweit jederzeit steuerbar
  • 100% Open Source, flexibel und ausbaufähig

Hardware für Pumpen-/Solarsteuerung

  • Banana Pi Mini-PC mit Bananian Betriebssystem und FHEM als Steuerzentrale. Leider kann FHEM nicht zuverlässig und performant direkt auf der Fritzbox laufen. Die stark reduzierte Perl-Installation der Fritzbox lässt sich auch nicht mehr updaten. Daher muss ein kleiner Mini-PC die Funktion der Smart-Home-Zentrale übernehmen. Damit lässt sich dann im Haus ziemlich alles steuern, was man irgendwie erreichen kann. Nicht nur die Pooltechnik. Natürlich geht’s mit Raspberry Pi genauso gut wie mit Banana Pi. Kosten ca. 50 USD mit Gehäuse und Netzteil bei Bestellung auf Aliexpress.
    Banana Pi Mini-PC als SmartHome-Zentrale
    Banana Pi Mini-PC als SmartHome-Zentrale
  • RFXtrx433E USB Transceiver für die Kommunikation mit drahtlosen Sensoren und Fernbedienung auf 433 MHz. Kosten ca. 110 EUR.  Empfehlenswert für einen besseren Empfang ist eine stärkere Antenne mit SMA-Stecker, z.B. Delock ISM 3 dBi, ca. 8 EUR.
    RFXtrx-Transceiver für 433 MHz mit Delock-Antenne
    RFXtrx-Transceiver für 433 MHz mit Delock-Antenne
  • Mehrere AVM Fritz!Dect 200 schaltbare Steckdose für die Schaltung von Filterpumpe, Solarventil, LED und ggf. Dosierpumpen sowie Messung ihres Stromverbrauchs. Kosten ca. 45 EUR pro Stück. Vorteil: Verschlüsselte DECT-Kommunikation, Zuverlässigkeit durch Rückkanal und Strommessfunktion. Es geht sicherlich auch mit günstigeren Schaltsteckdosen, z.B. Intertechno ITR-1500, jedoch ohne Messfunktion und Rückkanal.
    Fritz!Dect 200 steuert das Solarventil
    Fritz!Dect 200 steuert das Solarventil
    So kann der Aktoren-Block gesamt aussehen
    So kann der Aktoren-Block gesamt aussehen
  • AVM Fritz!Box 7390 als Router und Schalter für die Fritz!Dect Steckdosen. Ein neueres Modell 7490 geht natürlich auch. Man braucht die Fritzbox nicht unbedingt, wenn man auf die Fritz!Dect-Steckdosen verzichtet.
  • 1 1/2″ Magnetventil mit 24V DC Spule (NC, stromlos geschlossen) im Beipaß für die Solarsteuerung. Es kostet nur ca. 65 EUR, z.B. im Magnetventile-Shop. Damit ist diese Lösung für die Solarsteuerung viel günstiger als die mit einem motorisierten Zwei-/Dreiwegeventil. Das Magnetventil verbraucht zwar im offenen Zustand etwas Strom (ca. 7 Watt), es lässt sich aber ganz einfach mit einer schaltbaren Steckdose ansteuern. 24 V DC Spule habe ich ausgewählt, da diese eine vergleichsweise niedrigen Stromverbrauch hat und ein passendes Netzteil einfach zu bekommen ist.
    Magentventil für Solarsteuerung im Beipass
    Magentventil für Solarsteuerung im Beipass
  • 24 V DC Netzteil min. 8 W mit einem SELV-Zeichen, z.B. Meanwell APV 12-24 oder PLN 20-24. Kosten ca. 10 bis 25 EUR.
  • Noname Poolsensor WT0122 (der Sender schwimmt bei mir bequem im Skimmer) oder Oregon Scientific THWR800 Pool Sensor. Dieser Punkt ist zur Zeit etwas problematisch: Beide Sensoren sind nicht zu bekommen. Die neueren „WT0122“ wollen nicht mit RFXtrx reden. Oregon hat seinen THWR800 anscheinend auch eingestellt. Hier brauche ich neue Ideen, wie man die Wassertemperatur in FHEM zuverlässig reinbekommt. Ich habe auch den TFA-Dostmann-Sendeschwimmer (Miami 30.3160 ) getestet. Er hat nach einem Monat jedoch den Geist aufgegeben, vermutlich wegen Undichtigkeit. Mittlerweile habe ich auf die Temperaturmessung im Skimmer ganz verzichtet. Ich messe mit einem Sensor in der Tauchhülse nur in der Hauptwasserleitung (siehe unten bei Weitere Sensoren). Natürlich darf man den Wert nur nehmen, wenn die Pumpe seit ein paar Minuten läuft.
    WT0122 Wasserthermometer schwimmt im Skimmer
    WT0122 Thermometer schwimmt im Skimmer
    TFA Miami Schwimmsensor im Skimmer
    TFA Miami Schwimmsensor im Skimmer
  • TFA Dostmann 30.3177 Thermo-/Hygro-Sensor mit Kabelsensor als Solarfühler (Kosten ca. 22 EUR). Den Fühler habe ich einfach auf das PE-Sammelrohr der Solarheizung mit schwarzem Klebeband draufgeklebt. Der Sensor ist nicht so besonders genau, nachts misst er bis zu 5 Grad weniger als die Lufttemperatur laut Wetterstation, was natürlich nicht sein darf. Das ist aber fast egal, denn die Temperaturdifferenzen (Solar minus Wasser) fürs Ein-/Ausschalten der Solarheizung sind konfigurierbar und wenn die Sonne scheint, gibt’s einen sehr deutlichen Temperatursprung.
    TFA-Temperatursensor für Solar
    TFA-Temperatursensor für Solar
    Der Fühler klebt am Solarrohr
    Der Fühler klebt am Solarrohr
  • Intertechno Funk-Handsender ITT-1500 als Fernbedienung (Kosten ca. 6 EUR)
    Fernbedienung für die Poolsteuerung
    Fernbedienung für die Poolsteuerung

Hardware für PH/Redox-Messung und Dosiersteuerung

Die Arduino-basierte Hardware für die Auslesung der ph/Redox-Werte ist in diesem Blog-Beitrag beschrieben und verlinkt.

Poolduino liest PH, Redox und andere Sensoren aus
Poolduino liest PH, Redox und andere Sensoren aus

Für die Messung der Wasserwerte werden außerdem benötigt:

  • Durchflussmesszelle von Swimtec (44 € bei Schwimmbadbau24)
  • PH-Elektrode mit Kalel und BNC-Stecker (122 € bei Pooldigital)
  • Redox-Elektrode mit Kalel und BNC-Stecker (125 € bei Pooldigital)
  • Zwei PG 13,5 Kabelverschraubungen, um die Elektroden einzuklemmen
  • PVC-Anschlussschlauch 6/8mm
  • Durchflussmesser analog 5-50 l/h (z.B. ca. 13 $ bei Aliexpress)
  • Zwei 20 mm Klebestutzen auf 1/4″ IG und zwei Schlauchtullen 1/4″ IG auf 6mm für den Anschluss des Durchflussmessers
  • Zwei Rohrklemmschellen 25mm für die Befestigung des Durchflussmessers
  • Vier Klemmfittinge 1/4″ AG auf 6/8-Schlauch
    Messzelle mit Elektroden und Durchflussmesser
    Messzelle mit Elektroden und Durchflussmesser
  • Aufklebeabzweig 1/4″ IG für die Wasserentnahme
  • Zwei Minikugelhahne mit 1/4″ IG auf AG
    Anschluss der Messwasserleitung
    Anschluss der Messwasserleitung
    Rücklauf der Messwasserleitung
    Rücklauf der Messwasserleitung
  • Kalibrielösung (Puffelösung) für PH (zwei Werte, z.B. PH 7.01 und PH 4.01) und Redox (ein Wert, z.B. 465 mV)
  • Reinigungs- und Aufbewahrungslösung für Elektroden

Für die Dosierung wird folgendes benötigt:

  • Zwei Dosierpumpen 1,5 l/h mit 3/8″ Impfventilen und Saugfuß (je 119 € bei Pooldigital)
  • PVC-Schlauch 4/6mm für die Chemie
  • Zwei Aufklebeabzweige mit 3/8″ IG für die Impfventile (suche nach „Klebesattel“)
  • Zwei schaltbare Steckdosen für die Dosierpumpen
  • Zwei Einschaltwischer-Relais für die Absicherung (Finder 80.21.0.240.0000)
  • Kleiner Schaltschrank mit Hutschiene für die Finder-Relais
  • Kanister mit Flüssigchlor (Natriumhypochlorit 12-13%, z.B. ca. 22 € für 25 kg bei Energieprofis)
  • Kanister mit ph-Senker (Schwefelsäure 50%, z.B. ca. 16 € für 14 kg bei Energieprofis)
  • Zwei Schutzwannen für die Kanister (ich habe zwei PP-Wannen von IKEA genommen, auch wenn PP nicht 100% chlorbeständig ist)
    Dosieranlage für Flüssigchlor und PH-Senker
    Dosieranlage für Flüssigchlor und PH-Senker

Weitere Sensoren (optional)

Optional kann man noch weitere digitale Sensoren anschließen:

  • Drucksensor für die Druckmessung im Filterkessel (z.B. 0-5 bar 1/4″AG Sensor ca. 14 USD bei Aliexpress) – dieser Sensor hat nach der Winterpause den Geist aufgegeben – verrostet, daher im Moment keine Druckmessung, suche nach vernünftigen und chlorresistenten Alternativen
  • Durchflussmesser im Hauptstrom  (z.B. 10-200 L/min 2″ Flow meter ca. 19 USD bei Aliexpress)
  • Durchflussmesser in der Messzelle (z.B. 0.3-6 L/min 6mm Flow sensor ca. 3 USD bei Aliexpress)
  • Temperatursensor im Hauptstrom (DS18B20-Chips ca. 3 USD für 5 Stück bei Aliexpress)
  • PVC-Aufklebeabzweig mit 1/2″ IG und Edelstahl-Tauchhülse 1/2″ AG für den Temperatursensor
  • Entsprechende Anzahl der Mini-XLR-Buchsen und -Stecker
  • M3 Senkkopfschrauben zur Befestigung der Buchsen
  • Sensorkabel, z.B. Lapp UNITRONIC LiYY 3×0,34
    Mini-XLR-Anschlüsse für diverse Sensoren
    Mini-XLR-Anschlüsse für diverse Sensoren

Poolsteuerung-Software in FHEM

Aufbau und Logik

Die Einrichtung des BananaPi (oder Raspi) mit FHEM erfordert mittelgroße Linux-Kenntnisse. Irgendwann hier mehr dazu.

Für die Einrichtung und Konfiguration von FHEM sind FHEM-Erfahrungen absolut erforderlich. Das System ist sehr mächtig, gewachsen und erklärt sich nicht von selbst.

Meine FHEM-Definitionen können mit Bedacht in fhem.cfg eingefügt werden. Bei Geräten müssen entsprechende IDs angepasst werden. Die Konfiguration der Scripte ist teilweise noch in ihren Codes verwustelt, meist gut sichtbar am Anfang der jeweiligen Funktion.

Meine FHEM-Scripte setzen voraus, dass der Wassersensor in FHEM unter dem Namen pool.water und der Solarsensor als pool.solar eingerichtet ist. Die schaltbaren Dect-Steckdosen heißen pool.pump, pool.valve, pool.led, pool.chlor und pool.acid. Der Mini-PC zum Auslesen von Sonden und anderen Sensoren heißt in FHEM poolduino. Die Lufttemperatur wird von der WH1080-Wetterstation abgelesen.

Hauptscript pool.steuerung

Das Hauptscript pool.steuerung enthält die komplette Schaltlogik für die Pumpe und für das Solarventil. Es kann auch ohne Dosiersteuerung eingesetzt werden. Es wird jede halbe Minute sowie bei Umschaltung der Modi aufgerufen und hier passiert die ganze Magie.

Die Mindestfilterzeit bestimmt sich als Faktor der Wassertemperatur. Ich habe gute Erfahrungen mit Faktor 1/3 gemacht, d.h. bei 24°C soll die Pumpe mind. 8 Stunden am Tag laufen. Die Filterzeit lässt sich in zwei Zeitfenster pro Tag einteilen, damit kein längerer Stillstand entsteht bzw. damit die Pumpe zu typischen Badezeiten läuft. Ich nutze 6.30 bis 7.00 Uhr (fürs morgendliche Baden) und 10 bis 21 Uhr. Zusätzlich gibt’s ein Zeitfenster von 30 Minuten für den Abendlauf, bevor die LED-Lichter angehen, damit das Wasser vor der Nacht mit Chlor aufdosiert werden kann.

Wenn die Temperaturdifferenz zwischen Solar und Wasser im definierbaren Solarzeitfenster (meine Einstellung: 9 bis 20 Uhr) den Schwellenwert übersteigt, entsteht eine Solaranforderung. Ggf. schließt das Ventil und startet die Pumpe. Die Pumpe wird nicht eingeschaltet, wenn sie dann nur noch weniger als 5 Minuten zu laufen hätte. Bei Unterschreitung der kritischen Temperaturdifferenz schaltet Solar ab, Ventil öffnet und die Pumpe schaltet ggf. ab. Die Hysterese ist einstellbar. Meine Erfahrung: Einschalten bei über 7 Grad und Ausschalten unter 4 Grad Differenz. Die Solarzeit zählt auch als Filterzeit. Wenn die Solaranforderung besteht, startet die Pumpe auch außerhalb der eingestellten Filterzeiten. Beim Wegfall der Solaranforderung prüft die Logik, ob die tägliche Mindestfilterzeit bereits erreicht ist und lässt die Pumpe ggf. weiterlaufen. Beim Überschreiten von 30°C Wassertemperatur schaltet Solar immer ab.

Auch bei einem geöffnetem Ventil fließt eine kleine Wassermenge durch den Solarabsorber. Daher ist eine Mindestspülung fast immer gewährleistet. Man kann in der Steuerung zusätzlich noch ein tägliches Zeitfenster für die Solarspülung angeben (bei mir 12.00 bis 12.05 Uhr), wenn das Ventil immer schließt. So kann dort die Keimbildung vermieden werden.

Die Erkennung des Wasserverlustes erfolgt über die Messung des Stromverbrauchs. Meine Pumpe läuft ohne Wasser im untypischen Bereich von 300 bis 500 Watt (einstellbar). Läuft sie länger als 1 eine Minute in diesem Bereich, wird sie abgeschaltet, egal ob im automatischen Modus oder auf „on“. Man bekommt einen Alert per E-Mail und man muss nach Beseitigung der Ursache das waterless-Reading in pool.steuerung auf 0 zurücksetzen, damit sie wieder anläuft.

Alle Schaltaktionen durch pool.steuerung werden im Device pool.logger mit Angabe der relevaten Temperaturen protokolliert.

Hauptscript pool.dosierung

Das Hauptscript pool.dosierung enthält die komplette Dosierlogik. Es läuft alle 2,5 Minuten, abwechselnd für Chlor und PH-Senker. Bei jeden Lauf macht das Script folgende Checks, um sicherzugehen, dass die Dosierung überhaupt erfolgen darf:

  • Keine der Dosierpumpen läuft noch. Wenn doch, beide werden abgeschaltet und eine Alarm-Mail ausgelöst. Irgendwas ist falsch.
  • Die Uhrzeit liegt im eingestellten Dosierzeitraum 6 bis 23 Uhr (Attribute dosing_start_time und dosing_end_time)
  • Die Pumpe ist eingeschaltet  und läuft im Auto-Modus (keine Dosierung beim Saubermachen oder beim Rückspülen!)
  • Die Pumpe läuft im eingestellten Verbrauchsintervall 665 bis 710 Watt (Attribute pump_min_power und pump_max_power)
  • Wenn Drucksensor vorhanden, soll der Druck mins. 650 mBar erreichen (Attribut water_min_pressure)
  • Wenn Durchflusssensor vorhanden, soll der Durchfluss mind. 50% erreichen (Attribut water_min_flow)
  • Die Pumpe läuft seit mind. 5 Minuten (Attribut pump_min_prerun), damit sich die ph/Redox-Sensorenwerte stabilisiert haben.

Wenn jetzt die Chlor-Dosierung dran ist, geht die Logik wie folgt weiter:

  • Wenn die maximale Tagesmenge 3200 sek (Attribut chlor_max_time) erreicht ist, wird nicht dosiert.
  • Wenn aktulle Redox-Wert zu alt (>2 min.) oder nicht plausibel (unter 100 oder über 1000), schaltet der Fallback-Modus ein. Es wird 20 Sekunden dosiert (Attribut chlor_fallback_dosing). Fallback-Modus kann auch manuell eingeschaltet werden (Attribut chlor_fallback_mode).
  • Ansonsten vergleicht die Logik den aktuellen Redox-Wert mit dem eingestellten Redox-Ziel 760 mV (water_orp_target). Bei Sonneneinstrahlung kann ein leicht abgesenkter Zielwert 755 mV (Attribut water_orp_target_sun) genutzt werden. Wenn Redox-Ziel erreicht, wird nicht dosiert.
  • Wenn Redox-Ziel nicht erreicht, wird je nach Differenz, die Dosiermenge ermittelt. Die „Dosierkurve“ ist im Code verwurstelt. Maximal darf 2 Minuten am Stück dosiert werden, darauf sind auch die Finder-Relais eingestellt. Sonst besteht die Gefahr, dass sich die Chlor- und PH-Senker-Dosierung überschneiden, was zu gefährlichen Konsequenzen führen kann.
  • Bei Sonne wird die Dosiermenge um 5 oder 10 Sekunden leicht angehoben (Attribute chlor_sun_low_add und chlor_sun_high_add), um der stärkeren Chlorzehrung Rechnung zu tragen. Die Sonneneinstrahlung wird nach dem Zustand der Solaranlage ermittelt.
  • Für die Chlor-Dosierzeit plus 31 Sekunden wird der Solarkollektor abgestellt, damit das aufgechlorte Wasser direkt im Pool landet.
  • Chlor-Verbrauch wird im Kanister-Device pool.canister.chlor aufgezeichnet, wo man dann sehen kann, wie viel Prozent im Kanister noch etwa übrig ist.

Wenn die PH-Dosierung dran ist, geht die Logik wie folgt weiter:

  • Wenn die maximale Tagesmenge 300 sek (Attribut acid_max_time) erreicht ist, wird nicht dosiert.
  • Wenn aktulle PH-Wert zu alt (>2 min.) oder nicht plausibel (unter 6.5 oder über 8.0), schaltet der Fallback-Modus ein. Es wird 0 Sekunden dosiert (Attribut acid_fallback_dosing). Fallback-Modus kann auch manuell eingeschaltet werden (Attribut acid_fallback_mode).
  • Ansonsten vergleicht die Logik den aktuellen PH-Wert mit dem eingestellten PH-Ziel 7.1 (water_ph_target). Wenn PH-Ziel erreicht, wird nicht dosiert.
  • Wenn PH-Ziel nicht erreicht, wird je nach Differenz, die Dosiermenge ermittelt. Die „Dosierkurve“ ist im Code verwurstelt. Maximal darf 2 Minuten am Stück dosiert werden, darauf sind auch die Finder-Relais eingestellt. Sonst besteht die Gefahr, dass sich die Chlor- und PH-Senker-Dosierung überschneiden, was wie gesagt unschön ist.
  • PH-Senker-Verbrauch wird im Kanister-Device pool.canister.acid aufgezeichnet, wo man dann sehen kann, wie viel Prozent im Kanister noch etwa übrig ist.

Alle Dosieraktionen werden im Device pool.logger mit Angabe der relevanten Werte protokolliert.

Sonstige Scripte

Ein weiteres Script pool.stats wird immer jede Minute aufgerufen, es rechnet die täglichen Statistiken aus und schickt sie um 0 Uhr per E-Mail zu. Die Schaltung der LEDs erledigt pool.led.timer. Die Watchdog-Scripte schauen, dass die Sensoren noch Daten senden, die Aktoren noch verfügbar sind und alarmieren ggf. per E-Mail.

Die Intertechno-Fernbedienungen haben drei paar On/Off-Buttons und einen „All off“ Button. Die On/Off-Buttons werden jeweils als pool.remoteX.pump, pool.remoteX.solar und pool.remoteX.led in FHEM eingebunden. Sie schalten entsprechende Geräte ein und aus. Dabei setzten die Pumpe-Buttons den Modus für die pool.steuerung auf on bzw. off und hebeln damit die Automatik aus. Der „All off“ Button ist so programmiert, dass er die Steuerung wieder auf „Auto“ schaltet. Somit kann man mit der Fernbedienung die Pumpe einschalten (Pumpe auf „On“), wenn man außerhalb der Pumpzeit z.B. den Pool reinigen oder rückspülen will. Wenn man das 6-Wege-Ventil umschalten oder die Pumpe reinigen will, kann man die Pumpe auf „Off“ setzen. Anschließend darf man nicht vergessen wieder mit der „All off“ Taste auf den Auto-Modus zu gehen.

Download FHEM-Scripte, gplot-Dateien etc.

poolsteuerung-fhem-2.0 [ZIP-Archive]

Download Arduino-Sketch für Sensor-Poolduino

poolduino [ZIP-Archive]

 

Zum Traumhaus und -garten mit Plan, Durchblick und diesem Baublog

QR Code Business Card