Entwicklung der Software

Der Datenaustausch zwischen allen Schnittstellen der Wetterstation kann wie folgt visualisiert werden

Bei dieser Wetterstation ist die Datenbank, welche alle erfassten Datenpunkte enthält, das Bindeglied, welche alle unabhängigen Instanzen verbindet:

  1. Sensorik bzw. Erfassungsskript
  2. Back- und Frontend

Datenerhebung

Im laufe dieser ganzen Prozesskette durchlaufen die erfassten Daten mehrere Typänderungen.

Das Sensorscript erfasst die rohen digitalen Daten der Sensoren jeweils über I²C und GPIO. Die implementierten Libraries wandeln die Rohdaten in standardisierte Einheiten um und hinterlegen diese als Integer.  Anschließend werden die Daten über einen MYSQL-Socket übertragen.

Die MYSQL-Datenbank erhält die gesendeten Daten des Scripts als MYSQL-Query und interpretiert diese anhand folgender Typisierung:

SpaltennameTypänderungDatenbanktypSpeicherbedarf
log_datePython Time in MySQL-DatetimeDatetime5 Byte
temp32bit Integer in 8bit (Tiny-) IntegerTinyint1 Byte
humidity32bit Integer in 8bit (Tiny-) IntegerTinyint1 Byte
pressure32bit Integer in 16bit (Small-) IntegerSmallint2 Byte
altitude32bit Integer in 16bit (Small-) IntegerSmallint2 Byte

Die obige Typisierung wurde für die Speichernutzung optimiert. Die Wetterstation kann potenziell mehrere Jahre betrieben werden, daher sind auch nur einige Byte beim Speichern der Daten nicht zu vernachlässigen.

Vor der eigentlichen Fertigstellung der finalen Scripts, wurden zuerst zwei Testsscripts (Repository: /Software/Pi/tests) geschrieben, um die Funktionalität der Sensoren zu validieren.

Datenverarbeitung

Die Wetter-App besteht grundsätzlich aus drei Komponenten:

  • Der API / dem Server (Dem Backend) welches auf Anfrage Daten in JSON bereitstellt
  • Der Benutzeroberfläche (Dem Frontend) welches Daten vom Backend erhält
  • Die Datenbank, die die Sensordaten hält

Diese Struktur ist in der Webentwicklung typisch und auch aufgrund heutigert Sicherheitsanforderungen nicht anders realisierbar, da der Client unter keinen Umständen direkten Zugriff auf die serverseitigen Daten haben sollte.

Daher verbindet die API / Server die Benutzeroberfläche mit der Datenbank. Hierbei stellt das Frontend eine Anfrage an den Server, und der Server validiert diese, prüft auf böswillige Eingaben und liefert die gewünschten Daten in JSON zurück.

Dabei wird im Backend einfaches PHP implementiert, dass die aufgerufene URL (in diesem Fall die API selbst), auf Parameter untersucht und interpretiert diese als MYSQL-Datenabfrage.

So fragt die Benutzeroberfläche die API mit „192.168.178.xxx/api.php?getTemp=current“ und der Server interpretiert dies als Datenbankabfrage in der Form

„SELECT * FROM data_log ORDER BY log_date DESC LIMIT 1“

Um den letzten Eintrag der Datenbank abzurufen und liefert die geholten Informationen als JSON an das Frontend zurück.

Frontend

Benutzeroberfläche im Darkmode

Das Frontend selbst fordert die anzuzeigenden Daten über die API im Backend an und spezifiziert dabei den gewünschten Zeitraum. Dabei werden, wenn nicht anders ausgelöst, die Daten über die API-URL im 15 Sekundentakt angefordert und ersetzt. 

Die Benutzeroberfläche basiert hierbei auf Vue.JS und TailwindCSS, welches clientseitig kompiliert wird und zusätzlich den Pi nicht zusätzlich weiter auslastet. Vue.JS (JavaScript-Framework) ist ein integraler Teil der Web-App, da das Framework das live-patchen bzw. das Austauschen von Daten in Echtzeit ermöglicht und die Weboberfläche ohne erneutes Laden anpasst. Die eigentliche Oberfläche bzw. das Design wurde mit TailwindCSS, einem CSS-Framework umgesetzt.

Entwicklung der Hardware

Zur Realisierung der Wetterstation werden zwei Sensormodule verwendet. Sensormodul 1 (BMP180) verwendet das I²C Interface, ein 2-Wire-Businterface, das die Verkettung mehrerer Module mithilfe von Adressbereichen und einem Takt ermöglicht. Pins SCL (Clock) und SDL (Data) werden belegt. Sensormodul 2 nutzt einen regulären digitalen Ausgang und wird an einen GPIO des Raspberry Pi angeschlossen.

Grundsätzlich ist abstrahierte Realisierung wie folgt:

Technik

Fertige Wetterstation

Die Auswahl der Hardware erfolgt leicht anhand der Anforderungskriterien:

  • Das Projekt soll Luftdruck, Temperatur, Feuchtigkeit und Höhe messen können
  • Neue Datensätze sollen mindestens alle 5 Sekunden verfügbar sein
  • Die genutzte Architektur sollte sowohl die Speicherung der Daten als auch den Webtraffic standhalten können

Nach der Konsultation des Inventars des Makerspace fiel die Wahl der Sensorik schnell auf zwei Module: Idealerweise ein BMP280 und ein DHT22.

Raspberry Pi 3B mit Sensoren

Stattdessen wurde das Projekt jedoch mit einem BMP180 und DHT11 (Ältere Revisionen) realisiert, da die eigentliche Hardware nicht vor Ort war und unser schlechtes Zeitmanagement es nicht mehr erlaubt hat, diese noch mit dem gegebenen Budget zu bestellen. Dies hat zur Folge, dass der Messbereich der relativen Luftfeuchtigkeit eingeschränkt wurde.

Der DHT11 im Vergleich zu seinem Nachfolger kann nur von 20-90% mit -/+ 5% Genauigkeit, der DHT22 hingegen 0-100% -/+ 5%. Es wurde sich jedoch trotz dem eingeschränkten Wertebereich für den DHT11 entschieden, da Deutschland kaum höhere Luftfeuchtigkeit als 90% erreicht.

Der BMP280 löst auf zwei Nachkommastellen genau auf, der BMP180 nur auf eine, was für uns jedoch anreichend ist.

Der Raspberry Pi erfüllt außerdem mit vollem Maße die Kriterien. Der Pi3 kann ohne die Sensordaten erfassen, die Daten in eine MYSQL-Datenbank überführen und nebenbei den Client und das Backend bedienen.

Eine Aufspaltung von Sensorik und Webinterface wurde in Betracht gezogen. Aufgrund der unnötig hohen Komplexität und eventuellen Verbindungsproblemen aber verworfen.

Gehäuse

Beim Entwerfen vom Gehäuse wurde bewusst auf folgende Punkte geachtet:

3D-Modell vom Gehäuse
  • Luft soll zirkulieren können, um korrekte Messwerte auszulesen. Lüftungsschlitze und ein Freiraum zwischen Dach und Wänden sorgen dafür.
  • Die Abwärme des Pi soll die Messwerte nicht verfälschen. Deshalb wurde der Pi räumlich von den Sensoren getrennt.
  • Es soll kein Regenwasser in das Gehäuse gelangen. Dafür sorgt ein Dach mit Überstand.
  • Es soll möglich sein, dass ein Lichtsensor nachgerüstet werden kann. Das Dach wurde deshalb aus lichtdurchlässigem Acryl gemacht.
  • Aufgrund von Zeitknappheit sollte der 3D-Druck möglichst schnell gehen und nicht fehlschlagen. Daher wurde das Design so simpel wie möglich gehalten.
Gehäuse ohne Dach

Das 3D-Modell für das Gehäuse wurde mit dem Programm “Autodesk Fusion 360” erstellt. Der untere Teil des Gehäuses wurde mit einem 3D-Drucker gedruckt. Das Dach wurde mit einem Lasercutter ausgeschnitten.