|
|
# 1. Systemüberblick
|
|
|
|
|
Diese Software soll es ermöglichen, viele kleine, zu Clustern zusammengefasste, Gewächshäuser zentral zu verwalten.
|
|
|
|
|
Um dies zu bewerkstelligen, sind in jedem Gewächshaus auf einem Arduino mehrere Sensoren verbaut, die über Bluetooth LE Messdaten an einen AccessPoint schicken. Die Gewächshäuser sind batteriebetrieben. Im Falle einer Messwert Unter- bzw. Überschreitung kann diese über eine RGB-LED kommuniziert werden.
|
|
|
|
|
Ein AccessPoint kann sich mit bis zu 255 Gewächshäuser (SensorStations) verbinden. Die zugeschickten Daten werden auf Messwert Unter- bzw. Überschreitungen geprüft und diese werden der entsprechenden SensorStation ggf. mitgeteilt. Gemessen wird die Erdfeuchtigkeit, die Luftqualität und die Lichtintensität.
|
|
|
|
|
|
|
|
|
|
Die Kommunikation zwischen den Komponenten wird mittels REST-Schnittstellen realisiert.
|
|
# Software Konzept
|
|
|
|
|
|
|
|
Die Daten werden in einstellbaren Intervallen an einen zentralen Webserver übertragen, über dessen Weboberfläche verschiedene Akteure auf die Daten zugreifen und diese verwalten können.
|
|
1. Systemüberblick
|
|
|
Des Weiteren ist an jedem Gewächshaus ein QR-Code angebracht. Über diesen Code gelangen unangemeldete Nutzer auf eine Seite, auf der Bilder dieser Pflanze zu sehen sind und die Möglichkeit besteht Bilder hochzuladen.
|
|
2. Use Cases
|
|
|
|
3. Klassendiagramm
|
|
|
|
4. SW-Architektur
|
|
|
|
5. Ausfallssicherheit
|
|
|
|
6. Ausgewählte Technologien
|
|
|
|
7. GUI Prototyp
|
|
|
|
8. Projektplan
|
|
|
|
|
|
|
|
Administratoren verwalten die AccessPoints und teilen Gärtner die SensorStations zu. Administratoren werden über den Webserver auch über Verbindungsprobleme, usw. zwischen den verschiedenen Komponenten informiert.
|
|
## 1. Systemüberblick
|
|
|
Nutzer haben die Möglichkeit Daten der Gewächshäuser anzeigen zu lassen.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 2. Use Cases
|
|
Diese Dokumentation beschreibt PlantCare, eine Software die es ermöglicht, viele kleine, zu Clustern zusammengefasste, Gewächshäuser zentral zu verwalten.
|
|
|
|
Das Ziel war es, eine Gesamtlösung für den Anbau von Nutzpflanzen in Miniaturgewächshäusern zu entwickeln, um die Ziele der NGO Plant-Health zu unterstützen. Dabei sollen Sensoren in den Gewächshäusern verwendet werden, um Informationen zur Pflanzengesundheit und Umgebung zu erfassen. Die gesammelten Daten sollen in einer benutzerfreundlichen Webanwendung aufbereitet werden, die verschiedene Nutzergruppen anspricht. Ziel ist es, Zeitmangel, fehlendes Wissen und Umgebungsprobleme zu überwinden und den Anbau von Pflanzen in privaten, öffentlichen und Büro-Gebäuden zu ermöglichen. Das System wird in Bürogebäuden für einen Alpha-Testlauf implementiert werden, mit der Möglichkeit einer zukünftigen Version, die mithilfe von Datenanalyse und Machine Learning Mangelerscheinungen und Krankheiten bei Pflanzen frühzeitig erkennt.
|
|
|
|
|
|
|
|
# 2.1 Akteure
|
|
## 2. Use Cases
|
|
|
**Admin:**
|
|
Grundlegend besteht das System aus drei Komponenten:
|
|
|
Ein Admin verwaltet die User, AccessPoints und SensorStations des Systems
|
|
1. **SensorStation**: Ein Gewächshaus inklusive einem mit mehreren Sensoren bestückten Arduino Nano. Die gemessenen Daten werden über Bluetooth Low Energy an einen AccessPoint übertragen. In Zukunft sollen diese batteriebetrieben sein.
|
|
|
|
2. **AccessPoint**: Ein Raspberry Pi 4. Er empfängt die Daten von (bis zu 255) SensorStations, sammelt diese und schickt sie anschließend an den Webserver. Zusätzlich werden die empfangenen Daten auf Grenzwertüber- bzw. -unterschreitung überprüft und ggf. die entsprechendene SensorStation benachrichtigt. Diese kann dann über eine verbaute RBG-LED die Limitverletzung kommunizieren.
|
|
|
|
3. **Webserver**: Der Webserver stellt ein modernes, Multiuserprogramm zur verfügung. Dieses kann platformunabhängig in Webbrowsern aufgerufen werden. Hier können SensorStations und AccessPoints verwaltet, Pflanzendaten eingesehen, Fotos hochgeladen und User gemanagt werden.
|
|
|
|
|
|
|
|
**Gardener:**
|
|
Folgende Usergruppen sind vorhanden:
|
|
|
Ein Gardener verändert Grenzwerte und Übertragungsintervall der ihm zugeteilten SensorStations. Des Weiteren kann er Fotos zu seinen Pflanzen löschen.
|
|
1. **Admin**
|
|
|
|
2. **Gardener**
|
|
|
|
3. **User**
|
|
|
|
4. **Visitor**
|
|
|
|
|
|
|
|
**User:**
|
|
Die Berechtigungen der jeweiligen Gruppen ist hierarchisch aufgebaut, das heißt ein User hat alle Funktionalitäten der Gruppen unter sich. Um das anschließende UseCase-Diagramm zu vereinfachen werden die UseCases nur der "niedrigsten" Gruppe zugeordnet. So ist zum Beispiel der UseCase "Bilder anschauen" der Gruppe Visitor zugeordnet. Daraus folgt, dass alle anderen Usergruppen diese Funktion auch besitzen.
|
|
|
Ein User kann Messdaten von beliebigen Pflanzen einsehen.
|
|
|
|
|
|
|
|
|
|
**Visitor:**
|
|

|
|
|
Ein Visitor kann an der SensorStation einen QR-Code scannen, über den er auf eine Seite geleitet wird, an der er Fotos der Pflanze in der Station hochladen oder betrachten kann.
|
|
|
|
|
|
|
|
|
|
**AccessPoint:**
|
|
## 2.1 Use-Cases
|
|
|
Ein Access empfängt Daten von bis zu 255 SensorStations und überprüft diese auf Grenzwerte Unter- bzw. Überschreitungen. Diese werden in einstellbaren Intervallen an den Webserver gesendet. Er kann sich im Pairing-Modus mit neuen SensorStations verbinden.
|
|
|
|
|
|
|
|
|
|
**SensorStation:**
|
|
|
|
|
Eine SensorStation beinhaltet eine Pflanze und mehrere Sensoren. Die Daten dieser Sensoren werden an einen AccessPoint gesendet. Im Falle, dass dieser eine Grenzwert Unter- bzw. Überschreitungen feststellt wird diese über eine RGB-LED ausgegeben.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 2.2 Use Cases Diagramm
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
## 2.3 Use-Cases
|
|
|
|
|
|
|
|
|
|
### 2.3.1 Akteur: User
|
|
### 2.3.1 Akteur: User
|
|
|
|
|
|
|
|
**Einloggen**
|
|
**Einloggen**
|
|
|
|
|
|
|
|
- **Vorbedingung:** Das System läuft, man befindet sich auf der Startseite und der User soll von Admin schon erstellt worden sein.
|
|
- **Vorbedingung:** Das System läuft, man befindet sich auf der Startseite und der User soll von Admin schon erstellt worden sein.
|
|
|
- **Ablauf:** Benutzer trägt den Benutzernamen und das Passwort ein und wird durch das Drücken auf den Login-Button weitergeleitet.
|
|
- **Ablauf:** Benutzer trägt den Benutzernamen und das Passwort ein und wird durch das Drücken auf den Login-Button weitergeleitet.
|
|
|
- **Erfolg:**
|
|
- **Erfolg:**
|
|
|
- Admin: Alle Gewächshäuser werden angezeigt.
|
|
- Admin: Alle Gewächshäuser werden angezeigt.
|
|
|
- Gärtner: Die Gewächshäuser, für die der angemeldete Gärtner zuständig ist, werden aufgezeigt.
|
|
- Gärtner: Die Gewächshäuser, für die der angemeldete Gärtner zuständig ist, werden aufgezeigt.
|
|
|
- Benutzer: Können das Dashboard mit allen Gewächshäusern einsehen.
|
|
- Benutzer: Können das Dashboard mit allen Gewächshäusern einsehen.
|
|
|
- **Kein Erfolg:** Der User enthält eine Fehlermeldung.
|
|
- **Kein Erfolg:** Der User enthält eine Fehlermeldung.
|
|
|
- **Involvierte Klassen:** User
|
|
- **Involvierte Klassen:** User
|
|
|
|
|
|
|
|
### 2.3.2 Akteur: Gardener
|
|
### 2.3.2 Akteur: Gardener
|
|
|
|
|
|
|
|
**Pflanzendaten einsehen**
|
|
**Pflanzendaten einsehen**
|
|
|
|
|
|
|
|
- **Vorbedingung** : Das System läuft, der Nutzer ist mit Berechtigungslevel Gardener angemeldet.
|
|
- **Vorbedingung** : Das System läuft, der Nutzer ist mit Berechtigungslevel Gardener angemeldet.
|
|
|
- **Ablauf** : Der Nutzer wählt die Sensorstation mit der Pflanze, deren Daten er einsehen will, aus dem Dashboard aus und gelangt auf eine neue Seite.
|
|
- **Ablauf** : Der Nutzer wählt die Sensorstation mit der Pflanze, deren Daten er einsehen will, aus dem Dashboard aus und gelangt auf eine neue Seite.
|
|
|
- **Erfolg** : Auf dieser Seite sind u.a. die (historischen) Daten für diese Pflanze in grafischer und Textform aufgelistet.
|
|
- **Erfolg** : Auf dieser Seite sind u.a. die (historischen) Daten für diese Pflanze in grafischer und Textform aufgelistet.
|
|
|
- **Kein Erfolg** : Der Nutzer erhält eine Fehlermeldung.
|
|
- **Kein Erfolg** : Der Nutzer erhält eine Fehlermeldung.
|
|
|
- **Involvierte Klassen** : Gardener
|
|
- **Involvierte Klassen** : Gardener
|
|
|
|
|
|
|
|
**Grenzwerte einstellen**
|
|
**Grenzwerte einstellen**
|
|
|
|
|
|
|
|
- **Vorbedingung** : Das System läuft, der Nutzer ist mit Berechtigungslevel Gardener angemeldet.
|
|
- **Vorbedingung** : Das System läuft, der Nutzer ist mit Berechtigungslevel Gardener angemeldet.
|
|
|
- **Ablauf** : Der Nutzer wählt die Sensorstation mit der Pflanze, deren Grenzwerte er ändern will, aus dem Dashboard aus und gelangt auf eine neue Seite. Auf dieser Seite werden u.a. die aktuellen Grenzwerte angezeigt.
|
|
- **Ablauf** : Der Nutzer wählt die Sensorstation mit der Pflanze, deren Grenzwerte er ändern will, aus dem Dashboard aus und gelangt auf eine neue Seite. Auf dieser Seite werden u.a. die aktuellen Grenzwerte angezeigt.
|
|
|
- **Erfolg** : Die Grenzwerte können bearbeitet werden.
|
|
- **Erfolg** : Die Grenzwerte können bearbeitet werden.
|
|
|
- **Kein Erfolg** : Der Nutzer erhält eine Fehlermeldung.
|
|
- **Kein Erfolg** : Der Nutzer erhält eine Fehlermeldung.
|
|
|
- **Involvierte Klassen** : Gardener
|
|
- **Involvierte Klassen** : Gardener
|
|
|
|
|
|
|
|
**Übertragungsintervalle einstellen**
|
|
**Übertragungsintervalle einstellen**
|
|
|
|
|
|
|
|
- **Vorbedingung** : Das System läuft, der Nutzer ist mit Berechtigungslevel Gardener angemeldet.
|
|
- **Vorbedingung** : Das System läuft, der Nutzer ist mit Berechtigungslevel Gardener angemeldet.
|
|
|
- **Ablauf** : Der Nutzer wählt die Sensorstation, deren Übertragungsintervalle er ändern will, aus dem Dashboard aus und gelangt auf eine neue Seite. Auf dieser Seite wird u.a. das aktuelle Übertragungsintervall angezeigt.
|
|
- **Ablauf** : Der Nutzer wählt die Sensorstation, deren Übertragungsintervalle er ändern will, aus dem Dashboard aus und gelangt auf eine neue Seite. Auf dieser Seite wird u.a. das aktuelle Übertragungsintervall angezeigt.
|
|
|
- **Erfolg** : Das Übertragungsintervall kann bearbeitet werden.
|
|
- **Erfolg** : Das Übertragungsintervall kann bearbeitet werden.
|
|
|
- **Kein Erfolg** : Der Nutzer erhält eine Fehlermeldung.
|
|
- **Kein Erfolg** : Der Nutzer erhält eine Fehlermeldung.
|
|
|
- **Involvierte Klassen** : Gardener
|
|
- **Involvierte Klassen** : Gardener
|
|
|
|
|
|
|
|
**Bildgalerie verwalten**
|
|
**Bildgalerie verwalten**
|
|
|
|
|
|
|
|
- **Vorbedingung:** Der User ist angemeldet und hat die Rolle „Gardener".
|
|
- **Vorbedingung:** Der User ist angemeldet und hat die Rolle „Gardener".
|
|
|
- **Ablauf:** Der Gärtner sieht alle seine Pflanzen aufgelistet. Er klickt auf einen Button einer bestimmten Pflanze, um die Bildergalerie zu öffnen. Der Gärtner hat nun die Möglichkeit, Bilder zu löschen, indem er auf einen Button am Bild klickt.
|
|
- **Ablauf:** Der Gärtner sieht alle seine Pflanzen aufgelistet. Er klickt auf einen Button einer bestimmten Pflanze, um die Bildergalerie zu öffnen. Der Gärtner hat nun die Möglichkeit, Bilder zu löschen, indem er auf einen Button am Bild klickt.
|
|
|
- **Erfolg:** Die Galerie erscheint und der Gärtner kann die Bilder verwalten.
|
|
- **Erfolg:** Die Galerie erscheint und der Gärtner kann die Bilder verwalten.
|
|
|
- **Kein Erfolg:** -
|
|
- **Kein Erfolg:** -
|
|
|
- **Involvierte Klassen:** Userx, PlantPicture, SensorStation
|
|
- **Involvierte Klassen:** Userx, PlantPicture, SensorStation
|
|
|
|
|
|
|
|
### 2.3.3 Akteur: Admin
|
|
### 2.3.3 Akteur: Admin
|
|
|
|
|
|
|
|
**Manage Access Point**
|
|
**Manage Access Point**
|
|
|
|
|
|
|
|
- **Vorbedingung** : Der User hat sich als Admin erfolgreich angemeldet.
|
|
- **Vorbedingung** : Der User hat sich als Admin erfolgreich angemeldet.
|
|
|
- **Ablauf:**
|
|
- **Ablauf:**
|
|
|
- Admin wechselt zu der Sicht der AccessPoints und klickt auf den Verwaltungs-Button
|
|
- Admin wechselt zu der Sicht der AccessPoints und klickt auf den Verwaltungs-Button
|
|
|
- Folgendes kann der Admin nun machen:
|
|
- Folgendes kann der Admin nun machen:
|
|
|
- Neues AccessPoint anlegen
|
|
- Neues AccessPoint anlegen
|
|
|
- Existierender AccessPoint bearbeiten
|
|
- Existierender AccessPoint bearbeiten
|
|
|
- Existierender AccessPoint löschen
|
|
- Existierender AccessPoint löschen
|
|
|
- **Erfolg** : Admin hat einen neuen AccessPoint angelegt, einen bereits vorhandenen bearbeitet oder einen gelöscht.
|
|
- **Erfolg** : Admin hat einen neuen AccessPoint angelegt, einen bereits vorhandenen bearbeitet oder einen gelöscht.
|
|
|
- **Kein Erfolg** : Fehlermeldung
|
|
- **Kein Erfolg** : Fehlermeldung
|
|
|
- **Involvierte Klassen** : User mit Admin Berechtigungen, AccessPoint
|
|
- **Involvierte Klassen** : User mit Admin Berechtigungen, AccessPoint
|
|
|
|
|
|
|
|
**Manage Sensor Station**
|
|
**Manage Sensor Station**
|
|
|
|
|
|
|
|
- **Vorbedingung** : Der User hat sich als Admin erfolgreich angemeldet.
|
|
- **Vorbedingung** : Der User hat sich als Admin erfolgreich angemeldet.
|
|
|
- **Ablauf:**
|
|
- **Ablauf:**
|
|
|
- Admin kann über den Header auf der Sicht der Sensor Stationen gelangen
|
|
- Admin kann über den Header auf der Sicht der Sensor Stationen gelangen
|
|
|
- Dort kann man dann bei der ausgewählten Sensor Station auf den Verwaltungs-Button klicken.
|
|
- Dort kann man dann bei der ausgewählten Sensor Station auf den Verwaltungs-Button klicken.
|
|
|
- Folgendes kann der Admin nun machen:
|
|
- Folgendes kann der Admin nun machen:
|
|
|
- Sensor Station löschen
|
|
- Sensor Station löschen
|
|
|
- Sensor Station editieren
|
|
- Sensor Station editieren
|
|
|
- Der Sensor Station einen Universally Unique Identifier (UUID) zuweisen?
|
|
- Der Sensor Station einen Universally Unique Identifier (UUID) zuweisen?
|
|
|
- **Erfolg:** Der Sensor Station wird einen UUID zugewiesen, diese wird editiert oder gelöscht.
|
|
- **Erfolg:** Der Sensor Station wird einen UUID zugewiesen, diese wird editiert oder gelöscht.
|
|
|
- **Kein Erfolg** : Fehlermeldung
|
|
- **Kein Erfolg** : Fehlermeldung
|
|
|
- **Involvierte Klassen:** User mit Admin Berechtigungen, SensorStation
|
|
- **Involvierte Klassen:** User mit Admin Berechtigungen, SensorStation
|
|
|
|
|
|
|
|
**Verbindung zum Webserver herstellen**
|
|
**Verbindung zum Webserver herstellen**
|
|
|
|
|
|
|
|
- **Vorbedingung:** Webserver läuft, Admin eingeloggt, AccessPoint eingeschaltet
|
|
- **Vorbedingung:** Webserver läuft, Admin eingeloggt, AccessPoint eingeschaltet
|
|
|
- **Ablauf:**
|
|
- **Ablauf:**
|
|
|
- Name des AccessPoints und Adresse des Webservers werden am Accesspoint konfiguriert. AccessPoint versucht, sich mit dem Webserver zu verbinden.
|
|
- Name des AccessPoints und Adresse des Webservers werden am Accesspoint konfiguriert. AccessPoint versucht, sich mit dem Webserver zu verbinden.
|
|
|
- Verbindung erfolgreich hergestellt. Admin sieht im Webinterface den neu verbundenen Accesspoint.
|
|
- Verbindung erfolgreich hergestellt. Admin sieht im Webinterface den neu verbundenen Accesspoint.
|
|
|
- Admin gibt den AccessPoint manuell im Webinterface frei.
|
|
- Admin gibt den AccessPoint manuell im Webinterface frei.
|
|
|
- **Erfolg:** AccessPoint ist mit dem Webserver verbunden und Kommunikation ist möglich.
|
|
- **Erfolg:** AccessPoint ist mit dem Webserver verbunden und Kommunikation ist möglich.
|
|
|
- **Kein Erfolg:** Verbindung fehlgeschlagen. Erneuter Verbindungsversuch.
|
|
- **Kein Erfolg:** Verbindung fehlgeschlagen. Erneuter Verbindungsversuch.
|
|
|
- **Involvierte Klassen:** Admin, AccessPoint
|
|
- **Involvierte Klassen:** Admin, AccessPoint
|
|
|
|
|
|
|
|
**Manage User**
|
|
**Manage User**
|
|
|
|
|
|
|
|
- **Vorbedingung** : Das System läuft, man ist auf der Startseite und als Admin angemeldet. Es existiert mindestens ein User-Account auf dem System.
|
|
- **Vorbedingung** : Das System läuft, man ist auf der Startseite und als Admin angemeldet. Es existiert mindestens ein User-Account auf dem System.
|
|
|
- **Ablauf** : Der Admin klickt auf den Reiter „Manage User". Dann wählt er den zu löschenden User aus und drückt auf den dafür gekennzeichneten Button.
|
|
- **Ablauf** : Der Admin klickt auf den Reiter „Manage User". Dann wählt er den zu löschenden User aus und drückt auf den dafür gekennzeichneten Button.
|
|
|
- **Erfolg** : Der User wird aus der Datenbank gelöscht und wird nicht mehr auf der Seite „Manage Users" angezeigt. Der gelöschte User kann sich natürlich nicht mehr mit seinem Account anmelden.
|
|
- **Erfolg** : Der User wird aus der Datenbank gelöscht und wird nicht mehr auf der Seite „Manage Users" angezeigt. Der gelöschte User kann sich natürlich nicht mehr mit seinem Account anmelden.
|
|
|
- **Kein Erfolg** : Der Admin erhält eine Fehlermeldung und der User bleibt weiterhin in der Datenbank gespeichert.
|
|
- **Kein Erfolg** : Der Admin erhält eine Fehlermeldung und der User bleibt weiterhin in der Datenbank gespeichert.
|
|
|
- **Involvierte Klassen** : Userx
|
|
- **Involvierte Klassen** : Userx
|
|
|
|
|
|
|
|
**Status der AccessPoints/SensorStations einsehen**
|
|
**Status der AccessPoints/SensorStations einsehen**
|
|
|
|
|
|
|
|
- **Vorbedingung**: Das System funktioniert fehlerfrei, es gibt mindestens eine SensorStation bzw. AccessPoint, die bereits verbunden sind. Der aktuelle Nutzer ist als Admin angemeldet.
|
|
- **Vorbedingung**: Das System funktioniert fehlerfrei, es gibt mindestens eine SensorStation bzw. AccessPoint, die bereits verbunden sind. Der aktuelle Nutzer ist als Admin angemeldet.
|
|
|
- **Ablauf** : Der Admin klickt auf den Reiter „Devices" und bekommt dann eine Übersicht über den Status der Geräte.
|
|
- **Ablauf** : Der Admin klickt auf den Reiter „Devices" und bekommt dann eine Übersicht über den Status der Geräte.
|
|
|
- **Erfolg** : Der Admin bekommt alle Geräte zu sehen und kann sich einen Überblick über den Status verschaffen.
|
|
- **Erfolg** : Der Admin bekommt alle Geräte zu sehen und kann sich einen Überblick über den Status verschaffen.
|
|
|
- **Kein Erfolg**: Die Seite „Devices" kann nicht aufgerufen werden, der Admin bekommt eine Fehlermeldung und muss es nach einer Zeit wieder probieren.
|
|
- **Kein Erfolg**: Die Seite „Devices" kann nicht aufgerufen werden, der Admin bekommt eine Fehlermeldung und muss es nach einer Zeit wieder probieren.
|
|
|
- **Involvierte Klassen**: Userx, AccessPoint, SensorStations
|
|
- **Involvierte Klassen**: Userx, AccessPoint, SensorStations
|
|
|
|
|
|
|
|
**Logs einsehen**
|
|
**Logs einsehen**
|
|
|
|
|
|
|
|
- **Vorbedingung** : Das System funktioniert und der Akteur ist als Admin angemeldet.
|
|
- **Vorbedingung** : Das System funktioniert und der Akteur ist als Admin angemeldet.
|
|
|
- **Ablauf**: Der Admin klickt auf den Reiter „Logs".
|
|
- **Ablauf**: Der Admin klickt auf den Reiter „Logs".
|
|
|
- **Erfolg**: Der Admin hat Einsicht über alle AuditLog-Einträge.
|
|
- **Erfolg**: Der Admin hat Einsicht über alle AuditLog-Einträge.
|
|
|
- **Kein Erfolg**: Die Seite „Logs" ist nicht verfügbar. Der Admin bekommt eine Fehlermeldung.
|
|
- **Kein Erfolg**: Die Seite „Logs" ist nicht verfügbar. Der Admin bekommt eine Fehlermeldung.
|
|
|
- **Involvierte Klassen**: Userx, AuditLog
|
|
- **Involvierte Klassen**: Userx, AuditLog
|
|
|
|
|
|
|
|
### 2.3.4 Akteur: Visitor
|
|
### 2.3.4 Akteur: Visitor
|
|
|
|
|
|
|
|
**Bilder hochladen**
|
|
**Bilder hochladen**
|
|
|
|
|
|
|
|
- **Vorbedingung**: Der Besucher befindet sich beim Gewächshaus und scannt den QR-Code
|
|
- **Vorbedingung**: Der Besucher befindet sich beim Gewächshaus und scannt den QR-Code
|
|
|
- **Ablauf**: Nach dem Scan befindet sich der Besucher auf der Seite, auf der sich eine Bildgalerie der gescannten Pflanze befindet. Der Besucher kann nun ein Bild hochladen in dem er auf den dazugehörigen Button klickt.
|
|
- **Ablauf**: Nach dem Scan befindet sich der Besucher auf der Seite, auf der sich eine Bildgalerie der gescannten Pflanze befindet. Der Besucher kann nun ein Bild hochladen in dem er auf den dazugehörigen Button klickt.
|
|
|
- **Erfolg:** Das neue Bild befindet sich in der Bildgalerie und jeder, der mit dieser Bildgalerie interagiert, kann das neue Bild betrachten.
|
|
- **Erfolg:** Das neue Bild befindet sich in der Bildgalerie und jeder, der mit dieser Bildgalerie interagiert, kann das neue Bild betrachten.
|
|
|
- **Kein Erfolg**: -
|
|
- **Kein Erfolg**: -
|
|
|
- **Involvierte Klassen**: Userx, SensorStation
|
|
- **Involvierte Klassen**: Userx, SensorStation
|
|
|
|
|
|
|
|
**Bilder anschauen**
|
|
**Bilder anschauen**
|
|
|
|
|
|
|
|
- **Vorbedingung**: Der Besucher befindet sich beim Gewächshaus und scannt den QR-Code
|
|
- **Vorbedingung**: Der Besucher befindet sich beim Gewächshaus und scannt den QR-Code
|
|
|
- **Ablauf**: Nach dem Scan befindet sich der Besucher auf der Seite, auf der sich eine Bildgalerie der gescannten Pflanze befindet.
|
|
- **Ablauf**: Nach dem Scan befindet sich der Besucher auf der Seite, auf der sich eine Bildgalerie der gescannten Pflanze befindet.
|
|
|
- **Erfolg**: Der Besucher kann sich nun durch die Bildgalerie forsten und die Bilder anschauen.
|
|
- **Erfolg**: Der Besucher kann sich nun durch die Bildgalerie forsten und die Bilder anschauen.
|
|
|
- **Kein Erfolg**: Eine Fehlermeldung wird angezeigt
|
|
- **Kein Erfolg**: Eine Fehlermeldung wird angezeigt
|
|
|
- **Involvierte Klassen**: Userx, PlantPicture, SensorStation
|
|
- **Involvierte Klassen**: Userx, PlantPicture, SensorStation
|
|
|
|
|
|
|
|
### 2.3.5 Akteur: AccessPoint
|
|
### 2.3.5 Akteur: AccessPoint
|
|
|
|
|
|
|
|
**Verbindung zwischen SensorStation und AccessPoint herstellen**
|
|
**Verbindung zwischen SensorStation und AccessPoint herstellen**
|
|
|
|
|
|
|
|
- **Vorbedingung**: Webserver läuft, Admin eingeloggt, AccessPoint mit Webserver verbunden
|
|
- **Vorbedingung**: Webserver läuft, Admin eingeloggt, AccessPoint mit Webserver verbunden
|
|
|
- **Ablauf**:
|
|
- **Ablauf**:
|
|
|
- Admin setzt AccessPoint via Webinterface in Kopplungsmodus.
|
|
- Admin setzt AccessPoint via Webinterface in Kopplungsmodus.
|
|
|
- SensorStation mithilfe von Taster auf Mikrocontroller in Kopplungsmodus setzen. LED fängt an, blau zu blinken.
|
|
- SensorStation mithilfe von Taster auf Mikrocontroller in Kopplungsmodus setzen. LED fängt an, blau zu blinken.
|
|
|
- SensorStation findet einen (oder mehrere) AccessPoints im Kopplungsmodus.
|
|
- SensorStation findet einen (oder mehrere) AccessPoints im Kopplungsmodus.
|
|
|
- SensorStation verbindet sich mit dem ersten AccessPoint. Kopplungsmodus von SensorStation wird beendet. LED hört auf zu blinken.
|
|
- SensorStation verbindet sich mit dem ersten AccessPoint. Kopplungsmodus von SensorStation wird beendet. LED hört auf zu blinken.
|
|
|
- Admin gibt SensorStation manuell im Webinterface frei.
|
|
- Admin gibt SensorStation manuell im Webinterface frei.
|
|
|
- Admin beendet den Kopplungsmodus des AccessPoints via Webinterface.
|
|
- Admin beendet den Kopplungsmodus des AccessPoints via Webinterface.
|
|
|
- **Erfolg**: SensorStation mit AccessPoint verbunden, keines der beiden Geräte im Kopplungsmodus, Kommunikation möglich
|
|
- **Erfolg**: SensorStation mit AccessPoint verbunden, keines der beiden Geräte im Kopplungsmodus, Kommunikation möglich
|
|
|
- **Kein Erfolg**:
|
|
- **Kein Erfolg**:
|
|
|
- Kein AccessPoint in der Nähe. Nach fünf Minuten wird Kopplungsmodus automatisch beendet.
|
|
- Kein AccessPoint in der Nähe. Nach fünf Minuten wird Kopplungsmodus automatisch beendet.
|
|
|
- Falls die ID der SensorStation bereits von einer anderen mit dem AccessPoint verbundenen Station verwendet wird, verbindet sich die SensorStation mit einem anderen AccessPoint. Falls keiner vorhanden wird der Kopplungsmodus beendet.
|
|
- Falls die ID der SensorStation bereits von einer anderen mit dem AccessPoint verbundenen Station verwendet wird, verbindet sich die SensorStation mit einem anderen AccessPoint. Falls keiner vorhanden wird der Kopplungsmodus beendet.
|
|
|
- **Involvierte Klassen**: Admin, AccessPoint, SensorStation
|
|
- **Involvierte Klassen**: Admin, AccessPoint, SensorStation
|
|
|
|
|
|
|
|
**Accesspoint sendet Messdaten an Webserver:**
|
|
**Accesspoint sendet Messdaten an Webserver:**
|
|
|
|
|
|
|
|
- **Vorbedingung**: Accesspoint und die Sensorstation ist auf der Webseite registriert. Accesspoint hat die Daten erfolgreich erhalten und zwischengespeichert.
|
|
- **Vorbedingung**: Accesspoint und die Sensorstation ist auf der Webseite registriert. Accesspoint hat die Daten erfolgreich erhalten und zwischengespeichert.
|
|
|
- **Ablauf**: Accesspoint sendet die Daten über eine REST-Schnittstelle an den Webserver und wartet auf die Rückmeldung ob die Daten empfangen wurden. Der Webserver empfängt die Daten und sendet dem Accesspoint eine Bestätigung. Nach erhalt der Bestätigung löscht der Accesspoint die Messdaten.
|
|
- **Ablauf**: Accesspoint sendet die Daten über eine REST-Schnittstelle an den Webserver und wartet auf die Rückmeldung ob die Daten empfangen wurden. Der Webserver empfängt die Daten und sendet dem Accesspoint eine Bestätigung. Nach erhalt der Bestätigung löscht der Accesspoint die Messdaten.
|
|
|
- **Erfolg**: Der Webserver erhält die Daten und der Accesspoint erhält die Bestätigung.
|
|
- **Erfolg**: Der Webserver erhält die Daten und der Accesspoint erhält die Bestätigung.
|
|
|
- **Kein Erfolg**: Der Accesspoint behält die Daten im Speicher und sendet die Daten erneut.
|
|
- **Kein Erfolg**: Der Accesspoint behält die Daten im Speicher und sendet die Daten erneut.
|
|
|
- **Involvierte Klassen**: AccessPoint, SensorStation
|
|
- **Involvierte Klassen**: AccessPoint, SensorStation
|
|
|
|
|
|
|
|
**Wertüberschreitung mitteilen**
|
|
**Wertüberschreitung mitteilen**
|
|
|
|
|
|
|
|
- **Vorbedingung**: Webserver läuft, Accesspoint und SensorStation mit Server verbunden, Wertüberschreitung für konfiguriertes Intervall festgestellt
|
|
- **Vorbedingung**: Webserver läuft, Accesspoint und SensorStation mit Server verbunden, Wertüberschreitung für konfiguriertes Intervall festgestellt
|
|
|
- **Ablauf**:
|
|
- **Ablauf**:
|
|
|
- AccessPoint sendet die Intensität der Überschreitung und den betroffenen Wert an die SensorStation, bei der die Überschreitung festgestellt worden ist.
|
|
- AccessPoint sendet die Intensität der Überschreitung und den betroffenen Wert an die SensorStation, bei der die Überschreitung festgestellt worden ist.
|
|
|
- Die SensorStation gibt anhand des Typs und anhand der Intensität einen Farbton in einem gewissen Blinkcode aus.
|
|
- Die SensorStation gibt anhand des Typs und anhand der Intensität einen Farbton in einem gewissen Blinkcode aus.
|
|
|
- AccessPoint sendet die Intensität, den betroffenen Wert und die betroffene SensorStation an den Webserver, welcher die Grenzwertüberschreitung in einer Nachricht anzeigt.
|
|
- AccessPoint sendet die Intensität, den betroffenen Wert und die betroffene SensorStation an den Webserver, welcher die Grenzwertüberschreitung in einer Nachricht anzeigt.
|
|
|
- **Erfolg**: LED der SensorStation blinkt und am Webserver wird eine Nachricht angezeigt
|
|
- **Erfolg**: LED der SensorStation blinkt und am Webserver wird eine Nachricht angezeigt
|
|
|
- **Kein Erfolg**: Die SensorStation erhält die Message des AccessPoint nicht und kann die Über-/Unterschreitung nicht ausgeben.
|
|
- **Kein Erfolg**: Die SensorStation erhält die Message des AccessPoint nicht und kann die Über-/Unterschreitung nicht ausgeben.
|
|
|
- **Involvierte Klassen**: Accesspoint, SensorStation
|
|
- **Involvierte Klassen**: Accesspoint, SensorStation
|
|
|
|
|
|
|
|
### 2.3.6 Akteur: SensorStation
|
|
### 2.3.6 Akteur: SensorStation
|
|
|
|
|
|
|
|
**Werte an AccessPoint senden**
|
|
**Werte an AccessPoint senden**
|
|
|
|
|
|
|
|
- **Vorbereitung**: Verbindung zwischen AccessPoint und Sensorstation sind aktiv und haben eine aktive Verbindung.
|
|
- **Vorbereitung**: Verbindung zwischen AccessPoint und Sensorstation sind aktiv und haben eine aktive Verbindung.
|
|
|
- **Ablauf**: Die Sensorstation sendet Daten über Bluetooth LE an den AcccessPoint
|
|
- **Ablauf**: Die Sensorstation sendet Daten über Bluetooth LE an den AcccessPoint
|
|
|
- **Erfolg**: Der AccessPoint erhält die Daten, kann sie verarbeiten und ggf. Werteüber-/unterschreitungen an die Sensorstation senden.
|
|
- **Erfolg**: Der AccessPoint erhält die Daten, kann sie verarbeiten und ggf. Werteüber-/unterschreitungen an die Sensorstation senden.
|
|
|
- **Kein Erfolg**: Die Verbindung zwischen AccessPoint und Sensorstation bricht ab und die Daten können nicht geschickt werden. Der AccessPoint meldet die Sensorstation als offline an den Webserver.
|
|
- **Kein Erfolg**: Die Verbindung zwischen AccessPoint und Sensorstation bricht ab und die Daten können nicht geschickt werden. Der AccessPoint meldet die Sensorstation als offline an den Webserver.
|
|
|
- **Involvierte Klassen**: Accesspoint, SensorStation
|
|
- **Involvierte Klassen**: Accesspoint, SensorStation
|
|
|
|
|
|
|
|
## 3. Klassendiagramm
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
Die Userx-Klasse modelliert den Nutzer auf der Webseite. Er kann bis zu drei Rollen annehmen: USER, GARDENENER und ADMIN. Hat ein Userx die Rolle USER kann er beliebig viele SensorStationen als "UserFavourite" speichern. Userx mit der Rolle GARDENER können beliebig vielen SensorStations zugeteilt sein.
|
|
|
|
|
|
|
|
Die Klasse Accesspoint verwaltet beliebig viele Sensorstationen. Das sendingInterval-Attribut ist jenes Intervall, in dem die SensorDaten übertragen werden soll. Das thresholdInterval-Attribut wird von einem Admin eingestellt und gibt die untere Grenze für das Senden der Sensordaten an. Das wirkliche Sendungsintervall ist also sendingInterval + thresholdInterval. Das Enum AccessPointRole wird für die Kommunikation über HTTP-Basic benötigt.
|
|
|
|
|
|
|
|
Die Entität Sensorstation gehört genau zu einem AccessPoint, hat bis zu einen Gärtner und kann von beliebigen vielen Userx als UserFavourite gespeichert werden. Außerdem hat diese Entität beliebig viele Picture-Entitäten. Weiters gehören zu jeder SensorStation beliebig viele SensorDataTypeInfo-Entitäten und beliebig viele SensorDaten-Entitäten.
|
|
|
|
|
|
|
|
|
Die SensorDataTypeInfo gehört genau zu einer SensorStation. Sie speichert die min- und max-Limits eines bestimmten Typs von Messwerten.
|
|
|
|
|
|
|
|
# 3. Klassendiagramm
|
|
Die SensorData-Entität gehört genau zu einer SensorStation. Neben dem Messwert und dem Typ des Messwertes, werden auch noch der Zeitpunkt der Messwertauslesung und die zu dieser Zeit geltenden min- und max-Limits gespeichert.
|
|
|
|
|
|
|
|

|
|
Die Entität LogInfo stellt den AuditLogger dar. In dieser werden Auslöser, der Zeitpunkt und die Art der Operation gespeichert um später von einem Admin ausgewertet zu werden.
|
|
|
|
|
|
|
|
Die Userx-Klasse modelliert den Nutzer auf der Webseite. Er kann bis zu drei Rollen annehmen. Wenn eine Userx die Rolle USER hat kann er beliebig viele SensorStationen als "UserFavourite" speichern. Userx mit der Rolle Gärtner können keiner oder beliebig vielen SensorStationen zugeteilt sein.
|
|
## 4. SW-Architektur
|
|
|
|
|
|
|
|
Die Klasse Accesspoint hat beliebig viele Sensorstationen, die dieser verwaltet. Das sendingInterval-Attribut ist jenes Intervall, in dem der Gärtner die Sensordaten erhalten möchte. Das thresholdInterval-Attribut wird von dem Admin eingestellt und gibt die untere Grenze für das Senden der Sensordaten an. Das wirkliche Sendungsinterval ist also sendingInterval + thresholdInterval. Das enum AccessPointRole wird für die Kommunikation über HTTP-Basic benötigt.
|
|
### 4.1 Komponentendiagramm
|
|
|
|
|
|
|
|
Die Entität Sensorstation gehört genau zu einem AccessPoint, hat einen oder keinen Gärtner und kann von beliebigen vielen Userx mit der Rolle USER als UserFavourite gespeichert werden. Außerdem hat diese Entität beliebig viele Picture-Entitäten. Weiters gehören zu jeder SensorStation beliebig viele SensorDataTypeInfo-Entitäten und beliebig viele SensorDaten-Entitäten.
|
|

|
|
|
|
|
|
|
|
Die SensorDataTypeInfo gehört genau zu einer SensorStation. Sie speichert die min- und maxLimits eines bestimmten Types von Messwerten.
|
|
### 4.2 Laufzeitdiagramm
|
|
|
|
|
|
|
|
Die SensorDatan-Entität gehört genau zu einer SensorStation. Neben dem Messwert und dem Typ des Messwertes, werden auch noch der Zeitpunkt der Messwertauslesung und die zu dieser Zeit geltenden min- und maxLimits gespeichert.
|
|
**Datenübertragung zwischen Webserver, AccessPoint und SensorStation:**
|
|
|
|
|
|
|
|
Die Entität LogInfo stellt den AuditLogger da. In dieser werden Auslöser, der Zeitpunkt und die Art der Operation gespeichert.
|
|

|
|
|
|
|
|
|
|
# 4. SW-Architektur
|
|
**Einrichtung der Systeme:**
|
|
|
|
|
|
|
|
## 4.1 Komponentendiagramm
|
|

|
|
|

|
|
|
|
|
|
|
|
|
|
[¹]: https://arc42.org (Zugriff: 17.02.2023)
|
|
### 4.3 Fachlicher Kontext
|
|
|
|
|
|
|
|
## 4.2 Laufzeitdiagramm
|
|
Die folgende Abbildung zeigt die wichtigsten Inputs und Outputs von PlantCare - sowohl die menschlichen Nutzer als auch die technische Umgebung
|
|
|
**Ablauf Datenübertragung zwischen den Systemen:**
|
|
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
|
### 4.4 Technischer Kontext
|
|
|
|
|
|
|
|
**Ablauf Einrichtung der Systeme:**
|
|
Das technische Kontextdiagramm zeigt die mit dem Webserver verbundenen Kanäle.
|
|
|
|
|
|
|
|

|
|

|
|
|
|
|
|
|
|
# 5. Ausfallsicherheit
|
|
### 4.5 Lösungsstrategie
|
|
|
|
|
|
|
|
**T1: Eingeschränkte Kommunikation zwischen Arduino Sensorstationen und Minirechner**
|
|
1. Aufbau des Webservers auf dem zur Verfügung gestellten Skelleton-Projekt
|
|
|
- Daten, die von dem Arduino kommen, werden nicht in die Datenbank aufgenommen, da sie u.U. verfälscht sind
|
|
2. Implementierung der Web-Oberfläche mittels Spring-Boot und Primefaces-Templates
|
|
|
- Warten, bis Verbindung besser wird
|
|
3. Realisierung der Datenbank des Webservers mittels mySQL
|
|
|
|
4. Implementierung des AccessPoints mit Python-Code
|
|
|
|
5. Verbindung zwischen Webserver und AccessPoint mittels REST-Controller
|
|
|
|
6. Realisierung der Datenbank des AccessPoints mittels SQLite
|
|
|
|
7. Implementierung Der SensorStation mit C-Code
|
|
|
|
8. Verbindung zwischen SensorStation und AccessPoint mittels Bluetooth LE
|
|
|
|
|
|
|
|
**T2: Unerwarteter Neustart eines Minirechners (Raspberry)**
|
|
### 4.6 Bausteinsicht
|
|
|
- muss gewährleistet sein, dass alle Sensorstationen, die vor dem Neustart verbunden waren, wieder eine Verbindung aufgebaut wird
|
|
|
|
|
- Skripte zur automatischen Wiederherstellung der Verbindung
|
|
|
|
|
- Daten, die in dieser Zeit zum Raspberry gesendet wurden, sind verloren
|
|
|
|
|
|
|
|
|
|
**T3: Temporärer Ausfall der Kommunikationswege zwischen Minirechnern und zentralem Backend**
|
|
Im folgenden ist die statische Zerlegung des Systems in Bausteine sowie deren Abhängigkeiten gelistet.
|
|
|
- Daten (bis zu einem Gewissen Punkt) buffern bis Verbindung wiederhergestellt wurde
|
|
|
|
|
- automatische Wiederherstellung der Verbindung
|
|
|
|
|
|
|
|
|
|
**T4: Kurzfristiger Ausfall des zentralen Backends**
|
|

|
|
|
- Benachrichtigung alle Benutzer über den den Ausfall
|
|
|
|
|
|
|
|
|
|
**T5: Ausfall der Sensorstation**
|
|
## 5. Ausfallssicherheit
|
|
|
- Verbindung zum AccessPoint ist eingeschränkt, aber Stromversorgung ist vorhanden:
|
|
|
|
|
optisches und akustisches Signal (blinken)
|
|
|
|
|
- kompletter Ausfall des Strom:
|
|
|
|
|
AccessPoint sendet Nachricht an den Webserver, ein Admin sieht diese Fehlermeldung und muss dann die Sensorstation warten und gegebenenfalls neu einrichten.
|
|
|
|
|
|
|
|
|
|
# 6. Ausgewählte Technologien
|
|
**T1: Eingeschränkte Kommunikation zwischen Sensorstationen und AccessPoint**
|
|
|
|
|
|
|
|
- Daten, die von dem Arduino kommen, werden nicht in die Datenbank aufgenommen, da sie u.U. verfälscht sind
|
|
|
|
- Warten, bis Verbindung besser wird
|
|
|
|
|
|
|
|
**T2: Unerwarteter Neustart eines AccessPoint**
|
|
|
|
|
|
|
|
- Die entsprechenden Programme werden bei Start des AccessPoint automatisch gestartet
|
|
|
|
- Alle Sensorstationen, die vor dem Neustart verbunden waren, bauen wieder eine Verbindung auf
|
|
|
|
- Skript zur automatischen Wiederherstellung der Verbindung
|
|
|
|
- Daten, die in dieser Zeit zum Raspberry gesendet wurden, sind verloren
|
|
|
|
|
|
|
|
**T3: Temporärer Ausfall der Kommunikationswege zwischen AccessPoint und Webserver**
|
|
|
|
|
|
|
|
- Daten werden (bis zu einem Gewissen Punkt) gepuffert bis Verbindung wiederhergestellt wurde
|
|
|
|
- Automatische Wiederherstellung der Verbindung
|
|
|
|
|
|
|
|
**T4: Ausfall der Sensorstation**
|
|
|
|
|
|
|
|
- Verbindung zum AccessPoint ist eingeschränkt, aber Stromversorgung ist vorhanden: optisches und akustisches Signal (blinken)
|
|
|
|
- Kompletter Ausfall: Admin sieht am entsprechenden Dashboard, dass die SensorStation nicht mehr verbunden ist.
|
|
|
|
|
|
|
|
|
|
|
|
## 6. Ausgewählte Technologien
|
|
|
|
|
|
|
|
**Java:**
|
|
**Java:**
|
|
|
Der Webserver wird mit der objektrelationalen Programmiersprache Java implementiert.
|
|
Der Webserver wird mit der objektrelationalen Programmiersprache Java implementiert.
|
| ... | @@ -328,7 +350,7 @@ Primefaces ist ein Framework und erweitert eine JSF-Implementierung. |
... | @@ -328,7 +350,7 @@ Primefaces ist ein Framework und erweitert eine JSF-Implementierung. |
|
|
**Apache Maven:**
|
|
**Apache Maven:**
|
|
|
Apache Maven ist für das Build-Management zuständig. Mit dieser Technologie werden Java-Programme verwaltet.
|
|
Apache Maven ist für das Build-Management zuständig. Mit dieser Technologie werden Java-Programme verwaltet.
|
|
|
|
|
|
|
|
# 7. GUI Prototyp
|
|
## 7. GUI Prototyp
|
|
|
|
|
|
|
|
**Login-Page für alle Rollen:**
|
|
**Login-Page für alle Rollen:**
|
|
|
|
|
|
| ... | @@ -363,9 +385,9 @@ Apache Maven ist für das Build-Management zuständig. Mit dieser Technologie we |
... | @@ -363,9 +385,9 @@ Apache Maven ist für das Build-Management zuständig. Mit dieser Technologie we |
|
|

|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
# 8. Projektplan
|
|
## 8. Projektplan
|
|
|
|
|
|
|
|
## 8.1 Verantwortlichkeiten
|
|
### 8.1 Verantwortlichkeiten
|
|
|
|
|
|
|
|
**Marco Cotrotzo:**
|
|
**Marco Cotrotzo:**
|
|
|
- REST API mit Spring Framework,
|
|
- REST API mit Spring Framework,
|
| ... | @@ -392,22 +414,19 @@ Apache Maven ist für das Build-Management zuständig. Mit dieser Technologie we |
... | @@ -392,22 +414,19 @@ Apache Maven ist für das Build-Management zuständig. Mit dieser Technologie we |
|
|
- Testdrehbücher und Abnahmetests
|
|
- Testdrehbücher und Abnahmetests
|
|
|
- Java Webapp
|
|
- Java Webapp
|
|
|
|
|
|
|
|
## 8.2 Milestones
|
|
### 8.2 Milestones
|
|
|
|
|
|
|
|
- 16. 3 Einrichtung Git-Repository
|
|
- 16.3. Einrichtung Git-Repository
|
|
|
- 16.3 Konzept fertig
|
|
- 16.3. Konzept fertig
|
|
|
- 23.3 Implementierung fachliche Komponenten (Models) zwischen Raspberry & Webserver
|
|
- 23.3. Implementierung fachliche Komponenten (Models) zwischen Raspberry & Webserver
|
|
|
- 23.3 Steckplan fertig
|
|
- 23.3. Steckplan fertig
|
|
|
- 30.3 REST-Schnittstellen
|
|
- 30.3. REST-Schnittstellen
|
|
|
- 6.4 Bluetooth Verbindung zw. Arduino & Raspberry
|
|
- 06.4. Bluetooth Verbindung zw. Arduino & Raspberry
|
|
|
- 20.4 Hardwareaufbau fertig
|
|
- 20.4. Hardwareaufbau fertig
|
|
|
- 10.5 Lauffähiges Projekt
|
|
- 10.5. Lauffähiges Projekt
|
|
|
- 18.5 Bugfixes & Implementation
|
|
- 18.5. Bugfixes & Implementation
|
|
|
- 19.5 Lauffähiges Projekt + Präsentation
|
|
- 19.5. Lauffähiges Projekt + Präsentation
|
|
|
- 24. 5 Bugfixes & Implementation
|
|
- 24.5. Bugfixes & Implementation
|
|
|
- 25.5 Abnahmetests
|
|
- 25.5. Abnahmetests
|
|
|
- 20.6 Bugfixes & Dokumentierung (ARC 42)
|
|
- 20.6. Bugfixes & Dokumentierung (ARC 42)
|
|
|
- 22.6 finale Abgabe + Präsentation
|
|
- 22.6. finale Abgabe + Präsentation |
|
|
|
|
\ No newline at end of file |
|
|
```
|
|
|
|
|
|
|
|