IoT live - vom Sensor in die Cloud

Umweltdaten messen und visualisieren

24. November 2016, 9:03 Uhr | von Dr. Claus Kühnel
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

Listing 1

 

/#!/bin/bash
DEVICE=/dev/ttyUSB0
...
# USB-WED1-2 connected?
if [ „$(ls $DEVICE)“ ]; then
...
    while read line
    do
#        echo $line
              if [ „$(echo $line | grep ‚$1‘)“ ]; then
              TEMP=“$(echo $line | grep ‚$1‘ | cut -d „;“ -f4)“
              TEMP=$(echo $TEMP | sed -e ‚s#,#.#g‘)
              HUMI=“$(echo $line | grep ‚$1‘ | cut -d „;“ -f12)“
              DATE=“$(date +“%d-%m-%Y“)“
              HOUR=“$(date +“%T“)“
              echo „$DATE $HOUR $TEMP $HUMI“ > usb-wed1-2.dat
              cat usb-wed1-2.dat
              curl --data \
              „api_key=$api_key&field1=$TEMP&field2=$HUMI&field3=$DATE“ \
              https://api.thingspeak.com/update > log 2>&1
...
              fi
    done < $DEVICE
else
    echo „No USB-WED1-2 connected“
fi

 

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.

passend zum Thema

Bild 4: Chronologisches Protokollieren der Messwerte.
Bild 4: Chronologisches Protokollieren der Messwerte.
© Dr. Claus Kühnel

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).

Bild 5: ThingSpeak-Channel »ASH2200@Raspberry Pi«.
Bild 5: ThingSpeak-Channel »ASH2200@Raspberry Pi«.
© Dr. Claus Kühnel

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.

Bild 6: ThingSpeak »Channel Settings«.
Bild 6: ThingSpeak »Channel Settings«.
© Dr. Claus Kühnel

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.

Bild 7: Public View des Channels ASH2200@Raspberry Pi.
Bild 7: Public View des Channels ASH2200@Raspberry Pi.
© Dr. Claus Kühnel

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.


  1. Umweltdaten messen und visualisieren
  2. Listing 1
  3. Listing 2

Lesen Sie mehr zum Thema


Jetzt kostenfreie Newsletter bestellen!