/#!/bin/bash |
Listing 1: Quelltext Shell-Script usb-wde1-2_cloud.sh (Ausschnitt)
Nach dem Einlesen der seriell empfangenen Daten werden die Messdaten aus dem String isoliert und den Variablen TEMP und HUMI zugewiesen.
Diese Daten werden anschließend zusammen mit Datum und Uhrzeit in das File usb-wed1-2.dat geschrieben, um für die spätere Verwendung zur Verfügung zu stehen. In diesem File stehen die jeweils zuletzt gelesenen Daten. Alte Daten werden von Neuen überschrieben. Der komplette Datensatz wird schließlich mit Hilfe von »curl« an einen ThingSpeak-Server gesendet. Bild 4 zeigt die Protokollierung der erhobenen Messwerte über die Console. Nicht gezeigt ist im dargestellten Ausschnitt des Quelltextes das zusätzliche Versenden der Daten über einen Mosquitto-Client an einen MQTT-Server.
ThingSpeak
ThingSpeak ist eine Open-Source-IoT-Anwendung und API zum Speichern und Abrufen der Daten von IoT-Nodes über HTTP, das Internet oder über ein Local Area Network (https://github.com/iobridge/thingspeak).
Zusätzlich zum Speichern und Abrufen numerischer und/oder alphanumerischer Daten erlaubt die ThingSpeak-API auch numerische Datenverarbeitung wie Time-Scaling, Bildung von Mittelwert und Medianwert, Summation und Rundung und anderes mehr. Jeder ThingSpeak-Kanal unterstützt Dateneinträge von bis zu acht Datenfeldern, Breitengrad, Längengrad, Höhe und Status. Die Abfrageergebnisse stehen als JSON-, XML- und CSV-Formate für die Übernahme in Anwendungen zur Verfügung. Die ThingSpeak-Anwendung verfügt zudem über Zeitzonenmanagement, ein Lese-/Schreib-API-Schlüssel-Management und JavaScript-basierte Charts von Highslide Software/Torstein Hønsi.
In [3] wurde ThingSpeak einem Praxistest unterzogen, Pro und Contra können dort nachgelesen werden. Als Fazit bleibt, dass ThingSpeak eine freie und einfach zu benutzende IoT-Plattform ist, gut geeignet für schnelles Prototyping. Für einfache Szenarien bietet ThingSpeak darüber hinaus bereits gute Möglichkeiten zur Datenvisualisierung. ThingSpeaks Grenzen müssen für jede Anwendung separat ausgelotet werden.
Das Beispiel nutzt die gehostete Variante von ThingSpeak, für die ein Account anzulegen ist bevor einem die ThingSpeak-Channels zur freien Verfügung stehen. Der Channel »ASH2200@Raspberry Pi« (Bild 5) übernimmt die Aufzeichnung der ASH2200-Daten.
In den »Channel Settings« sind neben einigen beschreibenden Merkmalen vor allem die Datenfelder zu definieren, die später vom IoT-Knoten über HTTP befüllt werden. Bild 6 zeigt die aus Listing 1 heraus vorzunehmende Zuordnung.
Werden nun die erhobenen Messdaten zum ThingSpeak-Server hochgeladen, lassen sich dort die folgenden Verlaufsdaten generieren. Außerdem wird der Standort der Station angezeigt, vorausgesetzt, in den Channel Settings sind die Koordination eingetragen und »Show Location« aktiviert worden. Damit zeigt sich am Ende die in Bild 7 auszugsweise dargestellte Webseite beim Aufruf von:
https://thingspeak.com/channels/91254
Bedient man sich noch der im jeweiligen Diagramm befindlichen Sprechblase, erhält man ein iFrame zur Einbettung in eine Website.
IP-Kamera
Um die Wettersituation auch leibhaftig festzuhalten, wurde eine IP-Kamera installiert, die ihre Bilddaten periodisch über FTP zur Verfügung stellt. Die verwendete Kamera ist eine Escam Brick QD900WiFi, die mit Schutzart IP66 für den Außeneinsatz geeignet ist (http://www.escam.cn/en/product/product-19-684.html).
Die IP-Kamera lässt sich über ein Webinterface sehr einfach konfigurieren, passend zur Anforderung des Beispiels gibt es eine Snapshot-Option: Jede Minute wird ein Bild geschossen, das über FTP an das hier verwendete Linux-Device gesendet wird. Damit ist kameraseitig bereits alles erledigt.
Hat man keine derart komfortable Kamera, sondern eine einfache USB-Webcam, muss man selbst dafür sorgen, dass die Kamera den Bedingungen des Außeneinsatzes standhält. Die Einbindung einer solchen Kamera ist in [4] detailliert beschrieben, so dass an dieser Stelle der Hinweis genügen mag. Um die Bilddaten auch außerhalb des eigenen Netzes zur Verfügung zu haben, wird das aktuelle Bild auf einen externen Server hochgeladen. Diesen Transfer übernimmt das Shell-Script »transfer_image.sh« (Listing 2). Die einzelnen Schritte sind im Quelltext dokumentiert. Das Script wird als Cronjob einmal pro Minute ausgeführt.