{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreihpdx5qwhw4acga3lcanwfgpz5k3ynqyqijoaezk64moc32hl4sc4",
"uri": "at://did:plc:nkxz2ojdvmieg2nhphvputvp/app.bsky.feed.post/3mmmmseensnu2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreib6fkdp46ikyzc424ielwn5ew2h23f4if5feu4i4rqezuripijuiu"
},
"mimeType": "image/png",
"size": 935349
},
"description": "Temperatur und Luftfeuchtemessung mit DHT22-Sensor am Raspberry Pi. Python-Code mit Fehlerbehandlung (DHT22 liefert nicht immer beim ersten Lesen), Cron-Automation, Cacti-SNMP-Integration. System seit ueber 11 Jahren stabil im Einsatz.",
"path": "/2014/11/23/temperaturmessung-mit-dem-raspberry-pi-und-dem-dht22/",
"publishedAt": "2026-05-24T18:46:59.000Z",
"site": "https://www.kernel-error.de",
"tags": [
"Cacti",
"DHT22",
"Electronics",
"Embedded",
"HomeLab",
"Maker",
"Python",
"RaspberryPi",
"Sensors",
"Raspberry Pi",
"DHT22 / AM2302",
"Adafruit CircuitPython DHT",
"cacti-temp.tar.gz",
"Grafana",
"Raspberry Pi als Konsolenserver",
"Stromverbrauch messen mit Raspberry Pi, Eltako DSZ12E und Cacti",
"Einfach melden."
],
"textContent": "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.\n\n**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.\n\n### Was du brauchst\n\n * Einen Raspberry Pi — egal welches Modell, solange GPIO-Pins vorhanden sind\n * Einen DHT22 / AM2302 Sensor (2–5 €)\n * Einen 4,7 kΩ Widerstand als Pull-up\n * Drei Kabel\n\n\n\nDie 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.\n\n### Sensor auslesen — Python\n\nAuf einem aktuellen Raspberry Pi OS brauchen wir die Adafruit CircuitPython DHT Bibliothek und libgpiod:\n\n\n sudo apt install python3-pip libgpiod2\n pip3 install adafruit-circuitpython-dht\n\nDann ein kleines Script `/usr/local/bin/read_dht22.py`:\n\n\n #!/usr/bin/env python3\n import adafruit_dht\n import board\n import sys\n\n sensor = adafruit_dht.DHT22(board.D4)\n try:\n print(f\"{sensor.humidity:.1f}\")\n print(f\"{sensor.temperature:.1f}\")\n except RuntimeError:\n sys.exit(1)\n finally:\n sensor.exit()\n\nAusführbar machen und testen:\n\n\n chmod +x /usr/local/bin/read_dht22.py\n /usr/local/bin/read_dht22.py\n 73.9\n 9.3\n\nErste 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.\n\n### Werte per Cron einsammeln\n\nPer Cron-Job jede Minute:\n\n\n * * * * * /var/scripts/getsensor.sh\n\nDas Script `/var/scripts/getsensor.sh`:\n\n\n #!/bin/bash\n /usr/local/bin/read_dht22.py > /home/pi/both.txt 2>/dev/null\n\n while [ ! -s \"/home/pi/both.txt\" ]; do\n sleep 5\n /usr/local/bin/read_dht22.py > /home/pi/both.txt 2>/dev/null\n done\n\n sed '2d' /home/pi/both.txt > /home/pi/humid.txt\n sed '1d' /home/pi/both.txt > /home/pi/temp.txt\n\nWenn 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/`.\n\n### Ab in den Cacti — SNMP\n\nDamit Cacti die Werte abfragen kann, brauchen wir SNMP auf dem Pi:\n\n\n sudo apt install snmpd snmp\n\nIn 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:\n\n\n pass .1.3.6.1.2.1.25.1.8.1 /bin/sh /usr/local/bin/humid\n pass .1.3.6.1.2.1.25.1.8.2 /bin/sh /usr/local/bin/temp\n\nDie beiden Scripts müssen drei Zeilen ausgeben — die OID, den Datentyp und den Wert:\n\n`/usr/local/bin/temp`:\n\n\n #!/bin/bash\n echo .1.3.6.1.2.1.25.1.8.2\n echo gauge\n cat /home/pi/temp.txt\n\n`/usr/local/bin/humid`:\n\n\n #!/bin/bash\n echo .1.3.6.1.2.1.25.1.8.1\n echo gauge\n cat /home/pi/humid.txt\n\nTest:\n\n\n snmpget -v2c -c public localhost .1.3.6.1.2.1.25.1.8.1\n iso.3.6.1.2.1.25.1.8.1 = Gauge32: 76\n\n snmpget -v2c -c public localhost .1.3.6.1.2.1.25.1.8.2\n iso.3.6.1.2.1.25.1.8.2 = Gauge32: 9\n\nDamit 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\n\n* * *\n\n### Hinweise\n\n**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.\n\n**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.\n\n**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.\n\n* * *\n\n### Der Sensor da draußen\n\nDer Sensor muss nach draußen, vor Wasser geschützt sein, aber nicht hermetisch versiegelt — sonst kann er keine Luftfeuchtigkeit messen.\n\nMeine 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.\n\nDas Ding hängt dort seit 2014. Funktioniert.\n\n* * *\n\nSiehe auch: Raspberry Pi als Konsolenserver, Stromverbrauch messen mit Raspberry Pi, Eltako DSZ12E und Cacti\n\nFragen? Einfach melden.",
"title": "Temperatur und Luftfeuchtigkeit mit DHT22 am Raspberry Pi messen"
}