Bewässerungsanlage - Steuerungslogik

Sie befinden sich hier:
» 
» 
» 

Die Steuerungslogik macht den Unterschied

Die besten Bewässerungssysteme machen nicht glücklich, wenn die implementierte Steuerungslogik nichts taugt. Insofern war es mein Ziel, soviel Hirn wie möglich in die Logik hinein zu investieren, um eine Lösung zu erhalten, die vollautomatisch und ohne ständige manuelle Korrektureingriffe funktioniert. Ich behaupte einfach, dass mir dies auch gelungen ist.

Die wesentlichen Überlegungen, die in meine Schaltungslogik eingeflossen sind, möchte ich hier kurz darstellen.

Die Steuerungslogik als Hirn der Bewässerungsanlage

Die individuelle Steuerungslogik für eine Bewässerungsanlage kann in zwei Bereiche aufgeteilt werden. Der erste Bereich umfasst die Schaltung der Pumpe und der Ventile (Schaltungslogik) und der zweite Bereich die Ermittlung des Gießprogramms (Gießindex) - in meinem Fall ohne Feuchtesensor.

Schaltungslogik für Pumpe und Ventile

In die Schaltungslogik flossen Überlegungen ein, um einerseits die technischen Grenzen der Komponenten nicht zu überschreiten und andererseits die Schaltung so zu ertüchtigen, dass sie normalerweise vollautomatisch über FHEM gesteuert wird, aber parallel dazu auch eine manueller Betätigung über Schalter möglich ist.

Somit mussten folgende Punkte in die Schaltungslogik einfließen:

  • Die Ausgangsleistung des Trafos hat Grenzen, so dass nicht alle vier 24V Ventile zugleich eingeschaltet sein können. Dies war auch nie mein Ziel, da die Fördermenge der Pumpe und die Durchflussmenge der Verrohrung sowieso begrenzt ist. Ich denke, die Ventile (Gießkreise) sollen generell nacheinander geschaltet werden, d.h. es ist nie mehr als ein Ventil gleichzeitig eingeschaltet.
  • Die Relais der Relaisplatine können ebenfalls nur begrenzte Leistungen schalten. Ein direktes Schalten der 230V Pumpe über die Relais ist nicht möglich, sondern es wird nur die Spule des Hauptrelais geschaltet, welches dann in der Lage ist, die Pumpenleistung zu schalten. Das Hauptrelais benötigt wiederum ein RC-Glied zur Schutzbeschaltung.
  • Der Microcontroller (Pretzelboard), als Verbindungsglied zwischen FHEM und der Steuerung kann ebenfalls nicht unbegrenzt Relais der Relaisplatine schalten. Die allgemeine Empfehlung im Netz lautet, dass sich max. 3 Relais zugleich im eingeschalteten Zustand befinden sollten.
  • Eine Notfunktion ist sicherlich sinnvoll. Was passiert z.B. wenn die WLAN-Verbindung zwischen FHEM und der Gießsteuerung abbricht? Schlimmstenfalls kam das „Ein“-Signal an, aber die Anlage wartet vergeblich auf das „Aus“-Signal. Ist dann Schluss, wenn die Zisterne leer ist? Ich denke, hier müssen auch Vorkehrungen getroffen werden, damit dieser Fall nicht eintreten kann.

Diese Restriktionen können bei der manuellen Bedienung über die Wipp-Schalter sicherlich dem Schaltenden vermittelt werden. Wenn die Schaltung über die Elektronik erfolgt, muss dies natürlich im Schaltungsaufbau und in der Software hinterlegt werden.

Aus der Summe der Überlegungen ist letztendlich folgender Schaltplan entstanden. Das Relais R1 dient zum Schalten der Spule des Hauptrelais für die Pumpe. Die Relais R2-R5 schalten die vier Ventile. Die nicht verwendeten Relais (R6 – R8) wurden trotzdem verdrahtet und auf die Klemmleiste geführt. So muss bei Ausfall eines Relais nur ein Draht umgehangen werden und der Betrieb geht weiter. Für den 24V und 5V-Bereich wurden keine separaten Klemmleisten verwendet. Der 230V-Bereich wurde allerdings separiert. Die manuellen Wipp-Schalter sind zur Ansteuerung der Relais parallel geschaltet.

Funktionale Anforderungen an das Pretzelboard

Die Programmierung des Pretzelboards erfolgte mit der Arduino-IDE unter Windows. Das Board selbst wird hierzu an einen USB-Port angeschlossen. Der programmierte, sogenannte Sketch, kann direkt aus der Arduino-IDE auf das Pretzelboard geladen werden.

Folgende Funktionen wurden implementiert:

  • WLAN verschlüsselt über WPA/WSK
  • Zuweisung einer festen IP-Adresse
  • Start des vorhandenen Webservers, um über GET-Parameter die einzelnen Ventile steuern und abfragen zu können.
  • An- und ausschalten eines Ventils, d.h. vor dem Einschalten wird zuerst, falls noch nicht erfolgt, die Pumpe eingeschaltet, um Leitungsdruck aufzubauen. Evtl. schon eingeschaltete (andere) Ventile werden ausgeschaltet. So wird sichergestellt, dass max. zwei Relais der Platine gleichzeitig eingeschaltet sind (ein Relais für die Pumpe und ein Relais für ein Ventil), damit keine Überlastung der Relaisplatine auftreten kann.
  • Statusabfrage eines Relais über GET-Parameter
  • Statusabfrage aller Relais über GET-Parameter
  • automatische Abschaltung nach 20 Minuten, um eine vollständige Entleerung der Zisterne bei Verbindungsproblemen zu verhindern.
  • Auslösung einer Ultraschallmessung in der Zisterne

Diese aufgelisteten Funktionen wurden im folgenden Sketch implementiert. Auf das Thema serieller vs. digitaler Ultraschallsensor gehe ich im Abschnitt Füllstandsmessung mit Ultraschallsensor ein.


Ermittlung Gießindex

Da ich keinen Feuchtesensor im Einsatz habe, musste für die Ermittlung des Gießprogrammes auf andere Parameter zurückgegriffen werden. Hier griff ich in erster Linie auf die Temperatur und den Ertrag unserer Photovoltaik-Anlage zurück. Tagsüber (zwischen 9 und 18Uhr) erfolgen stündliche Messungen und die Speicherung der Daten. Die gemessene Außentemperatur und der tägliche PV-Ertrag über einem Schwellwert werden kumuliert. Daraus werden die Gießprogramme (Viel, Wenig, Töpfe, Pause) abgeleitet.

Die Schwellwerte der Gießprogramme, für die zu berücksichtigende Temperatur und den PV-Ertrag werden in Dummy-Variablen in FHEM hinterlegt, damit ggf. nachgeregelt werden kann, ohne in den Sourcecode eingreifen zu müssen.

Der Schwellwert für den PV-Ertrag wird monatlich aus den Durchschnittserträgen der letzten Jahre x 0,75 / 30 Tage neu berechnet. So passt sich der Schwellwert den monatlichen Ertragsunterschieden an und bietet ein Höchstmaß an Dynamik. Die Vorteile dieser Methodik kommen besonders in der Übergangszeit zum Tragen.

Beispiel (Temperaturschwellwert: 20°C; PV-Ertrag Schwellwert: 30kWh):

  • 09:00Uhr: Temperatur: 18°C, PV-Ertrag: 2kWh ⇒ Gießindex: (0+0) = 0
  • 10:00Uhr: Temperatur: 23°C, PV-Ertrag: 5kWh ⇒ Gießindex: (3+0)+0 = 3
  • 11:00Uhr: Temperatur: 24°C, PV-Ertrag: 7kWh ⇒ Gießindex: (4+0)+3 = 7
  • 12:00Uhr: Temperatur: 26°C, PV-Ertrag: 12kWh ⇒ Gießindex: (5+0)+7 = 12
  • 13:00Uhr: Temperatur: 27°C, PV-Ertrag: 18kWh ⇒ Gießindex: (6+0)+12 = 18
  • 14:00Uhr: Temperatur: 28°C, PV-Ertrag: 24kWh ⇒ Gießindex: (8+0)+18 = 24
  • 15:00Uhr: Temperatur: 27°C, PV-Ertrag: 29kWh ⇒ Gießindex: (7+0)+24 = 31
  • 16:00Uhr: Temperatur: 25°C, PV-Ertrag: 33kWh ⇒ Gießindex: (5+3)+31 = 39
  • 17:00Uhr: Temperatur: 25°C, PV-Ertrag: 36kWh ⇒ Gießindex: (5+4)+39 = 48
  • 18:00Uhr: Temperatur: 23°C, PV-Ertrag: 38kWh ⇒ Gießindex: (3+8)+48 = 59

In diesem Beispiel würde sich ein Gießindex von 59 ergeben.

Der so über den Tag kumulierte Gießindex bildet die Basis für das zu ermittelnde Gieß-Programm. In Summe habe ich vier Programme abgeleitet:

  • Viel (Gießindex >= 100):
    Die Rabatte (2 Gießkreise) werden jeweils 12 Minuten gegossen und die Terrassenbepflanzung 5 Minuten.
  • Wenig (Gießindex 50 - 99):
    Die Rabatte (2 Gießkreise) werden jeweils 6 Minuten gegossen und die Terrassenbepflanzung 3 Minuten.
  • Töpfe (Gießindex 25 - 49):
    Es wird nur die Terrassenbepflanzung für 3 Minuten gegossen.
  • Pause (Gießindex < 25):
    Es wird nichts gegossen. Der ermittelte Index wird sich aber für den nächsten Tag gemerkt.

Es wirken aber noch andere Parameter hinein. Hat sich z.B. der Inhalt der Zisterne innerhalb des letzten Tages um mindestens 300 Liter erhöht, so hat es wohl eine erhebliche Menge geregnet und das Gießen kann, je nach Änderung des Füllstandes, um ein oder mehrere Tage ausgesetzt werden. Dieser Parameter kann aber nur als Indikator dienen, solange die Zisterne nicht voll ist. Wenn die Zisterne bereits voll ist und es weiter regnet, so ändert sich am Füllstand i.d.R. nichts.

In diesem Fall kann die Regendauer mit einbezogen werden. Für die Messung der äußeren Environments verwende ich einen EnOcean Multisensor. Er liefert neben der Außentemperatur auch die Info: es regnet j/n. Hier kann über das FHEM Statistics-Modul die Regendauer des letzten Tages kumuliert werden. Dies sagt zwar nichts darüber aus, ob es in dieser Zeit ein Starkregen gab oder nur ein wenig genieselt hat. An Genauigkeit reicht es mir für diesen Zweck aber aus. Als Ergebnis wird eine Gießpause von einem oder mehreren Tagen eingelegt, falls die Regendauer seit dem letzten Gießen größer als 3 Stunden war.

Wenn eine Gießpause über die Füllstandsänderung oder die Regendauer ermittelt wurde, so wird der bis dahin ermittelte Gießindex nicht einfach verworfen, sondern halbiert und für den nächsten Tag gemerkt.

Ermittelte Gießpausen habe ich generell auf drei Tage begrenzt, damit das System bei Wetterwechsel flexibel reagieren kann.

Wenn es an einem Tag zu keiner Gießaktion reicht (z.B. wird als Gießindex nur 10 erreicht), so wird dieser Wert nicht einfach verworfen, sondern ebenfalls für den nächsten Tag gemerkt. Damit soll verhindert werden, wenn an mehreren Tagen das Gießen knapp „verfehlt“ wird, trotzdem irgendwann gegossen wird, da durch den Vortrag aus dem Vortag schon ein Sockelbetrag vorhanden ist.

Andererseits sind ermittelte Gießpausen auch nicht in Stein gemeißelt. Ist das System eigentlich im Pausenmodus, so wird jeweils der halbierte Gießindex berücksichtigt. Würde nach Halbierung des Wertes immer noch gegossen werden, so wird auch gegossen. Diese Situation tritt z.B. bei extremen Wetterlagen ein, die in letzter Zeit häufiger vorkommen, d.h. es regnet nachts und am darauffolgenden Tag ist wieder ein heißer Sommertag.

Neigt sich der Füllstand der Zisterne dem Ende, wird auf ein reduziertes Gießprogramm umgeschaltet, d.h. es wird nur der halbe Gießindex berücksichtigt, um Wasser zu sparen.

Generell lasse ich mir das über den Tag ermittelte Gieß-Programm um 20:00 Uhr per Pushbullet auf das Handy senden. Der eigentliche Gießvorgang startet um 21:00 Uhr. Dies hat den Vorteil, dass ich noch eine Stunde Zeit habe, um manuell zu korrigieren, falls ich mit dem ermittelten Programm nicht zufrieden bin. Dies ist im ersten Betriebsjahr nur zweimal passiert. Nachteilig an dieser Vorgehensweise ist, dass der Zeitraum zwischen 20:00 und 21:00 Uhr nicht berücksichtigt wird, d.h. wenn es um 20:10 Uhr mit regnen beginnt, wird trotzdem gegossen, sofern ich nicht manuell gegensteuere.

Die hier beschriebene Logik wurde in FHEM implementiert. Auf Details gehe ich im Abschnitt Bewässerungssteuerung mit FHEM ein.


Kontakt

Senden Sie mir Ihre Fragen oder Anregungen über die Kontaktbox oder direkt per Email. Sie können mich natürlich auch über die gängigen sozialen Netze erreichen.

kontakt@kaempf-nk.de

Fragen / Anregungen?

Sicherheitsabfrage:
Datenschutzhinweis: Die eingegebenen Daten werden nicht an Dritte weitergegeben.