Artikel 6 – Datenbank, Sensorwerte und Diagramme im Detail: Wie die Gebäudedaten‑App ihre Daten verarbeitet und visualisiert

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:

  1. Der SensorService erzeugt neue Werte.
  2. Die Werte werden in die Datenbank geschrieben.
  3. Der DiagrammService liest die Werte aus der Datenbank.
  4. 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.

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.