Artikel 3: Sensordaten in einer SQLite‑Datenbank speichern

In diesem Teil der Serie initialisieren wir die SQLite‑Datenbank für unsere Gebäudedaten‑App. Beim Start der App wird die Datenbank automatisch angelegt und mit Beispieldaten gefüllt. Zusätzlich zeigen wir, wie echte Messwerte vom DHT‑Sensor (DHT11 oder DHT22) in die Datenbank geschrieben werden.

1. Ziel dieses Artikels

Wir richten die Datenbasis für die Visualisierung ein:

  • Die App kann die Datenbank beim Start automatisch initialisieren.
  • Wenn die Datenbank neu ist → Tabelle wird angelegt.
  • Wenn sie bereits existiert → 20 Beispieldatensätze werden eingefügt.
  • Zusätzlich gibt es ein Skript, das echte Sensordaten in die Datenbank schreibt (DHT11 oder DHT22).

2. Datenbank‑Initialisierung für die App

Erstelle die Datei:

nano db_init.py

Inhalt:

import sqlite3
import os
from datetime import datetime, timedelta
import random


def initialize_database():
    db_exists = os.path.exists("sensor_data.db")

    connection = sqlite3.connect("sensor_data.db")
    cursor = connection.cursor()

    cursor.execute("""
        CREATE TABLE IF NOT EXISTS measurements (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            timestamp DATETIME,
            temperature REAL,
            humidity REAL
        )
    """)

    connection.commit()

    # Wenn DB neu → fertig
    if not db_exists:
        print("Datenbank neu erstellt.")
        connection.close()
        return

    # Wenn DB existiert → Beispieldaten einfügen, falls zu wenige vorhanden
    cursor.execute("SELECT COUNT(*) FROM measurements")
    count = cursor.fetchone()[0]

    if count < 20:
        print("Füge 20 Beispieldatensätze hinzu…")
        now = datetime.now()

        for i in range(20):
            ts = now - timedelta(minutes=20 - i)
            temp = round(random.uniform(20.0, 25.0), 1)
            hum = round(random.uniform(40.0, 55.0), 1)

            cursor.execute("""
                INSERT INTO measurements (timestamp, temperature, humidity)
                VALUES (?, ?, ?)
            """, (ts, temp, hum))

        connection.commit()

    connection.close()

Dieser Code wird später in der Kivy‑App (Artikel 4/5) beim Start aufgerufen.

3. Sensordaten vom DHT11/DHT22 in die Datenbank schreiben

Jetzt ergänzen wir wieder den Teil, den du vorher schon drin hattest:
Ein Skript, das echte Messwerte vom Sensor in die Datenbank schreibt.

3.1. Voraussetzungen

  • DHT11 oder DHT22 ist wie in Artikel 2 beschrieben angeschlossen.
  • Bibliothek installiert:
pip3 install Adafruit_DHT

3.2. Skript zum Speichern eines Messwerts

Erstelle die Datei:

nano log_sensor_data.py

Inhalt:

import sqlite3
from datetime import datetime
import Adafruit_DHT

# Sensor wählen: DHT11 oder DHT22
# sensor = Adafruit_DHT.DHT11
sensor = Adafruit_DHT.DHT22

PIN = 4  # GPIO 4


def log_measurement():
    humidity, temperature = Adafruit_DHT.read_retry(sensor, PIN)

    if humidity is None or temperature is None:
        print("Fehler beim Auslesen des Sensors")
        return

    connection = sqlite3.connect("sensor_data.db")
    cursor = connection.cursor()

    timestamp = datetime.now()

    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()

Ausführen:

python3 log_sensor_data.py

Bei jedem Aufruf wird ein neuer Messwert in der Tabelle measurements gespeichert.

4. Daten prüfen

Zum schnellen Check über das Terminal:

sqlite3 sensor_data.db "SELECT * FROM measurements LIMIT 10;"

Oder später in Python (z. B. in Artikel 5 mit db_reader.py).

5. Verbindung zu den nächsten Artikeln

  • Artikel 4 ruft initialize_database() beim Start der Kivy‑App auf.
  • Artikel 5 liest die Daten aus sensor_data.db und zeigt sie mit Matplotlib an.
  • Artikel 6 lässt das Skript log_sensor_data.py per Cronjob parallel laufen, um echte Messdaten in die gleiche Datenbank zu schreiben.

Wenn du möchtest, passe ich in Artikel 4 und 5 noch Sätze an, die explizit darauf hinweisen, dass neben den Beispieldaten auch Echt‑Daten über log_sensor_data.py in die Visualisierung einfließen können.rsten GUI‑Elemente.

Veröffentlicht in Uncategorized.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mit der Nutzung dieses Formulars erklärst du dich mit der Speicherung und Verarbeitung deiner Daten durch die Website einverstanden.