Steuerung der Filteranlage eines Schwimminpools

mit Solarheizung und Sonderfunktionen

Die Idee

Nachdem eines Tages die Dichtung unseres Pool Filters etwas überlastet war, hatten wir ca. 200l Wasser im Keller. Da auch dabei die Schaltuhr der Pumpe unter Wasser gesetzt wurde, flog auch die Sicherung und die Pumpe stand, der Druck war weg und somit auch kein weiteres Wasser.

Idee 1, wir brauchen einen Wassersensor um Wassereinbruch schneller festzustellen, aber wie warnen

Idee 2, per E-Mail, besser noch auch per SMS, womit

Idee 3, das sollte doch mit einem Raspberry PI möglich sein.

Kurze Internetrecherche und schon waren Beispielscripte, für Wassersensor, E-Mail Versand und SMS Versand gefunden.

Idee 4, allein dafür ist der Pi zu schade, wenn schon denn schon, dann bitte auch die Pumpe zeitgesteuert mit schalten, das Ventil für die Solarheizung gleich mit. Dazu muss die Wassertemperatur und die Wassertemperatur welche aus der Solarheizung kommt gemessen werden, bietet sich an via DS1820, welche per 1Wire Interface des Pi direkt angeschlossen werden können. Ein kleines 16x2 LCD Display für die Anzeige von Status und Temperaturen muss dazu, sowie die Möglichkeit zu Wartungsarbeiten (Grobfilter säubern, Rückspülen) die Pumpe manuell schalten zu können.

Schön wäre dann natürlich noch ein Webinterface mit dem man den Status (Pumpe ein/aus, Heizung ein/aus, Temperaturen etc.) abfragen aber auch z.B. Start und Stoppzeiten der Pumpe bzw. Solltemperatur des Wassers einstellen kann.

Durch das Webinterface bietet sich PHP als Programmiersprache an.

Also weitere Internetrecherche und auch ausreichend Beispiele gefunden.

Besonderen Dank an dieser Stelle Herrn Prof. Jürgen Plate für seine Artikel zum Pi unter www.netzmafia.de sowie seine weitere Hilfe.

Installation Raspberry Pi

Ich möchte an dieser Stelle nur stichpunktartig auf die einzelnen Schritte eingehen. Details sind jederzeit im Internet zu finden

  • Image für den Pi holen und auf SD karte kopieren. (ich verwende aktuell Rasbian, also Debian jessie in der lite Version, da keine GUI benötigt wird)
  • mit "rasbi-config"

    • 1 Expand Filesystem
    • 2 neues Passwort für User PI setzen
    • 3 boot to Textconsole mit Passwort
    • 5 Locale setzen

      • I1 locale de_DE.UTF-8 default de_DE.UTF-8
      • I2 Timezone Europe Berlin oder wo ihr auch seid
      • I3 keyboard Layout, default 105 PC int ist ok

    • 9 Advanced options

      • A2 neuer Hostname optional, gibt aber Sinn vor allem wenn mehrere Pi im Einsatz
      • A3 Memory split, 16k for GPU ist OK im Textmode
      • A4 enable SSH
      • A9 enable 1Wire (für DS1820 temperatur Sensoren)

  • in /etc/network/interfaces eine feste IP vergeben 

    • auto eth0
    • iface eth0 inet static
    • address <your IP address i.e. 192.168.1.23>
    • netmask <your netmask i.e. 255.255.255.0>
    • gateway <your gateway i.e. 192.168.1.1>
    • optional network <your network i.e. 192.168.1.0>
    • optional broadcast <your broadcast i.e. 192.168.1.255>
    • optional dns-nameservers <your nameserver(s) i.e. 192.168.1.1>
    • edit /etc/hosts correct 127.0.0.1 <your_server_name> to <your_ip_address i.e 192.168.1.23> <your_server_name.your_domain.your_tld i.e. bad.hugo.de> <your_server_name i.e bad>

  • mit dpkg-reconfigure dash die bash Shell einstellen
  • für den DS1820 noch Einträge in die  /boot/config.txt und zwar den von raspi-config angelegten Eintrag ergänzen zu "dtoverlay=w1-gpio-pullup,gpiopin=4,extpullup=on"
  • mit "apt-get update && apt-get upgrade" alles aktualisieren
  • folgende Pakte mit apt-get install installieren

    • vim-nox - verbesserter vi, der normale macht unter Debian Probleme, ihr könnt natürlich auch jeden anderen Texteditor nehmen, z.B. nano
    • ntp und ntpdate
    • apache2
    • php5
    • php5-xcache (optional)
    • mariadb-server und mariadb-client
    • phpmyadmin (optioal)

Kopiere (mv) /var/www/html/index.html -> index.html.org

Download der Programme für die Steuerung von ...

Entpacke alles nach /var/www/html/

Erstelle Datenbank mit create_db.sql

Schließe die restlich Hardware an, wie Temperatursensoren, LCD Display, Relais, Wassersensor, Wartungsschalter an, siehe ... 

Passe Cron mit crontab -e nach Vorlage crontab.txt

Nach einem Neustart sollte alles funktionieren.

 

 

 

Programmbeschreibung

Aufgrund des Webinterfaces bietet sich PHP als Scriptsprache an. Da die laufende Überwachung als Cron (1 x pro Minute läuft, Anzeige und Vorgaben aber asynchron über das Webinterface muss zwischen dem Cron Job und dem Webinterface eine Kommunikation stattfinden. Ursprünglich war dafür eine Dateischnittstelle geplant, welche aber recht langsam war, daher bin ich auf die Idee gekommen dies über eine SQL Datenbank zu lösen. In die Status Tabelle schreibt einerseits der Cron Job (aktuelle Temperaturen, Pumpe ein/aus, Heizung ein/aus etc.) welche vom Webinterface ausgelesen und angezeigt werden. Zum anderen schreibt das Webinterface in die Status Tabelle neue Vorgaben (Pumpe ein von/bis, Solltemperatur Wasser etc.) welche wiederum vom Cron Job ausgelesen werden.

Zusätzlich gibt es eine zweite Tabelle Temperatur in die der Cron Job bei jedem Durchgang aktuelle Temperaturen und Status mit Timestamp wegschreibt. Das Webinterface liest jeweils den letzten Eintrag für die Anzeige aus. Geplant Verdichtung und graphische Auswertung

Ich habe versucht den Code gutmöglichst ausführlich zu dokumentieren, sodass es keine großen Probleme geben sollte alles nachzuvollziehen.

Die einzelnen Module:

  •  ALL_constats.php - Hier sind alle verwendete Konstanten für GPIOs, Tabellenfelder etc. zusammengefasst
  • init.php - initialisiert die Schnittstellen etc. Aufruf via Cron @reboot
  • index.php - Anzeige von Status im Webinterface
  • setup.php - Eingabe der Vorgaben über das Webinterface, Aufruf aus index.php
  • vorgaben.php - ausgelagerte Teile von setup.php
  • DS1820_Temp_in.php - übernimmt die komplette Steuerung, Aufruf via Cron jede Minute
  • PI_Library.php - Funktionen zur Steuerung der GPIOs, Teile von Prof. Jürgen Plate Netzmafia
  • PI_LCD_Library.php - Funktionen zur Ansteuerung des 2 x 16 LCD Display mit Anregungen aus verschiedenen Artikeln von mikrokontroller.net und hd44780_test.py von tutorials-raspberrypi.de
  • PI_DS1820_Library.php - Funktion für den DS1820 Temperatursensor mit Anregungen von http://www.netzmafia.de/skripten/hardware/RasPi/Projekt-Onewire/
  • MYSQL_Library.php - Funktionen zum Zugriff auf die MariaDB
  • crontab.txt Beispiel für Einträge in der Crontab
  • create_db.sql zur Anlage der Datenbank
  • test.php zeigt den Zustand der GPIOs ähnlich "gpio readall" des wireinPi Paktes an

Anmerkung, das das Programm in einem internen abgeschotteten Netz ohne WLAN läuft, wurde auf Sicherheit kein Wert gelegt. In anderen Bereichen wäre z.B. ein Login für das Webinterface sinnvoll. Auch ist das Webinterface aktuell relativ primitiv aber funktionell aufgebaut, schöner machen ist Fleissarbeit.

 

 

Die Hardware

Zur Steuerung habe ich einen vorhandenen Raspberry Pi B+ Rev. 2 genommen, mit einer 8GB SD Karte.

Für die Anzeige an der Steuerung ein handelsübliches, vorhandenes 2 x 16 Zeichen LCD Display.

Zur Ansteuerung des Kugelventils und der Pumpe einen 4-fach Relaiskarte aus dem Raspi Zubehör.

Die Steuerung für den Solarbetrieb übernimmt ein vorhandener  Zweiwege-Motor Kugehahn aus der alten, defekten Solarsteuerung.

Für die Warn SMS eine Huwai Surfstick mit einer Prepaid Karte.

Stromversorgung Pi über eine 5V Hutschienennetzteil.

Stromversorgung Kugelhahn ein 24V Hutschienenklingeltrafo.

Zur Sicherheit kommt noch ein FI Schalter dazu

Aufbau: Der Raspi und die Relaiskarte, sowie das Display und der Schalter für die manuelle Abschaltung kommen in ein ausreichend großes Hutschienengehäuse für den PI.

All das wird ein einen einzeiligen Feuchtraumverteiler untergebracht.

ACHTUNG ihr arbeitet hier mit zum Teil mit lebensgefährlicher 240V Netzspannung, dabei sind u.A. VDE Vorschriften zu beachten. Bei falschen Anschluss seid nicht nur ihr, sondern auch euere Badegäste gefährtet. Solltet ihr nur im geringsten unsicher sein, zieht einen Elektrofachmann hinzu.