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/command fü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
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)
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
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-Temperaturwerte
smart_thermostat/controller/status_feed - Controller-Status-Updates
smart_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 .env gespeichert (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
Copy# 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:
Copy# 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
(View on GitHub)