# AquaMaster Mock Server Mock ESP32 Server und MQTT-Broker für lokales Testing ohne Hardware. ## Übersicht Dieses Projekt simuliert: - **MQTT-Broker** (Port 1883 TCP, Port 9001 WebSocket) - Lokaler MQTT-Broker für Kommunikation - **Mock ESP32 Server** (Port 80) - Simuliert alle ESP32 API-Endpunkte und WebSocket - **Web Debug UI** - Browser-basierte Oberfläche zum Testen von API und MQTT ## Voraussetzungen - Node.js 16+ (LTS empfohlen) - npm ## Installation ```bash cd mock-server npm install ``` ## Verwendung ### Option 1: Beide Server zusammen starten ```bash npm start # oder node start_all.js ``` ### Option 2: Server einzeln starten **Terminal 1 - MQTT Broker:** ```bash npm run mqtt # oder node mqtt_broker.js ``` **Terminal 2 - Mock ESP32 Server:** ```bash npm run server # oder node mock_esp32_server.js ``` ### Web Debug UI öffnen Nach dem Start der Server: 1. Öffne einen Browser 2. Navigiere zu: `http://localhost:80` 3. Die Debug-Oberfläche sollte sichtbar sein ## Features ### MQTT Broker - Läuft auf Port 1883 (TCP) und Port 9001 (WebSocket) - Unterstützt alle relevanten Topics: - `aquacross/button/#` - `aquacross/button/rfid/#` - `aquacross/battery/#` - `heartbeat/alive/#` - `aquacross/competition/#` - `sync/time` - `aquacross/lanes/#` - Loggt alle Nachrichten für Debugging ### Mock ESP32 Server - Simuliert alle API-Endpunkte aus der ESP32-Firmware - WebSocket-Support für Live-Updates - MQTT-Client, der sich mit dem Broker verbindet - Timer-Logik (Individual/Wettkampf-Modi) - Button-Konfigurationen und Learning-Mode ### Web Debug UI - **API Testing Tab**: Teste alle API-Endpunkte - **MQTT Testing Tab**: Publish/Subscribe MQTT-Nachrichten - **Debug Endpoints Tab**: Direkte Timer-Kontrolle ## API-Endpunkte Alle Endpunkte sind unter `http://localhost:80/api/...` verfügbar: - `GET /api/data` - Timer-Daten abrufen - `POST /api/reset-best` - Beste Zeiten zurücksetzen - `POST /api/unlearn-button` - Button-Zuordnungen löschen - `GET /api/debug/start1` - Lane 1 starten (Debug) - `GET /api/debug/stop1` - Lane 1 stoppen (Debug) - `GET /api/debug/start2` - Lane 2 starten (Debug) - `GET /api/debug/stop2` - Lane 2 stoppen (Debug) - ... und viele mehr (siehe `../API.md`) ## MQTT Topics ### Button Topics - `aquacross/button/{MAC}` - Button-Press Nachrichten ```json {"type": 2, "timestamp": 1234567890} ``` - `type: 2` = Start-Button - `type: 1` = Stop-Button ### RFID Topics - `aquacross/button/rfid/{MAC}` - RFID-Read Nachrichten ```json {"uid": "TEST123456"} ``` ### Battery Topics - `aquacross/battery/{MAC}` - Batteriestand ```json {"voltage": 3600} ``` ### Heartbeat Topics - `heartbeat/alive/{MAC}` - Heartbeat-Nachrichten ```json {"timestamp": 1234567890} ``` ### Competition Topics - `aquacross/competition/toMaster` - Wettkampf-Start ``` "start" ``` ### Time Sync - `sync/time` - Zeit-Synchronisation (vom Server alle 5 Sekunden) ## Troubleshooting ### Port bereits belegt Falls Port 80 oder 1883 bereits belegt sind: - Windows: Port 80 benötigt Admin-Rechte, verwende einen anderen Port - Linux/Mac: Port 80 benötigt sudo, verwende einen anderen Port Um Ports zu ändern, editiere: - `mqtt_broker.js` - Zeile mit `const port = 1883;` - `mock_esp32_server.js` - Zeile mit `const PORT = 80;` ### MQTT-Verbindung fehlgeschlagen - Stelle sicher, dass der MQTT-Broker läuft - Prüfe, ob Port 1883 (TCP) oder 9001 (WebSocket) erreichbar ist - Browser benötigen WebSocket-Verbindung (Port 9001) ### WebSocket-Verbindung fehlgeschlagen - Stelle sicher, dass der Mock ESP32 Server läuft - Prüfe Browser-Konsole auf Fehler - Socket.io sollte automatisch geladen werden ## Projektstruktur ``` mock-server/ ├── package.json # Node.js Dependencies ├── README.md # Diese Datei ├── .gitignore # Git ignore ├── mqtt_broker.js # MQTT-Broker ├── mock_esp32_server.js # Mock ESP32 Server ├── start_all.js # Startet beide Server └── debug_server/ ├── index.html # Web Debug UI ├── debug.js # JavaScript-Logik └── debug.css # Styling ``` ## Hinweise - Der Mock-Server speichert keinen persistenten State (alles im Speicher) - Nach Neustart sind alle Einstellungen zurückgesetzt - Für Produktionstests sollte der echte ESP32 verwendet werden - Dieser Mock-Server ist nur für Entwicklung und Testing gedacht ## Lizenz MIT