Projektplanung - pigtastic/UBQ-Smarthome GitHub Wiki

Projektidee

Da es mittlerweile viele verschiedene Protokolle und dazugehörige Produkte auf dem Smarthome-Markt gibt soll eine Anwendung programmiert werden, die sich leicht um neue Übertragungsprotokolle erweitern lässt und diese zu einer einheitliche Schnittstelle zusammenfasst. Zudem soll ein Userinterface geschaffen werden, über das die vorhanden Geräte angezeigt und gesteuert werden können. Es soll dem Anwender möglich sein mit minimalsten technischen Kenntnissen das Produkt einzurichten und smarte Geräte hinzufügen zu können.

Ziel des Projekts

  • MQTT als bekanntes Protokoll für unsere Plattform
  • Angular Client
  • GraphQl im Backend, da minimale Daten und maximal Flexibilität

Grober Projektentwurf

Zu Beginn des Projekts haben wir uns darüber ausgetauscht, wer von uns in welchen Bereichen bereits Erfahrungen sammeln konnte. Da Marcel und Marvin bereits viele Erfahrungen in der Backend-Entwicklung hatten und es sie auch interessierte, arbeiteten sie viel daran. Leia arbeitete sich hingegen in Angular und seine Funktionsweisen ein und widmete sich eher dem Frontend. Für uns war es wichtig, dass sich jeder in seiner Rolle wohlfühlt und Spaß an dem Projekt und der gemeinsamen Realisierung haben wird.

Zum Austausch erstellten wir uns einen kostenlosen Slack-Workspace. Dieser bot uns die Möglichkeit, viele verschiedene Kanäle zu erstellen und in jedem Kanal spezifische projektbezogene Inhalte auszutauschen. Somit fiel es uns auch im Nachhinein leicht, gewünschte Informationen schnell und einfach wiederzufinden. Ein weiterer Vorteil an Slack war es, dass wir auch problemlos Dateien (beispielsweise Bilder oder PDFs) schicken und speichern konnten. Durch diese Funktionen und noch einige mehr war Slack für uns eine gute und unkomplizierte Plattform zum gemeinsamen Austausch.

Zur Übersicht unserer bereits erledigten und bevorstehenden Aufgaben und des darin enthaltenen Codes entschieden wir uns für eine Organisation über GitHub. Für uns war die Planung des Projekts über GitHub bequem und einfach. Durch unsere erstellten Milestones und Tickets konnte man den Stand des Projekts und die Aufgaben, die noch bevorstanden, schnell und ohne Weiteres ablesen. Auch der Austausch des Codes war sehr komfortabel, da er über GitHub und die angebotenen Funktionen stattfand.

Nachdem für uns klar war, wie wir uns austauschen möchten, machten wir uns an unseren groben Projektentwurf. Unser erste grobe Systemarchitektur bestand aus: Client, Embedded MQTT Server und Backend Server.

Umsetzungsübersicht

Während des Projekts arbeiteten wir viel mit Shellys, um unsere Funktionalitäten zu testen. Das hatte den Hintergrund, dass einige von uns bereits solche Geräte im privaten Rahmen besaßen und auch schon viel damit herumexperimentiert hatten. Somit nahmen sie eine wichtige Rolle in unserem Projekt und dessen Testzwecken ein.

Weitere Tests fanden mit einem ESP8266 statt. Diesen verbanden wir mit einem Temperatursensor und entwickelten eine passende Custom Firmware. Genutzt wurde er, um Temperaturen in einem Wohnzimmer zu messen. Unser Ziel war es, diesen ebenfalls mit Gaia zu vernetzen, um die Kompatibilität verschiedener Endgeräte zu erproben.

Um die Daten unserer Plattform zu speichern, entschieden wir uns für eine MongoDB. Dahinter steckte die Überlegung, dass unsere Architekturen bereits sehr JSON-orientiert aufgebaut waren und MongoDB uns daher eine effiziente Integration bot. Für den Datenaustausch vom Client zur API entschieden wir uns für GraphQL. GraphQL stellte uns die Möglichkeit bereit, nur die benötigten Datensätze abzurufen und zu modifizieren, was sich positiv auf unsere Performance auswirkte.

Unsere Plattform läuft über einen Apollo Server. Dieser ist für die Verarbeitung der Daten und der Anbindung zur Datenbank, sowie die Handhabung der Protokollhändler zuständig.

Dank eines Docker Images kann das die gesamte Implementierung einfach auf lokalen Geräten installiert werden. Somit brauchen die Nutzer keine tiefgreifende Kenntnisse in der Verwaltung von Servern, um Gaia zu nutzen.

Zeitplan

Wir haben uns dazu entschieden, während des Projekts mit Scrum zu arbeiten. Für uns schien eine agile Entwicklungsmethode sinnvoller zu sein, da wir uns auf unsere Ideen während des Entwicklungsprozesses einlassen wollten. Es war auf jeden Fall sehr bereichernd flexibel an Gaia zu arbeiten, da uns einige unserer Features während des Entwicklungsprozesses eingefallen sind und wir diese nach unseren Bedürfnissen implementieren konnten.

Auf der anderen Seite gab es auch wenige Features bei welchen wir uns vom Aufwand her verschätzt hatten und welche leider nicht so einfach zu realisieren waren wie gedacht. Auch da hat uns die agile Arbeitsweise weitergeholfen, da wir diese Features einfach weglassen oder ersetzen konnten. Unsere Sprints waren meist zwei Wochen lang. Mittwochs haben wir uns im Rahmen der Vorlesung zu einem Weekly getroffen. Tägliche treffen waren aufgrund anderer Projekte nicht möglich. Sofern möglich haben wir uns virtuell getroffen um aufkommende Fragen beim Programmieren mit kürzeren Wegen abzuklären. Bei komplexeren Aufgaben nutzten wir auch die Möglichkeit des Pair-Programming. Nach jedem Sprintende setzten wir uns neue Ziele, welche wir in dem bevorstehendem Sprint erreichen wollten. Diese Ziele orientierten wir an unseren Meilensteinen (Epics), welche wir uns am Anfang des Projektes zurechtgelegt hatten. Unsere Epics hatten uns vor allem dabei geholfen, eine Orientierung zu haben, welche Punkte uns noch wichtig sind und was uns noch alles bevorsteht. Da Github die Epics nur für Premium Nutzer bereitstellt haben wir die Meilensteine als Epics genutzt.

Wir haben sie wie folgt festgelegt:

Unsere Meilensteine für die Frontend-Entwicklung:

Meilensteine der Backend-Entwicklung: