{
  "$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"
}