Szenarien für den Einsatz von IoT und BigData: Luftfeuchtigkeits- und Temperatursensor (Teil 3)
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
Auslesen der Daten - Sensor SHT21
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: