GruppeC/backend
dk 027444b0c3 Unity-Zwilling an server.py angebunden: Steuerbefehle empfangen, Szenario-Simulator
- server.py: POST/GET /api/steuerung nimmt die Entscheidung des Unity-Zwillings an
- simulator.py: --szenario normal|hitze|stickig|kalt|demo fuer Vorfuehrungen ohne Arduino
- README/backend-README: Datenweg Arduino -> ESP -> server.py -> Unity dokumentiert
2026-11-03 11:06:03 +01:00
..
.gitkeep Grundstruktur Repo 2026-10-08 11:10:15 +02:00
README.md Unity-Zwilling an server.py angebunden: Steuerbefehle empfangen, Szenario-Simulator 2026-11-03 11:06:03 +01:00
firewall_freigeben.bat ESP-01 E1-Fehler dokumentiert, Python-Backend, robusterer CCS811-Start 2026-10-27 12:40:55 +01:00
server.py Unity-Zwilling an server.py angebunden: Steuerbefehle empfangen, Szenario-Simulator 2026-11-03 11:06:03 +01:00
simulator.py Unity-Zwilling an server.py angebunden: Steuerbefehle empfangen, Szenario-Simulator 2026-11-03 11:06:03 +01:00
start.bat ESP-01 E1-Fehler dokumentiert, Python-Backend, robusterer CCS811-Start 2026-10-27 12:40:55 +01:00

README.md

Backend (Empfang + Auslieferung des Frontends)

Minimaler Server mit Python-Bordmitteln (Python ≥ 3.8, kein pip install, läuft direkt unter Windows). Er nimmt die Messwerte des ESP8266 entgegen, hält die letzten 100 Messungen im Speicher und liefert zusätzlich das Frontend aus. Die Aggregationslogik (Präferenzen, CO2-Hard-Constraint, Sensor-Veto) ist hier noch nicht enthalten.

ESP8266 ──POST /api/messwerte──▶ backend/server.py ◀──GET /api/messwerte── Browser (frontend/)
                                        ▲          ◀──GET /api/messwerte── Unity-Zwilling
                                        └───────────POST /api/steuerung─── Unity-Zwilling

Starten

Doppelklick auf start.bat oder:

python backend/server.py          # Port 3000 (oder: python backend/server.py 8080)
python backend/simulator.py       # optional: Fake-Sensordaten ohne Hardware
python backend/simulator.py --szenario demo   # Szenarien nacheinander: normal, stickig, normal, hitze, kalt

Szenarien des Simulators: wechsel (Standard, Werte schwanken), normal, hitze (→ ca. 30 °C), stickig (→ ca. 1600 ppm), kalt (→ ca. 17 °C), demo. Die Werte ändern sich langsam wie in echt, damit man im Unity-Zwilling sieht, wann die Steuerung umschaltet. Frontend: http://localhost:3000, im Hotspot von anderen Geräten: http://<Laptop-IP>:3000

Beim Start zeigt der Server die IP-Adressen des Laptops und prüft, ob SERVER_IP in firmware/dht11_lcd/wifi_config.h dazu passt („OK“ bzw. „ACHTUNG“). Jeder empfangene Messwert erscheint mit Absender-IP im Fenster (127.0.0.1 = Simulator, 172.20.10.x = ESP im Hotspot).

Firewall (einmalig)

Windows stuft den Handy-Hotspot meist als „öffentliches Netz“ ein und blockiert eingehende Verbindungen. firewall_freigeben.bat per Rechtsklick → „Als Administrator ausführen“ gibt Port 3000 frei.

Schnittstelle (Datenvertrag)

POST /api/messwerte, Content-Type: application/json, reines HTTP (kein TLS):

{"temperatur": 22.5, "luftfeuchte": 45.0, "eco2": 612, "tvoc": 30}
Feld Einheit Quelle
temperatur °C DHT11
luftfeuchte % DHT11
eco2 ppm CCS811
tvoc ppb CCS811

Alle Felder sind Zahlen; ein Feld darf fehlen oder null sein (z. B. CCS811 noch nicht bereit). Den Zeitstempel setzt der Server beim Empfang.

GET /api/messwerte liefert {"aktuell": {...} | null, "verlauf": [...]}.

Steuerbefehle vom Unity-Zwilling

POST /api/steuerung (sendet Unity im Modus „Backend“, sobald sich etwas ändert, sonst alle 10 s):

{"window": "open", "blind": 1.0, "heat": 0.0, "vent": 0.0, "light": 0.4, "beamer": 0, "szenario": "Hitze"}
Feld Bedeutung
window closed, tilted oder open
blind, heat, vent, light Sollwert 0 … 1 (Jalousie unten, Heizung, Lüftungsanlage, Licht)
beamer 0/1
szenario vom Zwilling erkanntes Szenario

Der Server merkt sich nur den letzten Stand (GET /api/steuerung → {"aktuell": {...} | null}) und gibt ihn im Fenster aus. Echte Aktoren gibt es noch nicht.

Test ohne Hardware (PowerShell):

Invoke-RestMethod -Method Post -Uri http://localhost:3000/api/messwerte -ContentType "application/json" `
  -Body '{"temperatur":22.5,"luftfeuchte":45,"eco2":1150,"tvoc":30}'