This commit is contained in:
179
mock-server/README.md
Normal file
179
mock-server/README.md
Normal file
@@ -0,0 +1,179 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user