191 lines
4.1 KiB
Markdown
191 lines
4.1 KiB
Markdown
# 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 Brightness
|
|
- `test_lampe_2` - Mit Power und Brightness
|
|
- `test_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
|
|
|
|
```bash
|
|
poetry run python tools/device_simulator.py
|
|
```
|
|
|
|
Oder im Hintergrund:
|
|
|
|
```bash
|
|
poetry run python tools/device_simulator.py > /tmp/simulator.log 2>&1 &
|
|
```
|
|
|
|
### Umgebungsvariablen
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
./tools/test_device_simulator.sh
|
|
```
|
|
|
|
Das Test-Skript:
|
|
1. Stoppt alle laufenden Services
|
|
2. Startet Abstraction Layer, API und Simulator
|
|
3. Testet alle Lampen-Operationen
|
|
4. Testet alle Thermostat-Operationen
|
|
5. Verifiziert MQTT State Messages
|
|
6. Zeigt Simulator-Logs
|
|
|
|
## Beispiele
|
|
|
|
### Lampe einschalten
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8001/devices/test_lampe_1/set \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"type":"light","payload":{"power":"on"}}'
|
|
```
|
|
|
|
### Helligkeit setzen
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
1. **Abstraction Layer** empfängt Commands und sendet sie an Simulator
|
|
2. **Simulator** reagiert und publiziert neuen State
|
|
3. **Abstraction Layer** empfängt State und publiziert zu Redis
|
|
4. **UI** empfängt Updates via SSE und aktualisiert Dashboard
|
|
|
|
Alle Komponenten arbeiten vollständig asynchron über MQTT.
|