Szenarien für den Einsatz von IoT und BigData: Luftfeuchtigkeits- und Temperatursensor (Teil 3)

von Manuel Breitfeld

In diesem Teil der Blog-Serie "Szenarien für den Einsatz von IoT und BigData" betrachten wir Sensoren für Luftfeuchtigkeit und Temperatur, welche für unser Projekt Werte aus verschiedenen Räumen unseres Büros liefern.

Die Innen-Sensoren

Als Sensoren in unseren Räumen haben wir zwei verschiedene Modelle im Einsatz. Beide können folgende Werte messen:

  • Temperatur
  • Luftfeuchtigkeit
Wir benutzen die Sensoren SHT21 und DHT22. Letzterer ist deutlich preiswerter und erscheint uns in seiner Funktionsweise zuverlässiger.
Beide Sensoren arbeiten im Prinzip gleich: Über einen Aufruf eines entsprechenden Programms werden die aktuellen Werte zu Temperatur und Luftfeuchtigkeit auf der Kommandozeile ausgegeben.
Das folgende Bild zeigt einen unserer Raspberry PIs mit einem DHT22 Sensor.

Auslesen der Daten - Sensor SHT21

Um Daten des SHT21 auslesen zu können, muss zuerst der I2C-Treiber aktiviert werden. Ausführlich ist das beim Hersteller selbst beschrieben. Im Prinzip genügt es, den auf einem Raspberry PI bereits enthaltenen Treiber i2c-dev zu aktivieren. Dazu fügt man i2c-dev am Ende der Datei /etc/modules hinzu.
Um Inkompatibilitäten mit anderen Treibern zu vermeiden, muss die Zeile blacklist i2c-bcm2708 in der Datei /etc/modprobe.d/raspi-blacklist.conf auskommentiert werden.
Zuletzt folgt Installation des entsprechenden Pakets: sudo apt-get install i2c-tools && sudo adduser pi i2c

Nach einem Neustart des Raspberry PI können die Sensorwerte über das mitgelieferte Tool sht21 ausgelesen werden:
$ sudo /opt/Raspi-SHT21-V3_0_0/sht21 L
temperature=22.1
humidity=47

Auslesen der Daten - Sensor DHT22

Um Daten des DHT22 auslesen zu können, müssen keine zusätzlichen Treiber installiert werden. Mit der Kombination aus zwei auf github verfügbaren Tools können die GPIO-Pins angesprochen und die Sensorwerte ausgelesen werden.

Installation der WiringPI-Bibliothek:

$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi && ./build

Installation der Auslese-Tools:

$ git clone https://github.com/technion/lol_dht22
$ cd lol_dht22 && ./configure && make

Sofort können die aktuellen Werte ausgelesen werden. Eine Ausgabe sieht wie folgt aus:

$ sudo /opt/lol_dht22/loldht 7
Raspberry Pi wiringPi DHT22 reader
www.lolware.net
Data not good, skip
Humidity = 47.60 % Temperature = 22.10 *C

Zwischenspeicherung der Daten mit Spring Boot

Wie auch schon im zweiten Teil dieser Blog-Serie beschrieben wurde, werden die Daten in einer Spring Boot Applikation zwischengespeichert und als JSON anderen Applikationen zur Verfügung gestellt. Während in einem der nächsten Teile dieser Blog-Serie näher auf diese Spring Boot Applikation eingegangen wird, möchte ich kurz beschreiben, wie innerhalb von Java obige Tools / Kommandos aufgerufen werden können.

Am Beispiel des SHT21-Sensor sieht ein Code-Snippet wie folgt aus:

SensorInfo s = new SensorInfo();
Process process = Runtime.getRuntime().exec("sudo sht21 L");
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
 if (line.startsWith("temperature=")) {
  temperature = getParsedNumber(line, "temperature=");
  valid = true;
 }
 if (line.startsWith("humidity=")) {
  humidity = getParsedNumber(line, "humidity=");
  valid = true;
 }
}
s.setTemperature(temperature);
s.setHumidity(humidity);
s.setValid(valid);

Aus Gründen der Übersichtlichkeit wurde für diesen Blog-Post die Fehlerbehandlung entfernt. Natürlich müssen Ausnahmen behandelt und Streams geschlossen werden.

Ausblick

In den nächsten Teilen dieser Blog-Serie zeigen wir, was die bereits vorgestellten Raspberry PIs mit Temperatur- und Luftfeuchttigkeitssensoren sowie der angeschlossenen Wetterstation den ganzen Tag messen, wie das in diesem Blog-Post erwähnte Java-Objekt "SensorInfo" innerhalb der Spring Boot Applikation einfach per JSON bereitgestellt werden kann und wie man dann mittels Elasticsearch, D3 und R Daten und Grafiken sammeln, auswerten sowie aufbereiten kann.

Die Serie gliedert sich folgendermaßen: 

Kategorien: Big DataElasticsearchInternet of ThingsSpring Boot

Zurück