Meine Wetterstation hatte aufgegeben. Wirklich interessiert haben mich aber eh nur Temperatur und Luftfeuchtigkeit draußen. Das sollte ein Raspberry Pi mit einem DHT22 für zwei Euro hinbekommen — und die Daten landen direkt in meinem Cacti.
Update März 2026 — Dieser Beitrag ist von 2014 und einer meiner ältesten hier im Blog. Die Grundidee — DHT22 an den GPIO, Werte per Cron einsammeln, per SNMP an Cacti liefern — funktioniert unverändert. Ich habe den Beitrag komplett überarbeitet und den Software-Teil auf Python aktualisiert. Die ursprünglich verwendete C-Bibliothek wiringPi wurde 2019 vom Autor offline genommen und lol_dht22 wird nicht mehr gepflegt. Der Ansatz selbst ist zeitlos.
Was du brauchst
- Einen Raspberry Pi — egal welches Modell, solange GPIO-Pins vorhanden sind
- Einen DHT22 / AM2302 Sensor (2–5 €)
- Einen 4,7 kΩ Widerstand als Pull-up
- Drei Kabel
Die Verkabelung ist simpel: VCC an 3,3 V (Pin 1), Data an GPIO 4 (Pin 7), GND an GND (Pin 6). Der 4,7 kΩ Widerstand kommt zwischen VCC und Data. Den handgezeichneten Schaltplan habe ich unten in der Bildergalerie.
Sensor auslesen — Python
Auf einem aktuellen Raspberry Pi OS brauchen wir die Adafruit CircuitPython DHT Bibliothek und libgpiod:
sudo apt install python3-pip libgpiod2 pip3 install adafruit-circuitpython-dht
Dann ein kleines Script /usr/local/bin/read_dht22.py:
#!/usr/bin/env python3
import adafruit_dht
import board
import sys
sensor = adafruit_dht.DHT22(board.D4)
try:
print(f"{sensor.humidity:.1f}")
print(f"{sensor.temperature:.1f}")
except RuntimeError:
sys.exit(1)
finally:
sensor.exit()
Ausführbar machen und testen:
chmod +x /usr/local/bin/read_dht22.py /usr/local/bin/read_dht22.py 73.9 9.3
Erste Zeile Luftfeuchtigkeit, zweite Zeile Temperatur. Der DHT22 liefert nicht bei jedem Aufruf saubere Daten — manchmal kommt ein RuntimeError. Das ist normal bei diesem Sensor, deswegen der try/except und der Exit-Code. board.D4 entspricht GPIO 4, also Pin 7 auf dem Board.
Werte per Cron einsammeln
Per Cron-Job jede Minute:
* * * * * /var/scripts/getsensor.sh
Das Script /var/scripts/getsensor.sh:
#!/bin/bash
/usr/local/bin/read_dht22.py > /home/pi/both.txt 2>/dev/null
while [ ! -s "/home/pi/both.txt" ]; do
sleep 5
/usr/local/bin/read_dht22.py > /home/pi/both.txt 2>/dev/null
done
sed '2d' /home/pi/both.txt > /home/pi/humid.txt
sed '1d' /home/pi/both.txt > /home/pi/temp.txt
Wenn der Sensor beim ersten Versuch keine Daten liefert, probiert das Script alle fünf Sekunden erneut. Am Ende liegen Luftfeuchtigkeit und Temperatur in separaten Textdateien unter /home/pi/.
Ab in den Cacti — SNMP
Damit Cacti die Werte abfragen kann, brauchen wir SNMP auf dem Pi:
sudo apt install snmpd snmp
In der /etc/snmp/snmpd.conf zwei Pass-through OIDs anlegen. Wird eine dieser OIDs per SNMP abgefragt, führt der snmpd das zugehörige Script aus und liefert dessen Ausgabe als Antwort:
pass .1.3.6.1.2.1.25.1.8.1 /bin/sh /usr/local/bin/humid pass .1.3.6.1.2.1.25.1.8.2 /bin/sh /usr/local/bin/temp
Die beiden Scripts müssen drei Zeilen ausgeben — die OID, den Datentyp und den Wert:
/usr/local/bin/temp:
#!/bin/bash echo .1.3.6.1.2.1.25.1.8.2 echo gauge cat /home/pi/temp.txt
/usr/local/bin/humid:
#!/bin/bash echo .1.3.6.1.2.1.25.1.8.1 echo gauge cat /home/pi/humid.txt
Test:
snmpget -v2c -c public localhost .1.3.6.1.2.1.25.1.8.1 iso.3.6.1.2.1.25.1.8.1 = Gauge32: 76 snmpget -v2c -c public localhost .1.3.6.1.2.1.25.1.8.2 iso.3.6.1.2.1.25.1.8.2 = Gauge32: 9
Damit lässt sich im Cacti ein Graph anlegen. Etwas von hinten durch die Brust ins Auge — aber es funktioniert seit über elf Jahren zuverlässig. Die Template-Exports für Cacti gibt es hier: cacti-temp.tar.gz
Hinweise
SNMP-Sicherheit — Im Beispiel steht public als Community-String und SNMPv2c. Für ein Heimnetz reicht das. In einem produktiven Umfeld sollte man SNMPv3 mit Authentifizierung verwenden und den Zugriff per Firewall auf den Cacti-Server beschränken.
Alternative zu Cacti — Wer kein Cacti hat: Grafana mit InfluxDB oder Prometheus wäre die modernere Alternative. Der SNMP-Weg funktioniert dort genauso, alternativ kann man die Werte auch direkt per Telegraf oder einen kleinen Python-Exporter einliefern.
Warum kein wiringPi mehr? — Gordon Henderson hat das wiringPi-Repository 2019 offline genommen. Es gibt Forks auf GitHub, die auf neueren Pi-Modellen funktionieren, aber offiziell wird die Bibliothek nicht mehr gepflegt. Für neue Projekte ist Python mit der Adafruit-Bibliothek der bessere Weg — weniger Kompilieraufwand, bessere Fehlerbehandlung und aktive Wartung.
Der Sensor da draußen
Der Sensor muss nach draußen, vor Wasser geschützt sein, aber nicht hermetisch versiegelt — sonst kann er keine Luftfeuchtigkeit messen.
Meine Lösung: Ein PVC-Rohr, den Sensor dort mit etwas Silikon eingeklebt, eine Seite mit Deckel verschlossen. So kann kein Wasser an den Sensor laufen, Luft kommt aber noch ran. Angebracht am Pfosten der Satellitenschüssel — dort oben steht die Luft selten, es kommt niemand ran und es fällt nicht auf.
Das Ding hängt dort seit 2014. Funktioniert.
Siehe auch: Raspberry Pi als Konsolenserver
Fragen? Einfach melden.



















