Stephan schrieb am 21.05.2024 über...
Die Idee kam mit der Zeit, als ich jährlich einen grossen Wandkalender aus Papier kaufte. So könnte das man doch digitalisieren und noch ein paar zusätzliche Features wie die Messung des Raumklimas und die Anzeige von Wetterdaten einbauen. So kam es schliesslich auch. Ein erstes Mockup ist die Idee welche im Laufe des Projektes verfolgt und umgesetzt wurde.
Mockup des digitalen Wall Calendar. Er soll Kalender, eine Slideshow von ausgewählten eigenen Fotos, Raumklimamessungen und Wettervorhersage enthalten.
Zu beginn wurde eine API mit Hilfe des Python Django Frameworks realisiert, an welchem sich ein HTTP Frontend bedient. Die Services laufen auf einem Debian Linux Server. Später wurde die API als jeweils eine Schnittstelle im IOT-Netzwerk und ein 2. Backend im Netzwerk für die Benutzer aufgeteilt. Dies ermöglicht gleichzeitig eine unabhängig und spezialisierte Aufteilung der Aufgaben und den Mehrwert physikalisch getrennter Netzwerke zwischen IOT-Hardware und dem Hosting der Webseite für die Benutzer. In der API der Sensoren läuft zudem ein Celery Task Scheduler und Pool Worker in Verbindung mit einem RabbitMQ Broker. Aktuell bedienen 4 Temperatur- und Luftfeuchtesensoren die IOT Schnittstelle mit aktuellen Messdaten jeweils im 20 Sekunden Takt.
Architektur des Wall Calendar Systems.
In den Anfängen wurden die Web Services experimentell sogar mit einem Experimenierboard wie eines von Raspberry Pi relativ stabil betrieben. Im Verlauf des Projekts wurden die Back- und Frontends jedoch auf einer Debian 12 Virtual Machine deployed, welche als Host dient. Als 1. Sensor diente zu Beginn ein Arduino Board aus meiner Experimentierkiste. Bis zuletzt wird jetzt allerdings das Wemos D1 Board mit ingegriertem Wifi Shield verwendet, welches sehr gute Stabilität und Performance zeigt. Die Einrichtung in Zusammenhang mit dem Arduino Studio ist etwas Tricky gewesen. Aber einmal eingerichtet, lassen sich die Boards problemlos mit der Programmierumgebung (IDE) verbinden und flashen. Zuerst wurden günstige DHT Temperatur- und Humidity Sensoren benutzt. Nachher wurde auf genauere und performantere Sensoren von Digilent gewechselt, welche mit sehr guter Erfahrung in Betrieb sind.
Links im Bild ist der als Version 1 verwendete Temperatur- und Luftfeuchtesensor. Wie rechts im Bild gezeigt, ist der heute als Version 2 verwendete viel teurere aber umso performantere und genauere Sensor von Digilent im Einsatz.
Als Prototypaufbau wurden als IOT Sensor in den Anfägen ein Arduino Board und ein DHT-Sensor via I2C über das Raspberry Pi ausgelesen. Später sind mehrere Wemos D1 Wifi Shield als Temperatur- und Humidity erfolgreich im Einsatz, welche die Messdaten über WiFi an den Server senden.
Der Aussensensor und das IOT Board wurden als Prototypau in einem Gehäuse untergebracht, welches besonders vor direktem Wassereindringen konzeptioniert und geschützt wurde. Der Sensor wurde an der Unterseite schützend vor direkter Einwirkung von Wasser angebracht, die Umrandung wurde mit einer speziellen Dichtmasse abgedichtet. Das IOT Board ist oben im Becher eingelegt und auch wasserdicht gedichtet und verschlossen.
Die APIs laufen stabil und die Sensoren liefern an den Server fortlaufend ihre Messwerte jeweils alle im Takt von 20 Sekunden. Daten älter von rund 30 Minuten werden auf der Datenbank, welche auf PostgreSQL betrieben wird, bereinigt.
Oben im Terminal läuft die IOT seitige API, parallel läuft dort zudem der Celery Task Scheduler für die Abarbeitung der empfangenen Sensordaten und Bereinigung der Datenbank. Im unteren Terminal ist das Backend für die Bedienung des Frontends im Client Netzwerk aktiv.
Im Frontend werden nun die Slideshow, der Kalender mit Uhrzeit, die 7 tägige Wettervorhersage, Sensormesswerte und sogar CPU und Memory Auslastung des Hosts angezeigt. Zu Beginn wurde das Frontend auf einem Portrait- Bildschirm angezeigt, welcher mit dem Relais via PIR-Sensor für eine gewisse Zeit eingeschaltet wurde, wenn man in Reichweite stand. Unterdessen steht das Frontend jedoch einfach als abrufbare Webseite im Heimnetzwerk zur Verfügung und wird sowohl als normale Webseite im Breitbild als auch als Mobile Device optimierte Webseite auf Smartphone und Tablet angezeigt.