# 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/) ``` ## Starten Doppelklick auf `start.bat` oder: ```bash python backend/server.py # Port 3000 (oder: python backend/server.py 8080) python backend/simulator.py # optional: Fake-Sensordaten ohne Hardware ``` Frontend: http://localhost:3000, im Hotspot von anderen Geräten: `http://: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): ```json {"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": [...]}`. Test ohne Hardware (PowerShell): ```powershell Invoke-RestMethod -Method Post -Uri http://localhost:3000/api/messwerte -ContentType "application/json" ` -Body '{"temperatur":22.5,"luftfeuchte":45,"eco2":1150,"tvoc":30}' ```