In den bisherigen Artikeln hast du die Navigation, die Zonenlogik und die Integration der Wettervorhersage kennengelernt. In diesem Artikel tauchst du tief in die technischen Grundlagen der Gebäudedaten‑App ein: die Datenbank, die Sensorwerte und die Diagrammerstellung. Diese drei Bereiche bilden das Fundament der gesamten App. Ohne eine funktionierende Datenbank gäbe es keine Räume, keine Sensoren und keine Messwerte. Ohne Sensorwerte gäbe es keine Daten zum Anzeigen. Und ohne Diagramme gäbe es keine visuelle Darstellung der Messwerte.
Dieser Artikel erklärt dir Schritt für Schritt, wie die App ihre Daten speichert, verarbeitet und visualisiert. Du lernst, wie die Datenbank aufgebaut ist, wie die Sensorwerte erzeugt werden, wie die Diagramme erstellt werden und wie all diese Komponenten zusammenarbeiten, um eine stabile und zuverlässige App zu bilden.

1. Die Datenbank als zentrales Element der App
Die Gebäudedaten‑App verwendet eine SQLite‑Datenbank, die über init_db.py erzeugt wird. SQLite ist ideal für lokale Anwendungen, weil es keine Installation benötigt und die Daten in einer einzigen Datei speichert. Die Datenbank ist das Herzstück der App. Sie enthält alle Informationen über:
- Zonen
- Räume
- Sensoren
- Messwerte
Diese Struktur ist bewusst einfach gehalten, aber sie bildet die Grundlage für die gesamte App.
Die Verbindung zur Datenbank
Die Verbindung wird über eine einfache Funktion hergestellt:
def get_connection() -> sqlite3.Connection:<br> DB_PATH.parent.mkdir(parents=True, exist_ok=True)<br> return sqlite3.connect(DB_PATH)<br>
Diese Funktion stellt sicher, dass der Ordner existiert und öffnet dann die Datenbankdatei. Wenn die Datei nicht existiert, wird sie automatisch erstellt.
2. Die Tabellenstruktur – wie die Daten organisiert sind
Die Datenbank enthält vier Tabellen:
zones
Diese Tabelle enthält die verschiedenen Zonen des Gebäudes, z. B.:
- Innenbereich
- Außenbereich
Jede Zone hat eine eindeutige ID und einen Namen.
rooms
Diese Tabelle enthält die Räume innerhalb einer Zone, z. B.:
- Wohnzimmer
- Küche
- Büro
- Außenbereich
Jeder Raum gehört zu einer Zone.
sensors
Diese Tabelle enthält die Sensoren innerhalb eines Raums, z. B.:
- Temperatur
- Feuchtigkeit
- Luftqualität
Jeder Sensor gehört zu einem Raum und hat einen Typ.
readings
Diese Tabelle enthält die Messwerte eines Sensors:
- Zeitstempel
- Wert
Diese Struktur ist flexibel genug, um später erweitert zu werden — z. B. um weitere Sensortypen oder zusätzliche Zonen.

3. Die Datenbankabfragen – wie die App ihre Daten lädt
Die Abfragen sind in services/database/queries.py definiert. Sie sind klar strukturiert und leicht verständlich.
Räume einer Zone laden
SELECT id, name FROM rooms WHERE zone_id=? ORDER BY name ASC
Diese Abfrage lädt alle Räume einer Zone und sortiert sie alphabetisch.
Sensoren eines Raums laden
SELECT id, name, type FROM sensors WHERE room_id=? ORDER BY name ASC
Diese Abfrage lädt alle Sensoren eines Raums.
Messwerte eines Sensors laden
SELECT timestamp, value FROM readings WHERE sensor_id=? ORDER BY timestamp ASC LIMIT ?
Diese Abfrage lädt die Messwerte eines Sensors und sortiert sie nach Zeitstempel.

4. Der SensorService – wie die App Sensorwerte erzeugt
Der SensorService erzeugt Zufallswerte, um die Live‑Aktualisierung zu simulieren. Das ist wichtig, weil die App ohne echte Sensoren keine Daten hätte. Der SensorService sorgt dafür, dass die App immer aktuelle Werte hat.
Der Code sieht so aus:
value = random.uniform(19.0, 24.0)
timestamp = datetime.now().isoformat(timespec="seconds")
Diese Werte werden in die Datenbank geschrieben und später im Diagramm angezeigt.
Warum Zufallswerte?
- Die App bleibt funktionsfähig, auch ohne echte Sensoren.
- Die Diagramme sehen realistisch aus.
- Die App kann jederzeit getestet werden.

5. Der DiagrammService – wie die App Diagramme erzeugt
Der DiagrammService ist für die Erstellung der Diagramme verantwortlich. Er verwendet Matplotlib, um ein einfaches Liniendiagramm zu erzeugen. Die Diagramme werden transparent gespeichert, damit sie sich gut in das UI einfügen.
Der Code sieht so aus:
fig, ax = plt.subplots(figsize=(6, 3), dpi=100)
ax.plot(timestamps, values, color=color, linewidth=1.8)
fig.savefig(path, transparent=True)
Warum transparente Diagramme?
- Sie passen sich dem Hintergrund an.
- Sie wirken moderner und leichter.
- Sie lassen sich besser in dunkle Themes integrieren.

Farbwahl basierend auf dem Sensortyp
Der DiagrammService wählt die Farbe basierend auf dem Sensornamen:
color = "blue" if "feuchte" in sensor_name.lower() else "red"
Das ist eine einfache, aber effektive Methode, um die Diagramme visuell zu unterscheiden.
6. Wie der DiagrammScreen die Diagramme lädt
Der DiagrammScreen liest die Sensorinformationen aus dem AppState:
sensor_id = state.current_sensor_id
sensor_name = state.current_sensor_name or "Diagramm"
Wenn kein Sensor ausgewählt wurde, wird kein Diagramm angezeigt.
Der DiagrammScreen ruft den DiagrammService auf:
path = create_sensor_diagram(sensor_id, sensor_name)
Wenn ein Fehler auftritt, wird das Diagramm zurückgesetzt:
except Exception as e:
self.ids.diagram_image.source = ""
return
Anschließend wird das Bild neu geladen:
self.ids.diagram_image.source = path
self.ids.diagram_image.reload()

7. Fehlerbehandlung – warum sie so wichtig ist
Die Fehlerbehandlung im DiagrammScreen ist bewusst einfach gehalten. Wenn ein Fehler auftritt, wird das Diagramm zurückgesetzt. Das ist wichtig, weil die Diagrammerstellung fehlschlagen kann, wenn:
- keine Messwerte vorhanden sind
- der Sensor keine Daten hat
- die Datenbank leer ist
Durch die einfache Fehlerbehandlung bleibt die App stabil und reagiert vorhersehbar.
8. Wie alle Komponenten zusammenarbeiten
Die Datenbank, der SensorService und der DiagrammService arbeiten eng zusammen:
- Der SensorService erzeugt neue Werte.
- Die Werte werden in die Datenbank geschrieben.
- Der DiagrammService liest die Werte aus der Datenbank.
- Der DiagrammScreen zeigt das Diagramm an.
Diese Struktur ist robust und leicht erweiterbar.
9. Warum diese Struktur so stabil ist
Die Kombination aus:
- klaren Datenbankabfragen
- sauberer Trennung von Logik und Layout
- einfacher Fehlerbehandlung
- dynamischer UI‑Erzeugung
- transparenten Diagrammen
macht die App extrem stabil. Du kannst sie problemlos erweitern, ohne die bestehende Struktur zu gefährden.
Fazit: Die technische Basis der App ist vollständig
Nach diesem Artikel verstehst du:
- wie die Datenbank aufgebaut ist
- wie die Sensorwerte erzeugt werden
- wie die Diagramme erstellt werden
- wie der DiagrammScreen funktioniert
- wie die App ihre Daten verarbeitet
- warum die App so stabil läuft
Damit bist du perfekt vorbereitet für Artikel 7, in dem du die Architektur als Ganzes betrachtest und einen Ausblick auf mögliche Erweiterungen bekommst.