4.1 KiB
4.1 KiB
Device Simulator
Unified MQTT device simulator für das Home Automation System.
Übersicht
Dieser Simulator ersetzt die einzelnen Simulatoren (sim_test_lampe.py, sim_thermo.py) und vereint alle Device-Typen in einer einzigen Anwendung.
Unterstützte Geräte
Lampen (3 Geräte)
test_lampe_1- Mit Power und Brightnesstest_lampe_2- Mit Power und Brightnesstest_lampe_3- Mit Power und Brightness
Features:
power: "on" oder "off"brightness: 0-100
Thermostaten (1 Gerät)
test_thermo_1- Vollständiger Thermostat mit Temperatur-Simulation
Features:
mode: "off", "heat", oder "auto"target: Soll-Temperatur (5.0-30.0°C)current: Ist-Temperatur (wird simuliert)battery: Batteriestand (90%)window_open: Fensterstatus (false)
Temperatur-Simulation:
- Alle 5 Sekunden wird die Ist-Temperatur angepasst
- HEAT/AUTO Mode: Drift zu
target(+0.2°C pro Intervall) - OFF Mode: Drift zu Ambient-Temperatur 18°C (-0.2°C pro Intervall)
MQTT-Konfiguration
- Broker: 172.16.2.16:1883 (konfigurierbar via ENV)
- QoS: 1 für alle Publishes
- Retained: Ja für alle State-Messages
- Client ID: device_simulator
Topics
Für jedes Gerät:
- Subscribe:
vendor/{device_id}/set(QoS 1) - Publish:
vendor/{device_id}/state(QoS 1, retained)
Verwendung
Starten
poetry run python tools/device_simulator.py
Oder im Hintergrund:
poetry run python tools/device_simulator.py > /tmp/simulator.log 2>&1 &
Umgebungsvariablen
export MQTT_BROKER="172.16.2.16" # MQTT Broker Host
export MQTT_PORT="1883" # MQTT Broker Port
Testen
Ein umfassendes Test-Skript ist verfügbar:
./tools/test_device_simulator.sh
Das Test-Skript:
- Stoppt alle laufenden Services
- Startet Abstraction Layer, API und Simulator
- Testet alle Lampen-Operationen
- Testet alle Thermostat-Operationen
- Verifiziert MQTT State Messages
- Zeigt Simulator-Logs
Beispiele
Lampe einschalten
curl -X POST http://localhost:8001/devices/test_lampe_1/set \
-H "Content-Type: application/json" \
-d '{"type":"light","payload":{"power":"on"}}'
Helligkeit setzen
curl -X POST http://localhost:8001/devices/test_lampe_1/set \
-H "Content-Type: application/json" \
-d '{"type":"light","payload":{"brightness":75}}'
Thermostat Mode setzen
curl -X POST http://localhost:8001/devices/test_thermo_1/set \
-H "Content-Type: application/json" \
-d '{"type":"thermostat","payload":{"mode":"heat","target":22.5}}'
State abfragen via MQTT
# Lampe
mosquitto_sub -h 172.16.2.16 -t 'vendor/test_lampe_1/state' -C 1
# Thermostat
mosquitto_sub -h 172.16.2.16 -t 'vendor/test_thermo_1/state' -C 1
Architektur
Browser/API
↓ POST /devices/{id}/set
API Server (Port 8001)
↓ MQTT: home/{type}/{id}/set
Abstraction Layer
↓ MQTT: vendor/{id}/set
Device Simulator
↓ MQTT: vendor/{id}/state (retained)
Abstraction Layer
↓ MQTT: home/{type}/{id}/state (retained)
↓ Redis Pub/Sub: ui:updates
UI / Dashboard
Logs
Der Simulator loggt alle Aktivitäten:
- Startup und MQTT-Verbindung
- Empfangene SET-Commands
- State-Änderungen
- Temperature-Drift (Thermostaten)
- Publizierte State-Messages
Log-Level: INFO
Troubleshooting
Simulator startet nicht
# Prüfe ob Port bereits belegt
lsof -ti:1883
# Prüfe MQTT Broker
mosquitto_sub -h 172.16.2.16 -t '#' -C 1
Keine State-Updates
# Prüfe Simulator-Log
tail -f /tmp/simulator.log
# Prüfe MQTT Topics
mosquitto_sub -h 172.16.2.16 -t 'vendor/#' -v
API antwortet nicht
# Prüfe ob API läuft
curl http://localhost:8001/devices
# Prüfe API-Log
tail -f /tmp/api.log
Integration
Der Simulator integriert sich nahtlos in das Home Automation System:
- Abstraction Layer empfängt Commands und sendet sie an Simulator
- Simulator reagiert und publiziert neuen State
- Abstraction Layer empfängt State und publiziert zu Redis
- UI empfängt Updates via SSE und aktualisiert Dashboard
Alle Komponenten arbeiten vollständig asynchron über MQTT.