180 lines
4.4 KiB
Markdown
180 lines
4.4 KiB
Markdown
# 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
|