Files
AquaMasterMQTT/mock-server/README.md
Carsten Graf a67e29b9e4
Some checks failed
/ build (push) Has been cancelled
Add DevServer (brokern)
2026-01-24 15:08:14 +01:00

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