126 lines
4 KiB
ReStructuredText
126 lines
4 KiB
ReStructuredText
##################
|
|
TSGRain Controller
|
|
##################
|
|
|
|
Der TSGRain Controller ist für die Ausführung der Bewässerungslogik zuständig.
|
|
Er liest die Tasten auf dem Bedienfeld ein und steuert die Ventile und LEDs.
|
|
|
|
|
|
Architektur
|
|
###########
|
|
|
|
Der Controller basiert auf einer Warteschlange aus Bewässerungsaufgaben, die nacheinander
|
|
ausgeführt werden. Bei eingehenden Steuerungsereignissen (Tastendruck, RPC-Event,
|
|
Zeitplan-Event) werden neue Aufgaben in die Warteschlange eingereiht.
|
|
|
|
Wird der Controller beendet, kann die Warteschlange in der Datenbank gespeichert werden,
|
|
wodurch das Bewässerungsprogramm beim Neustart fortgesetzt wird.
|
|
|
|
1. Auslösung der Bewässerung duch Zeitplan, Tastendruck oder RPC (von der Weboberfläche).
|
|
2. Bewässerungsaufgabe wird erstellt und eingereiht.
|
|
3. Sind freie Bewässerungskapazitäten vorhanden (gewählte Bewässerungszone noch nicht
|
|
aktiv, nicht mehr als ``MAX_ACTIVE_ZONES`` aktive Bewässerungszonen),
|
|
wird der Auftrag gestartet.
|
|
4. Der entsprechende Ventilausgang wird aktiviert und ein Timer über die entsprechende
|
|
Bewässerungszeit gestartet.
|
|
5. Ist der Timer abgelaufen, wird der Ventilausgang deaktivert und der Bewässerungsauftrag
|
|
aus der Warteschlange entfernt.
|
|
6. Wird ein Bewässerungsauftrag abgebrochen (entweder durch Tastendruck oder durch
|
|
Löschen des Zeitplans, muss ebenfalls der Ventilausgang deaktiviert und der
|
|
Bewässerungsauftrag aus der Warteschlange entfernt werden.
|
|
7. Wird der Controller beendet, werden alle laufenden Aufträge angehalten. Die
|
|
Ventilausgänge werden deaktiviert und die gesamte Warteschlange inklusive
|
|
der Restzeiten der Timer in der Datenbank gesichert.
|
|
|
|
Die Bewässerungsaufgaben haben je nach Quelle unterschiedliche Prioritäten.
|
|
Eine manuell gestartete Bewässerung hat gegenüber einer zeitplangesteuerten Vorrang.
|
|
Läuft also gerade eine zeitplangesteuerte Bewässerung und es wird eine neue
|
|
Aufgabe mittels Taster gestartet, so wird die zeitplangesteuerte Bewässerung angehalten
|
|
und nach Abschluss der manuellen Bewässerungsaufgabe fortgesetzt.
|
|
|
|
Pro Quelle und Zone darf nur ein Bewässerungsauftrag in der Warteschlange existieren.
|
|
Hierdurch wird verhindert, dass sich Bewässerungsaufträge anhäufen, wenn zum Beispiel
|
|
ein Zeitplan mit einem zu kurzen Intervall gewählt wurde.
|
|
|
|
|
|
Bedienpanel
|
|
###########
|
|
|
|
Das Bedienpanel besteht aus einem Taster und einer LED pro Bewässerungszone.
|
|
Zusätzlich gibt es auch eine Modus-LED (RGB) und einen Taster, um die
|
|
zeitplangesteuerte Bewässerung ein/auszuschalten.
|
|
Die LEDs und Tasten werden über den I2C-Portexpander MCP23017 angesteuert.
|
|
|
|
Bei Druck auf einen Zonen-Taster wird eine neue Bewässerungsaufgabe gestartet, sollten
|
|
momentan Bewässerungskapazitäten verfügbar sein.
|
|
|
|
Die Zonen-LEDs leuchten, wenn auf den entsprechenden Zonen eine
|
|
Bewässerungsaufgabe aktiv ist. Wenn die übrige Bewässerungszeit unter einer Minute
|
|
beträgt, sollen die LEDs blinken.
|
|
|
|
Die Modus-LED leuchtet grün, wenn die zeitplangesteuerte Bewässerung aktiviert ist.
|
|
Läuft gerade eine zeitplangesteuerte Bewässerungsaufgabe, blinkt die LED grün.
|
|
Läuft gerade eine manuelle Bewässerungsaufgabe, blinkt die LED rot.
|
|
|
|
Bei einer Fehlbedienung (z.B. fehlende Bewässerungskapazitäten) sollen alle Zonen-LEDs
|
|
einmal aufblinken.
|
|
|
|
|
|
GRPC
|
|
====
|
|
|
|
Der Controller kann über eine GRPC-Schnittstelle mit anderen Anwendungen kommunizieren.
|
|
|
|
|
|
Datenmodelle
|
|
============
|
|
|
|
Source
|
|
------
|
|
|
|
``name``
|
|
Name der Quelle: manual, schedule
|
|
|
|
``priority``
|
|
**Priorität:** Priorität der Quelle
|
|
|
|
Task
|
|
----
|
|
|
|
``source``
|
|
**Quelle:** Zeitplan (mit Zeitplan-ID), Tastendruck
|
|
|
|
``zone: int``
|
|
ID der Bewässerungszone (Platz)
|
|
|
|
``duration: int``
|
|
Bewässerungsdauer in Sekunden
|
|
|
|
``remaining: int``
|
|
Verbleibende Bewässerungsdauer in Sekunden
|
|
|
|
|
|
Schedule
|
|
--------
|
|
|
|
``date: datetime``
|
|
Datum/Uhrzeit
|
|
|
|
``duration: int``
|
|
Bewässerungsdauer (pro Platz, in Sekunden)
|
|
|
|
``zones: List[int]``
|
|
Bewässerungszonen (Plätze)
|
|
|
|
``repeat: bool``
|
|
Zeitplan täglich wiederholen
|
|
|
|
|
|
Konfiguration
|
|
=============
|
|
|
|
``MAX_ACTIVE_ZONES``
|
|
|
|
in/output pins
|
|
|
|
|