Basis
Da ich mittlerweile ein Konzept und Material habe ist es an der Zeit sich Gedanken zu machen, wie die Software designt werden soll. Der Code soll in Python geschrieben werden, da ich schon mehrere Projekte in Python realisiert habe und es viele Ressourcen im Internet gibt. Des weiteren soll der Code objektorientiert strukturiert werden. Dies hat den Vorteil, dass er leicht erweiterbar ist und auch die Wartung vereinfacht. Außerdem lassen sich durch einen objektorientierten Ansatz große Probleme bessere in mehrere kleinere Probleme und Subtasks aufspalten.
Komponenten
Das Projekt soll verschiedene Sensoren verwenden. Diese müssen zunächst implementiert werden. Die Daten der Sensoren müssen verarbeitet werden und möglicherweise müssen dadurch Benachrichtigungen getriggert und natürlich auch abgespielt werden. Das ganze muss initialisiert werden und soll konfigurierbar sein.
Ein Ansatz aus mehreren Modulen scheint sinnvoll:
- Ein Sensor-Modul implementiert eine Base-Sensor-Klasse
- Submodule erben diese und implementieren die jeweiligen Sensoren
- Ein Controller-Modul sammelt von allen registrierten Sensoren Daten.
- Ein Benachrichtigungs-Modul verwaltet eine Queue, in die neue Benachrichtigungen eingereiht werden können.
- Dadurch werden Benachrichtigungen vollständig abgespielt und können möglicherweise verbunden werden, wenn es meherere gleichzeitig gibt
- Das Main-Modul liest die Konfiguration ein, registriert die Sensoren und forked mehrere Threads für das Controller Modul und das Benachrichtigungs Modul
- Ein Konfigurations-Modul parsed das Konfigurationsfile
Sensor Module
Sensoren sollten verschiedene Werte bei der Initialisierung mitgegeben bekommen:
- trigger Werte
- mindestens eine Benachrichtigung
- eine Adresse
- Namen
Es kann bei Sensoren zu verschieden Problemen kommen:
- Sensoren liefern manchmal verschiedene Werte, z.B. Luftfeuchte und Temperatur
- Sensoren müssen evtl. kalibriert werden
Folgende Methoden sollten implementiert werden:
- getData
- getNotification
Es ist noch zu klären, wo Trigger-Berechnungen stattfinden.
- Sensoren können möglicherweise eskaliert werden, wenn Werte mehrfach in Folge anschlagen
Subtasks
- Base class implementieren
- verschiedene Submodules implementieren
- lernen die verschieden Sensoren anzusprechen
Controller Modul
Das Controller Modul verwaltet die registrierten Sensoren und stößt in regelmäßigen Abständen Messungen an. Wenn eine Benachrichtigung getriggert wird sorgt der Controller dafür, dass die richtige Benachrichtigung an das Benachrichtigungs-Modul übergeben wird.
Möglicherweise lassen sich Controller Modul und Initialisierungsmodul zusammenfassen.
Folgende Variablen braucht der Controller:
- ein Array aller Sensoren
- ein Benarchrichtigungs-Modul
Subtasks
- zunächst keine
Benachrichtigungs Modul
Das Benachrichtigungsmodul verwaltet eine Queue. Dies ist wichtig, damit nicht mehrere Benachrichtigungen gleichzeitig abgespielt werden, oder sogar unterbrochen werden. Die Queue soll in regelmäßigen Abständen oder bei jeder neuen Benachrichtigung abgearbeitet werden können.
Frage: Wo wird das Abarbeiten der Queue getriggert?
Subtasks
- Aus Python Audiodateien abspielen lernen
- Queue-Implementation finden oder bauen
Main Modul
Möglicherweise lässt sich dies mit dem Controller Modul verbinden. Es müssen Konfigurationen gerendert werden, Sensoren registriert werden, Threads für den Controller und die Benachrichtigungen geforked werden.
Subtasks
- zunächst keine
Konfigurations Modul
Das Konfigurationsmodul kennt die Syntax des Config Files und liest dieses in ein für python benutzbares Format ein.
Subtasks
- Syntax überlegen. Vermutlich yaml, toml oder json?
- Config File Struktur überlegen
- Config File parsen ausprobieren