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
cd mock-server
npm install
Verwendung
Option 1: Beide Server zusammen starten
npm start
# oder
node start_all.js
Option 2: Server einzeln starten
Terminal 1 - MQTT Broker:
npm run mqtt
# oder
node mqtt_broker.js
Terminal 2 - Mock ESP32 Server:
npm run server
# oder
node mock_esp32_server.js
Web Debug UI öffnen
Nach dem Start der Server:
- Öffne einen Browser
- Navigiere zu:
http://localhost:80 - 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/timeaquacross/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 abrufenPOST /api/reset-best- Beste Zeiten zurücksetzenPOST /api/unlearn-button- Button-Zuordnungen löschenGET /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{"type": 2, "timestamp": 1234567890}type: 2= Start-Buttontype: 1= Stop-Button
RFID Topics
aquacross/button/rfid/{MAC}- RFID-Read Nachrichten{"uid": "TEST123456"}
Battery Topics
aquacross/battery/{MAC}- Batteriestand{"voltage": 3600}
Heartbeat Topics
heartbeat/alive/{MAC}- Heartbeat-Nachrichten{"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 mitconst port = 1883;mock_esp32_server.js- Zeile mitconst 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