IoT mit Arduino, MQTT, Python und Flutter: Persönliche Temperaturanzeige

Mein aktuelles “Spielprojekt” beschäftigt sich mit IoT-Technologien, aber auch mal wieder mit Python und einer mobilen App auf Flutter-Basis.

Meine Temperatur-IoT-Anwendung

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

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…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.