# Backend (Empfang + Auslieferung des Frontends) Minimaler Server mit Node-Bordmitteln (Node ≥ 18, kein `npm install`). 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.js ◀──GET /api/messwerte── Browser (frontend/) ``` ## Starten ```bash node backend/server.js # Port 3000 (oder: node backend/server.js 8080) node backend/simulator.js # optional: Fake-Sensordaten ohne Hardware ``` Frontend: http://localhost:3000 ## 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: ```bash curl -X POST localhost:3000/api/messwerte -H 'Content-Type: application/json' \ -d '{"temperatur":22.5,"luftfeuchte":45,"eco2":1150,"tvoc":30}' ``` ## ESP8266 erreicht den Server nicht? (WSL2) Läuft der Server in WSL2, hat er eine eigene IP, die im WLAN nicht erreichbar ist. Der ESP muss die **Windows-IP** des Rechners ansprechen (`ipconfig`), und der Port muss durchgereicht werden (PowerShell als Administrator): ```powershell netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress= New-NetFirewallRule -DisplayName "Lernklima 3000" -Direction Inbound -Protocol TCP -LocalPort 3000 -Action Allow ``` Die WSL-IP zeigt `wsl hostname -I`. Alternativ in `%UserProfile%\.wslconfig` den Modus `networkingMode=mirrored` setzen und die Firewall-Regel anlegen.