Mit meinem kleinen Echtzeitsystem möchte ich Luftfeuchtigkeit und Lufttemperatur messen und eine Benachrichtigung erhalten, wenn es bei mir zu Hause zu feucht wird. In Teil 1 habe ich die Inbetriebnahme der Sensoren und die Anbindung an The Things Network beschrieben. Im Teil 2 geht es um die Analyse der Daten und die Benachrichtigung.
In Teil 1 dieser kleinen Blogserie habe ich die Sensor-Nodes per LoRaWAN ans The Things Network (TTN) angebunden. Im TTN selbst gibt es keine Möglichkeit, die Messdaten darzustellen und zu analysieren. Sind die Daten aber erst mal im TTN ist einfach möglich, dafür passende Lösungen anzubinden, die eine entsprechende Integration mit TTN haben.
Für meinen einfachen Anwendungsfall möchte ich eine IoT-Plattform verwenden, in der ich die Daten visualisieren und ohne eigene Programmierung Regeln für Benachrichtigungen definieren kann. Aus der grossen Auswahl habe ich mich für Ubidots entschieden. Ubidots verfügt über eine Gratisversion für persönlichen, nicht-kommerziellen Gebrauch mit einigen Einschränkungen: Man kann maximal drei Geräte nutzen, die Möglichkeiten zur Analyse und Benachrichtigung sind eingeschränkt und Daten werden nur während eines Monats gespeichert.
IoT-Plattform an TTN anbinden
Die Anbindung von Ubidots an TTN ist hier beschrieben und hat problemlos funktioniert. Die einzige kleine Herausforderung ist die Formatierung des Payloads der Sensoren: Die Messwerte werden hexadezimal formatiert übermittelt. Damit eine IoT-Plattform wie Ubidots die Daten verarbeiten kann, muss man diese konvertieren und in unserem Fall nach JSON transformieren. Dafür stellt RAK JavaScript-Code bereit. Diesen Code fügt man in TTN in den sogenannten «Payload Formatter» für den Uplink ein. Für die Verwendung mit Ubidots hat der Code aber noch einen kleinen Mangel: Die Messwerte werden als Strings inklusive Einheit kodiert. Das ist gut lesbar, aber Ubidots möchte gerne Zahlen statt Strings verarbeiten. Am einfachsten verwandelt man die Einheiten in den entsprechenden Zeilen in Kommentare, z.B. so:
myObj.barometer = parseFloat((parseShort(str.substring(4, 8), 16) * 0.1).toFixed(2)) //+ "hPa";//unit:hPa
In TTN kann man den Payload Formatter mit Beispielwerten testen, das ist für das Debugging hilfreich:
Wenn alles korrekt konfiguriert ist, sollten nach der nächsten Messung die Werte in Ubidots erscheinen.
Dashboard erstellen
Um die Daten zu analysieren, baut man sich am besten ein Dashboard. Ubidots stellt dafür Widgets mit verschiedenen Darstellungsformen bereit (und bietet die Möglichkeit, auch eigene Widgets zu entwickeln). Zu diesen Widgets fügt man einfach die abzubildenden Variablen hinzu und legt die Darstellung fest.
Aus den Grafiken zur relativen Luftfeuchtigkeit konnte ich einige interessante Punkte herauslesen, um das Lüften zu optimieren:
- Der Effekt des Lüftens hält weniger lang an, als ich vermutet hatte. Die Luftfeuchtigkeit sinkt stark, steigt dann aber auch schnell wieder an, allerdings nicht mehr bis zum ursprünglichen Wert. Ich leite daraus ab, dass man eher häufiger, aber nur kurz lüften sollte.
- Teilweise kann ich den Anstieg im Tagesverlauf mit Tätigkeiten wie Kochen (trotz Dampfabzug) und Abwaschen korrelieren. Entsprechend lüfte ich nun nach diesen Aktivitäten.
- Die höchsten Werte im Schlafzimmer werden über Nacht erreicht. Schlafen bei offenem Fenster ist aber um die aktuelle Jahreszeit keine Option, da braucht es eine andere Lösung 😉
Benachrichtigungen konfigurieren
Zur Komplettierung meines kleinen Echtzeitsystems möchte ich nun noch eine Benachrichtigung, wenn es zu feucht wird. Was heisst «zu feucht»? Mit einem Pyrometer – einem berührungsfreien Temperaturmesser – sehe ich, dass die Wandtemperatur an den kältesten Stellen aktuell circa 5° C unter der mit den Sensoren gemessenen Raumtemperatur liegt (es ist möglich, dass diese Temperaturdifferenz grösser wird, wenn es draussen noch kälter ist; dann muss ich meine Formel nochmals anpassen). Wenn der Taupunkt unter die Wandtemperatur fällt (oder nahe daran ist), ist es klar zu feucht im Raum und ich möchte eine Benachrichtigung erhalten.
Zur Berechnung des Taupunkts und der Temperaturdifferenz habe ich in Ubidots synthetische Variablen angelegt. Die darin hinterlegten Berechnungen werden ausgeführt, sobald neue Messwerte eintreffen. Der Nachteil ist dabei allerdings, dass die Variablen pro Gerät festegelegt sind. Wenn man viele Sensoren hat, skaliert das schlecht. Zur Berechnung des Taupunkts habe ich eine einfache Näherungslösung verwendet, die für meinen Zweck genügend genau ist.
Mit den synthetischen Variablen kann man in Ubidot einen «Event» einrichten. Das sind konfigurierbare Aktionen, welche von Triggern ausgelöst werden.
Fazit
Der Aufbau meines Mini-IoT-Systems war insgesamt sehr einfach. Die ausgewählten Systeme sind gut integriert und ausführlich dokumentiert. Nur schon durch die Aufzeichnung und Darstellung der Daten zur Luftqualität konnte ich wertvolle Erkenntnisse gewinnen, insbesondere auch im Vergleich zur Nutzung eines klassischen Hygrometers, welcher nur die jeweils aktuellen Werte anzeigt. Eine Bilanz, ob ich mit diesen Informationen das Raumklima wirklich verbessern kann, kann ich dann im Frühling ziehen.