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.dbund zeigt sie mit Matplotlib an. - Artikel 6 lässt das Skript
log_sensor_data.pyper 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.