Der TSGRain Controller ist für die Ausführung der Bewässerungslogik zuständig.
Find a file
2022-02-22 08:27:28 +01:00
proto api improvements, fix job scheduler 2022-02-07 00:23:31 +01:00
tests fix inverted queuing mode for add_task 2022-02-09 15:51:21 +01:00
tsgrain_controller fix typo 2022-02-22 08:27:28 +01:00
.bumpversion.cfg Bump version: 0.1.4 → 0.1.5 2022-02-09 15:52:21 +01:00
.editorconfig Initial commit 2022-01-02 21:30:56 +01:00
.gitignore add system time configuration 2022-01-31 00:14:48 +01:00
.pre-commit-config.yaml add grpc models 2022-01-28 23:44:08 +01:00
.pylintrc api improvements, fix job scheduler 2022-02-07 00:23:31 +01:00
.tool-versions Initial commit 2022-01-02 21:30:56 +01:00
LICENSE add license 2022-02-07 02:11:17 +01:00
README.rst add output tests 2022-01-22 07:57:18 +01:00
requirements.txt add grpc models 2022-01-28 23:44:08 +01:00
requirements_dev.txt fix task queue when auto mode is interrupted 2022-02-08 00:40:46 +01:00
requirements_test.txt add db 2022-01-26 19:54:43 +01:00
setup.py Bump version: 0.1.4 → 0.1.5 2022-02-09 15:52:21 +01:00
tox.ini add system time configuration 2022-01-31 00:14:48 +01:00
tsgrain.toml.example fix --config cmdline argument, add config example 2022-02-07 02:48:09 +01:00

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