In diesem Teil der Serie visualisieren wir Temperatur- und Luftfeuchtigkeitsdaten mit Matplotlib. Die Live‑Labels und das Diagramm werden regelmäßig über das Kivy‑Clock‑Modul aktualisiert. Die App nutzt automatisch die Datenbank aus Artikel 3 — inklusive Beispieldaten oder echten Sensordaten.
1. Ziel dieses Artikels
Wir erweitern die App aus Artikel 4:
- Matplotlib‑Diagramm einbinden
- Diagramm in
graph_containerplatzieren - Live‑Labels (
temp_label,hum_label) mit echten Werten füllen - automatische Updates über
Clock.schedule_interval() - Button „Aktualisieren“ funktioniert weiterhin
2. Warum Matplotlib statt Garden Graph?
Kurz und klar:
- Garden Graph funktioniert unter Windows oft nicht
- Installation bricht ab oder Modul fehlt
- keine gepflegte Windows‑Unterstützung
Matplotlib dagegen:
- stabil
- plattformübergreifend
- extrem flexibel
- perfekt in Kivy integrierbar
Darum nutzen wir Matplotlib.
3. Matplotlib installieren
pip install matplotlib
pip install kivy-garden
garden install matplotlib
4. Daten aus SQLite laden
nano db_reader.py
Inhalt:
import sqlite3
def load_data(limit=100):
connection = sqlite3.connect("sensor_data.db")
cursor = connection.cursor()
cursor.execute("""
SELECT timestamp, temperature, humidity
FROM measurements
ORDER BY id DESC
LIMIT ?
""", (limit,))
rows = cursor.fetchall()
connection.close()
return rows[::-1]
5. Visualizer‑App mit Matplotlib & Clock
Ersetze VisualizerApp.py durch:
from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock
from kivy_garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from matplotlib.figure import Figure
from db_reader import load_data
from db_init import initialize_database
class VisualizerApp(App):
def build(self):
initialize_database()
self.build_plot()
# Automatische Updates alle 10 Sekunden
Clock.schedule_interval(lambda dt: self.update_plot(), 10)
return self.root
def build_plot(self):
self.fig = Figure(figsize=(5, 3))
self.ax = self.fig.add_subplot(111)
self.canvas = FigureCanvasKivyAgg(self.fig)
container = self.root.ids.graph_container
container.clear_widgets()
container.add_widget(self.canvas)
self.update_plot()
def update_plot(self):
data = load_data(100)
if not data:
return
temps = [row[1] for row in data]
hums = [row[2] for row in data]
# Diagramm aktualisieren
self.ax.clear()
self.ax.plot(temps, label="Temp (°C)", color="red")
self.ax.plot(hums, label="Hum (%)", color="blue")
self.ax.legend()
self.canvas.draw()
# Live-Werte aktualisieren
last = data[-1]
self.root.ids.temp_label.text = f"Temperatur: {last[1]:.1f} °C"
self.root.ids.hum_label.text = f"Luftfeuchtigkeit: {last[2]:.1f} %"
if __name__ == "__main__":
VisualizerApp().run()

6. Was jetzt passiert
✔️ Live‑Labels
Die Labels über der Grafik zeigen:
- aktuelle Temperatur
- aktuelle Luftfeuchtigkeit
✔️ Diagramm
Matplotlib zeigt die letzten 100 Messpunkte.
✔️ Automatische Updates
Alle 10 Sekunden:
- Diagramm neu gezeichnet
- Live‑Labels aktualisiert
✔️ Button „Aktualisieren“
Funktioniert weiterhin manuell.
✔️ Echte Sensordaten
Wenn du log_sensor_data.py ausführst, erscheinen die Werte automatisch in der App.