DHT22 Luftfeuchte an Check MK übermitteln
Um die Luftfeuchtigkeit z.B. in einem Serverraum zu messen und die Messwerte von einem Monitoringsystem wie z.B. Check MK auszuwerten, dafür gibt es gar nicht so viele kostengünstige Lösungen. Eine Lösung, die mir spontan in den Sinn kam, ist einen DHT22 oder DHT11 per OneWire zu verbinden und auszuwerten. Da habe ich aber leider falsch gedacht, denn bei die beiden Luftfeuchtesensoren übermitteln ihre Daten zwar per OneWire, nur halten sie sich nicht an das Protokoll, das Maxim bei z.B. dem 1-WireUSB Adapter vorgibt.
Auf dem Weg zu einer Lösung bin ich über eine Anleitung von Roland Baer gestolpert. Bei dieser Lösung wird ein Arduino Nano verwendet, um die Messwerte eines DHT22 oder DHT11 zu erfassen und per USB zu übermittel. - Da ich noch einen Arduino Nano und eine Steckplatine in meiner Bastelkiste rumliegen hatte, lag ein Nachbau recht nahe.
Wie man sieht hält sich der Verdrahtungsaufwand in Grenzen. Es sind nur drei Drähte anzuschließen. Ich habe mich für den Feuchtesensor mit Anschlussdrähten enschieden. Hier die Anschlussbezeichnungen:
Der rote Draht bekommt 5V und wird an Pin 27 vom Arduino Nano angeschlossen.
Der gelbe Draht liefert die Daten und wird an D2 also Pin 5 vom Arduino Nano angeschlossen.
Der schwarze Draht bekommt GND und wird an Pin 4 vom Arduino Nano angeschlossen.
Der Sketch, der ürsprünglich von Philippe Keller stammt sieht wie folgt aus:
/*******************************************************************************************
* Read data from DHT-22 sensor via an arduino nano *
* *
* based on a script by Philippe Keller (www.bastelgarage.ch) *
* *
*******************************************************************************************/
// import used library
#include "DHT.h"
// definitions
#define DHTPIN 2 // pin of the arduino where the sensor is connected to
#define DHTTYPE DHT22 // define the type of sensor (DHT11 or DHT22)
// create instance of DHT
DHT dht(DHTPIN, DHTTYPE, 6);
void setup()
{
Serial.begin(9600);
Serial.println("DHT22 Test-Programm");
dht.begin();
}
void loop()
{
// Wait two seconds between measurements as the sensor will not measure faster
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
// validate values
if (isnan(h) || isnan(t)) {
Serial.println("Error while reading data!");
return;
}
// send data via serial connection to pc
Serial.print("Luftfeuchtigkeit: ");
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperatur: ");
Serial.print(t);
Serial.println("°C");
}
Für das Messen der Luftfeuchte muss die Bibliothek „DHT sensor library“ von Adafruit in der Arduino IDE unter Werkzeuge - Bibliotheken verwalten... hinzugefügt werden.
Nach erfolgreichem compilieren und hochladen dieses Skeches kann man sich die Ausgabe im Seriellen Monitor ansehen. Diesen erreicht man über Werkzeuge - Serieller Monitor.
Localen Check erstellen
Zu aller Erst wird das Arduino Nano mit dem angeschlossenen DHT22 an einen freien Port des Check MK Servers angeschlossen. Per Putty wird eine SSH-Verbindung aufgebaut und dann der Befehl lsusb abgesetzt.
Bereits in der ersten Zeile ist bei mir ein neues Gerät zu erkennen. Ein Wechsel in den Ordner /dev zeigt, dass hier ein neues Gerät mit der Bezeichnung ttyUSB0 erscheint.
Für dieses neue Gerät wird in Check MK ein Script benötigt. Dieses Script wird in
/usr/lib/check_mk_agent/local/90 abgelegt. Das Unterverzeichnis 90 steht dafür, dass dieses Script alle 90 Sekunden ausgeführt wird.
Die Grenzwerte für Warning und Critical können selbstverständlich individuell angepasst werden. Ich habe sie hier etwas hoch eingestellt.
Da im DHT22 auch ein Temperatursensor verbaut ist hier noch das Script zum Abfragen der Temperatur.
Für alle Interessierten stelle ich die drei Scripte zum Herunterladen zu Verfügung:
Selbstverständlich gibt es zu der hier vorgestellten Lösung alternative und fertige Produkte.
https://www.messpc.de/sensor_shell.php
Wie die Abfragescripte bei diesen Produkten aussehen müssen, das kann ich leider nicht sagen. Ich vermute aber, dass die Vorgehensweise ähnlich sein wird.
Bei geschlossenen und klimatisierten Räumen wie z.B. einem Serverraum kann es durchaus sein, dass die Feuchtigkeit von Außen eindringt. Hierzu habe ich auf Wikipedia einen interessanten Artikel gefunden: https://de.wikipedia.org/wiki/Wasserdampfdiffusionswiderstand