Mein aktuelles „Spielprojekt“ beschäftigt sich mit IoT-Technologien, aber auch mal wieder mit Python und einer mobilen App auf Flutter-Basis.
Interessante Aspekte
Für einzelne der Komponenten werde ich vielleicht auch nochmal separat was schreiben:
1. Datenerfassung mit Arduino bzw. D1 Mini
- Ein einfaches IoT-Projekt mit Wemos D1 Mini (basiert auf dem ESP8266) und einem SHT3x-Sensor:
- Hier werden im Minutenintervall Temperatur und Luftfeuchtigkeit ausgelesen und via MQTT an die IoT-Plattform ThingSpeak geschickt.
- Spannend fand ich hierbei vor allem, wie einfach hier fast alles auf Anhieb geklappt hat – auch die Verbindung zum MQTT-Server.
- Hier der Quellcode, der auf dem Wemos läuft.
2. ThingSpeak
- Mit Hilfe von ThingSpeak und den Anleitungen und Hilfen von dort konnte ich sehr einfach und schnell meine ersten erfassten Daten empfangen und visualisieren.
- Nun habe ich zwei Sensoren laufen:
https://thingspeak.com/channels/1026138
https://thingspeak.com/channels/1036269
3. Berechnungen in „mqtt-fetcher“ (Python)
- Dieser holt alle Werte von ThingSpeak (ebenfalls via MQTT) und gibt sie weiter: Sowohl an mein internes Monitoring-System Zabbix als auch an die interne MQTT.
- Dabei werden die Daten so aufbereitet, dass die App alles hat, was sie „braucht“:
- Anzuzeigender aktueller Temperatur- bzw. Luftfeuchte-Wert.
- Jeweils ein Trend („Tendenz“).
- Historische Messwerte über 2 Stunden für eine Graphen-Darstellung in der App.
- Alle Werte werden dabei mit MQTTs retained-Flag geschickt, sodass jeder Client, der sich frisch anmeldet, sofort jeweils die aktuellste Version der Nachricht bekommt. So kann der Client sehr schnell aktuelle Werte darstellen, ohne erst auf die nächsten Messwerte warten zu müssen.
- Die der Ermittlung der aktuellen Werte ist durchaus nicht ganz trivial: Die Messwerte „zittern“ immer ein wenig, sodass eine Mittwelwert-Bildung über ein paar Minuten sinnvoll ist. Außerdem habe ich mich entschieden von den Mittelwerten der beiden Sensoren immer den kleineren zu verwenden, um den Effekt etwaiger Sonneneinstrahlung zu verkleinern. Auch die Trend-Ermittlung ist nicht ganz einfach…
-
Dies war für mich eine Übung sowohl in Python (damit habe ich schon lange nichts mehr gemacht) als auch mit MQTT und diversen Python-Bibiliotheken:
- paho.mqtt.client für die MQTT-Kommunikation.
- pickle um die Daten persistent zu speichern (sehr simpel).
- py-abbix für die Übermittlung der Daten an Zabbix.
4. MQTT-Serer (Mosquitto)
- Ein eigener MQTT-Server ist mit Hilfe von Mosquitto und dem entsprechenden Docker-Image wirklich nicht schwierig.
5. Darstellung in der Flutter-App
- Flutter ist und bleibt mein Favorit für mobile Apps.
- Den Quelle-Code werde ich noch veröffentlichen.
- Hier hab ich schon mal geschrieben, warum ich Flutter mag.
- Flutter-Homepage.
Ausblick
Alles zusammen ist das für mich „ein großer Spaß“. Mehrere verschiedene Technologien und Denkweisen – auch Hardware ist dabei 🙂
Ich stelle mir vor, die App in die AppStores zu bringen, damit andere das ganze nachbauen können. Vielleicht ergibt sich dadurch ja sowas wie ein „Netzwerk“ von Sensoren und die App könnte erweitert werden, sodass immer ein Sensor in der Nähe gewählt wird. Das ist aber vielleicht Utopie…