In diesem Teil der Serie erstellen wir einen automatisierten Datenlogger, der Sensordaten regelmäßig erfasst und in der SQLite‑Datenbank speichert. Die Ausführung übernimmt ein Cronjob auf dem Raspberry Pi.
1. Ziel dieses Artikels
Damit unsere Gebäudedaten später sinnvoll visualisiert werden können, müssen sie regelmäßig erfasst werden.
In diesem Artikel:
- erstellen wir einen robusten Python‑Datenlogger
- speichern Messwerte automatisch in SQLite
- richten einen Cronjob ein, der das Skript z. B. alle 5 Minuten ausführt
Damit läuft die Datenerfassung komplett im Hintergrund.
2. Datenlogger‑Skript erstellen
Wir erweitern das Skript aus Artikel 3 und machen es robuster.
Erstelle die Datei:
nano data_logger.py
Inhalt:
# data_logger.py
import sqlite3
from datetime import datetime
import Adafruit_DHT
# Sensor auswählen: DHT11 oder DHT22
# sensor = Adafruit_DHT.DHT11
sensor = Adafruit_DHT.DHT22
PIN = 4 # GPIO 4
def log_measurement():
# Sensor auslesen
humidity, temperature = Adafruit_DHT.read_retry(sensor, PIN)
if humidity is None or temperature is None:
print("Fehler beim Auslesen des Sensors")
return
# Zeitstempel exakt wie in db_init.py
timestamp = datetime.now()
# In Datenbank schreiben
connection = sqlite3.connect("sensor_data.db")
cursor = connection.cursor()
cursor.execute("""
INSERT INTO measurements (timestamp, temperature, humidity)
VALUES (?, ?, ?)
""", (timestamp, temperature, humidity))
connection.commit()
connection.close()
print(f"Gespeichert: {timestamp} | {temperature:.1f}°C | {humidity:.1f}%")
if __name__ == "__main__":
log_measurement()
3. Testlauf
python3 data_logger.py
Wenn alles funktioniert, erscheint:
Gespeichert: 21.4°C / 45.2%
4. Cronjob einrichten
Cronjobs sind ideal für regelmäßige Aufgaben wie Datenerfassung.
Cron‑Editor öffnen:
crontab -e
Folgende Zeile einfügen (alle 5 Minuten):
*/5 * * * * /usr/bin/python3 /home/pi/data_logger.py >> /home/pi/logger.log 2>&1
Erklärung:
*/5→ alle 5 Minutenpython3→ Python‑Interpreterdata_logger.py→ unser Skriptlogger.log→ Logdatei zur Fehlersuche
5. Cronjob testen
Liste aller Cronjobs anzeigen:
crontab -l
Nach 5–10 Minuten prüfen, ob neue Daten in der Datenbank stehen:
sqlite3 sensor_data.db "SELECT * FROM measurements ORDER BY id DESC LIMIT 5;"
6. Typische Fehler & Lösungen
❌ Cronjob läuft nicht
- Falscher Pfad zu Python
- Falscher Pfad zum Skript
- Skript nicht ausführbar →
chmod +x data_logger.py
❌ „database is locked“
→ Cronjob läuft zu häufig → Intervall erhöhen (z. B. alle 2–5 Minuten).
❌ Keine Werte
→ Sensor nicht stabil → DHT22 braucht manchmal 1–2 Sekunden nach Boot.
7. Nächster Schritt
Im nächsten Artikel erweitern wir das System um weitere Sensoren wie CO₂, Helligkeit oder Bewegung – modular und flexibel.