Smart Building Wärmeautomatisierung
Ein Ein-Zonen-Smart-Thermostat-Simulationssystem zur Demonstration von IoT-Architekturmustern mit Python, MQTT-Messaging und Echtzeit-Web-Dashboards. Das System simuliert Temperatursensoren, implementiert wetterbewusste Heizungssteuerungslogik und bietet eine Live-Monitoring-Oberfläche mit historischer Datenvisualisierung. Dieses Projekt zeigt entkoppelte Microservices-Architektur, Event-Driven-Kommunikation und Cloud-ready IoT-Deployment-Muster. (GitHub)
Architekturübersicht
Das System folgt einer Publish-Subscribe-Architektur mit drei unabhängigen Python-Komponenten, die über MQTT kommunizieren:
1. Sensor-Simulator (sensor/sensor.py)
- Zweck: Generiert realistische Raumtemperaturdaten mit einem Random-Walk-Algorithmus
- Funktionalität:
- Simuliert Temperaturschwankungen (z.B. 18-24°C Bereich)
- Veröffentlicht JSON-Temperaturwerte zum MQTT-Topic
home/1/temperature - Konfigurierbares Veröffentlichungsintervall (Standard: alle paar Sekunden)
- Verwendet Python-Logging für Debugging und Monitoring
- MQTT-Client: Eclipse Paho MQTT Python-Client-Bibliothek
- Ausgabeformat:
{"temperature": 21.5}JSON-Nachrichten
2. Controller-Service (controller/controller.py)
- Zweck: Intelligente Heizungssteuerung mit wetterbasierter Sollwert-Anpassung
- Funktionalität:
- Abonniert Command-Topic
smart_thermostat/controller/commandfür Standort-Updates - Ruft Echtzeit-Wetterdaten von WeatherAPI.com für angegebenen Standort ab
- Adaptive Sollwert-Logik:
- Wenn Außentemperatur < 5°C: Verringert Heizungssollwert (Energieeinsparung)
- Wenn Außentemperatur > 18°C: Erhöht Sollwert (Komfortoptimierung)
- Standard-Sollwert: 20°C
- Veröffentlicht umfassenden Status zu
smart_thermostat/controller/status_feed:- Aktueller Wetterstandort
- Aktueller Sollwert-Temperatur
- Zuletzt abgerufene Außentemperatur
- Zeitstempel
- Abonniert Command-Topic
- Wetter-Integration: WeatherAPI.com REST API (erfordert API-Schlüssel)
- Update-Frequenz: Periodische Wetterabrufe und Status-Updates (konfigurierbares Intervall)
3. Web-Dashboard & Data Hub (app.py)
- Framework: Flask-Webanwendung als zentraler Datenaggregationspunkt
- MQTT-Subscriber:
- Abonniert Sensor-Temperaturdaten (
home/1/temperature) - Abonniert Controller-Status-Feed (
smart_thermostat/controller/status_feed)
- Abonniert Sensor-Temperaturdaten (
- Datenverarbeitungslogik:
- Vergleicht Innentemperatur mit neuestem Sollwert vom Controller
- Bestimmt Heizungsaktion: "HEATER ON" wenn Temp < Sollwert, "HEATER OFF" sonst
- Protokolliert alle Events (Sensorwerte, Controller-Status, Heizungsaktionen) in SQLite
- Echtzeit-Dashboard (
templates/index.html):- Server-Sent Events (SSE): Live-Updates ohne Seitenaktualisierung
- Angezeigte Metriken:
- Aktuelle Innentemperatur (vom Sensor)
- Aktueller Sollwert (vom Controller)
- Heizungsaktionsstatus (ON/OFF)
- Außentemperatur und Wetterstandort
- Interaktives Diagramm: Plotly-Zeitreihen-Visualisierung täglicher Temperaturtrends
- Standort-Update-Formular: Ermöglicht Benutzern, Wetterstandort zu ändern, was MQTT-Befehl an Controller auslöst
- Datenpersistenz:
- Tägliche SQLite-Datenbanken:
database/temperature_log_YYYY-MM-DD.db - Speichert: Zeitstempel, Innentemp, Sollwert, Heizungsaktion, Außentemp, Standort
- Ermöglicht historische Analyse und Trendvisualisierung
- Tägliche SQLite-Datenbanken:
- MQTT-Publisher: Veröffentlicht Standort-Update-Befehle an Controller
4. MQTT-Broker
- Implementierung: Eclipse Mosquitto (branchenüblicher MQTT-Broker)
- Rolle: Zentraler Message-Bus für alle Komponentenkommunikation
- Standard-Port: 1883 (Standard-MQTT-Port)
- Verwendete Topics:
home/1/temperature- Sensor-Temperaturwertesmart_thermostat/controller/status_feed- Controller-Status-Updatessmart_thermostat/controller/command- Befehle an Controller
Technologie-Stack
Kern-Technologien
- Python 3: Primäre Programmiersprache für alle Komponenten
- MQTT-Protokoll: Leichtgewichtiges Messaging-Protokoll für IoT-Kommunikation
- Eclipse Paho MQTT Client: Python-Bibliothek für MQTT-Publish/Subscribe-Operationen
- Eclipse Mosquitto: MQTT-Message-Broker (kann lokal oder in der Cloud laufen)
Web-Framework & Echtzeit
- Flask: Leichtgewichtiges Python-Web-Framework für Dashboard und API
- Server-Sent Events (SSE): Einseitiges Echtzeit-Datenstreaming vom Server zum Browser
- Jinja2 Templates: Server-seitiges Templating für HTML-Rendering
Datenvisualisierung
- Plotly Python: Interaktive Charting-Bibliothek für Zeitreihen-Temperaturdiagramme
- JavaScript: Client-seitige Interaktivität und SSE-Event-Handling
Datenspeicherung
- SQLite: Eingebettete Datenbank für tägliche Temperaturprotokolle
- Dateibasiertes Logging: Python-Logging-Modul für Komponenten-Level-Debugging
Externe Services
- WeatherAPI.com: REST API für Echtzeit-Wetterdaten (kostenloser Tier verfügbar)
- Requests Library: HTTP-Client für Wetter-API-Aufrufe
Konfigurationsverwaltung
- python-dotenv: Umgebungsvariablen-Verwaltung via
.env-Dateien - Sichere API-Schlüssel-Speicherung: Wetter-API-Schlüssel in
.envgespeichert (gitignored)
System-Workflow
1. Initialisierungsphase
- MQTT-Broker (Mosquitto) startet und lauscht auf Port 1883
- Sensor-Simulator startet, beginnt Temperaturwerte zu veröffentlichen
- Controller-Service startet, abonniert Befehle, ruft initiales Wetter ab
- Flask-App startet, abonniert Sensor- und Controller-Topics
2. Kontinuierlicher Betrieb
- Sensor-Loop: Veröffentlicht Temperatur alle N Sekunden
- Controller-Loop:
- Ruft periodisch Wetter ab (z.B. jede Minute)
- Passt Sollwert basierend auf Außentemperatur an
- Veröffentlicht Status-Update
- Dashboard-Loop:
- Empfängt Sensor- und Controller-Nachrichten via MQTT
- Bestimmt Heizungsaktion (ON/OFF)
- Protokolliert in SQLite-Datenbank
- Pusht Updates an verbundene Browser via SSE
3. Benutzerinteraktion
- Benutzer öffnet Dashboard bei
http://127.0.0.1:5001 - Dashboard zeigt Live-Daten via SSE an
- Benutzer aktualisiert Wetterstandort via Formular
- Flask-App veröffentlicht Standortbefehl zu MQTT
- Controller empfängt Befehl, aktualisiert Standort, ruft neues Wetter ab
Setup & Konfiguration
Voraussetzungen
- Python 3.x und pip
- Git zum Klonen des Repositories
- MQTT-Broker (Mosquitto) - kann via Homebrew (macOS) oder Paketmanager installiert werden
Installationsschritte
# Repository klonen git clone https://github.com/padawanabhi/smart_heat_automation.git cd smart_heat_automation # Virtuelle Umgebung erstellen python3 -m venv my_env source my_env/bin/activate # Windows: my_env\Scripts\activate # Abhängigkeiten installieren pip install -r requirements.txt # Mosquitto MQTT-Broker installieren und starten # macOS (Homebrew): brew install mosquitto brew services start mosquitto # .env-Datei mit WeatherAPI-Schlüssel erstellen echo "WEATHER_API_KEY=your_api_key_here" > .env
System ausführen
Jede Komponente in einem separaten Terminal ausführen:
# Terminal 1: Sensor-Simulator python sensor/sensor.py # Terminal 2: Controller-Service python controller/controller.py # Terminal 3: Flask-Dashboard python app.py
Dashboard aufrufen bei: http://127.0.0.1:5001
Potenzielle Verbesserungen & Erweiterungen
1. Hardware-Integration
- Echte Sensoren: Simulation durch tatsächliche Temperatursensoren ersetzen (DS18B20, DHT22)
- Raspberry Pi Deployment: Sensor und Controller auf Edge-Geräten deployen
- GPIO-Steuerung: Direkte Hardware-Steuerung für tatsächliche Heizungssysteme
- Sensor-Fusion: Mehrere Sensortypen kombinieren (Temperatur, Luftfeuchtigkeit, Anwesenheit)
2. Erweiterte Steuerungsalgorithmen
- PID-Steuerung: Proportional-Integral-Derivative-Controller für sanftere Temperaturregelung implementieren
- Maschinelles Lernen: Modelle trainieren, um optimale Sollwerte basierend auf historischen Mustern vorherzusagen
- Reinforcement Learning: Optimale Heizungsstrategien durch Versuch und Irrtum lernen
- Zeitplanbasierte Steuerung: Tageszeit- und Wochentag-Planung
- Anwesenheitserkennung: Heizung basierend auf Raumbelegung anpassen (PIR-Sensoren, Smart-Home-Integration)
3. Multi-Zonen-Unterstützung
- Zonen-Management: Auf mehrere Räume/Zonen mit unabhängiger Steuerung erweitern
- Zonen-Koordination: Heizung über Zonen hinweg optimieren, um Energieverbrauch zu minimieren
- Zonen-Priorisierung: Belegte Zonen zuerst heizen, Heizung in unbelegten Bereichen reduzieren
4. Erweiterte Dashboard-Features
- Benutzerauthentifizierung: Sicheren Zugang mit Login-System
- Mobile Responsive Design: Für Smartphone/Tablet-Ansicht optimieren
- Historische Analyse: Mehr-Tage/Woche/Monat-Trend-Analyse
- Energieverbrauchs-Tracking: Geschätzten Energieverbrauch berechnen und anzeigen
- Alert-System: Benachrichtigungen für Temperaturanomalien oder Systemausfälle
- Export-Funktionalität: Historische Daten als CSV/JSON herunterladen
5. Cloud-Integration
- Cloud-MQTT-Broker: AWS IoT Core, Azure IoT Hub oder Google Cloud IoT verwenden
- Time-Series-Datenbank: Von SQLite zu InfluxDB oder TimescaleDB migrieren für bessere Skalierbarkeit
- Cloud-Dashboard: Flask-App in Cloud deployen (Heroku, AWS, Azure)
- Remote-Zugang: Sichere Remote-Überwachung und -Steuerung ermöglichen
- Backup & Sync: Cloud-Backup historischer Daten
6. Erweiterte Protokolle & Standards
- MQTT über TLS: Sichere MQTT-Kommunikation mit SSL/TLS-Verschlüsselung
- MQTT 5.0: Auf neueste MQTT-Protokollversion für erweiterte Features upgraden
- CoAP-Alternative: Constrained Application Protocol für ressourcenbeschränkte Geräte implementieren
- OPC UA-Integration: Industrielles Protokoll-Support für Gebäudeautomatisierungssysteme
7. Energieoptimierung
- Demand Response: Integration in Versorgungsunternehmen-Demand-Response-Programme
- Time-of-Use-Optimierung: Heizung basierend auf Strompreisen anpassen
- Prädiktive Vorheizung: Räume vor Belegung basierend auf Zeitplänen vorheizen
- Energiekosten-Tracking: Echtzeit-Kostenberechnung und Budget-Alerts
8. Integration & Interoperabilität
- Home Assistant-Integration: Verbindung zu beliebten Home-Automation-Plattformen
- IFTTT/Zapier: Aktionen basierend auf Temperatur-Events auslösen
- Smart Home APIs: Integration mit Google Home, Amazon Alexa
- REST API: Steuerungs-Endpoints für Drittanbieter-Integrationen bereitstellen
9. Monitoring & Observability
- Strukturiertes Logging: JSON-formatierte Logs für besseres Parsing
- Metriken-Sammlung: Prometheus-Metriken für System-Gesundheits-Monitoring
- Distributed Tracing: Requests über Komponenten hinweg verfolgen
- Alerting: E-Mail/SMS-Alerts für Systemausfälle oder Anomalien
- Health Checks: Automatisiertes System-Gesundheits-Monitoring
10. Sicherheitsverbesserungen
- MQTT-Authentifizierung: Benutzername/Passwort oder zertifikatbasierte Authentifizierung
- API-Sicherheit: JWT-Tokens für Dashboard-Zugang
- Netzwerksicherheit: VPN oder sicherer Tunnel für Remote-Zugang
- Datenverschlüsselung: Sensible Daten im Ruhezustand verschlüsseln
- Rate Limiting: Missbrauch und DoS-Angriffe verhindern
Anwendungsfälle
- IoT-Lernprojekt: Verständnis von MQTT, Event-Driven-Architektur und IoT-Mustern
- Home-Automation-Prototyp: Grundlage für Smart-Home-Heizungssystem
- Energiemanagement: Heizungsenergieverbrauch überwachen und optimieren
- Gebäudeautomatisierung: Erweiterbar auf kommerzielle Gebäude-HVAC-Systeme
- Bildungstool: Unterrichten von IoT-Konzepten, MQTT und Microservices
- Forschungsplattform: Testen von Steuerungsalgorithmen und Optimierungsstrategien
Wichtige Erkenntnisse & Ergebnisse
- Entkoppelte Architektur: Demonstriert Microservices-Muster mit unabhängigen, skalierbaren Komponenten
- Event-Driven-Design: MQTT-Pub/Sub ermöglicht lose Kopplung und Echtzeit-Kommunikation
- Echtzeit-UX: SSE bietet nahtlose Live-Updates ohne Polling
- Datengetriebene Einblicke: Historisches Logging ermöglicht Trendanalyse und Optimierung
- Cloud-Ready-Design: Umgebungsbasierte Konfiguration und Standardprotokolle ermöglichen einfache Cloud-Migration
- Produktionsmuster: Logging, Fehlerbehandlung und Konfigurationsverwaltung folgen Best Practices
