Website

Aufgabe des Servers

Das Ziel des Server war es eine Zentrale Instanz zu erstellen, wo alle Daten gesammelt und Zentral ausgewertet werden können. Auch war es wichtig möglichst kosten effektiv zu arbeiten und Resourcen schonend zu designen.

Verwendete Software & Hoster

Als Software wurde das Python Framework Django eingesetzt mit dem Django REST Framework [6] um eine Api Schnittstelle zu erzeugen. Die auswahl des Hoster fiel auf heroku.com, da Heroku für Entwickler eine Gratis Instanz für Python Websites anbietet welche sich nach 30 Minuten inaktivität automatisch herunter fährt und eine PostgreSQL Datenbank mit 10.000 Zeilen enthält. Der Quellcode ist auf github.com gehostet und mit einem Webhook [9] verbunden, dadurch wird mit jedem Git push auf dem Master Branch der aktuelle Quellcode auf der Heroku Instanz gesendet.

Bestandteile der Server Software

Models - Datenbank

Die Datenbank besteht aus 3 großen Komponenten, dem User, Device (Raspberry Pi) und den täglichen Werten.

Datenbank Model

Datenbank Model

API - Schnittstelle

Die Schnittstelle gibt bei einer leeren anfrage Value anfrage die latitude und longitude Koordinaten des gesicherten Device aus und wenn ein Wert mit gegeben wird, wird in der Datenbank überprüft ob der User mit dem gesendeten Auth Token das Device mit der gesendeten UUID gehört, wenn ja wird der gesendete Wert mit dem gesendeten Datum in der Datenbank gesichert.

View - Ausgabe

Die Ausgabe umfasst 2 Seiten, die Landingpage gibt auf einer Open Street Map [1] grafisch wieder, wo sich die Geräte befinden, die Karte wird automatisch zentriert damit alle Geräte sichtbar sind. Auf der zweiten Seite unter /stats befinden sich Bar Charts [10] welche alle Geräte den täglichen durchschnitts Wert ausgibt.

Deployment

Um ein möglichst einfaches und stabiles deployment zu ermöglichen, wurde das Heroku Django Template [7] als Grundgerüst verwendet und mit hilfe der Dokumentation von Heroku [8]. In Kombination mit einem Github Webhook [9] ist das Deployment ausgeführt, sobald der Master Branch ein git push empfängt.

Außerdem wurde in der Repo Readme ein Heroku_Deployment [11] Button eingesetzt. Um auch dritten die Möglichkeit zu geben, schnell und leicht diese Software auf ihrer Privaten Heroku Instanz einsetzen zu können.

Probleme

Zu kleine Datenbank

Da dei Gratis Instanz von Heroku nur eine 10.000 Zeilen PostgreSQL Datenbank erlaubt war die Datenbank innerhalb der ersten Tagen zu 100% voll und das Design musste Resourcen sparender geändert werden. Dadurch wurden mit jedem Datenupload die Werte zusammengefasst zu einen Tages durchschnitts Wert

Schnittstelle Absichern vor dritten

Das Ziel war das nur die Personen Daten hochladen dürfen, die den richtigen Auth Token + Device UUID senden. Dadurch aber das der Auth Token vom Django REST Framework integriert worden war, war es nur mit hilfe vom ausführlichen lesen der Dokumentation [6] möglich heraus zu finden, welcher User sich hinter welchen Request sich verbirgt.