docs(tests): Burst-Begriff durch Session ersetzt, MQTT-Payloads aktualisiert

This commit is contained in:
MaPaLo76 2026-02-23 19:53:35 +01:00
parent e98002db7b
commit 4111f451d4

View File

@ -14,7 +14,7 @@ Jeder Sketch laeuft als separates PlatformIO-Environment und beruehrt `src/main.
| 2.2 | `test-nvs` | `test_nvs.cpp` | NVS Lesen/Schreiben/Reset (SettingsManager) |
| 3.3 | `test-wifi` | `test_wifi.cpp` | WiFiManager Captive Portal, WLAN-Verbindung |
| 4.3 | `test-display-mgr` | `test_display_manager.cpp` | DisplayManager API (alle show*-Methoden) |
| 5.6 | `test-laser-tracker` | `test_laser_tracker.cpp` | LaserTracker Burst-Logik, Gratiszeit, Session/NVS |
| 5.6 | `test-laser-tracker` | `test_laser_tracker.cpp` | LaserTracker Session-Logik, Gratiszeit, Summe Session/NVS |
| 6.5 | `test-mqtt` | `test_mqtt_client.cpp` | MqttClient TLS, Heartbeat, Session-Publish, JSON-Reset, LWT |
| 7.7 | `test-web` | `test_web_server.cpp` | WebServer Routen, Config-Formular, Reset, ElegantOTA OTA |
@ -46,7 +46,7 @@ SPI-Datenfluss: ESP32 -> Modul 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
| Modul(e) | 0-Index | Funktion |
|-----------|---------|-------------------------------------------------------|
| Modul 1 | 0 | WiFi-Fehler-Indikator (`E` = kein WLAN, leer = OK) |
| Modul 2-4 | 1-3 | Session-Minuten ganzzahlig (0 bei Neustart, RAM-only) |
| Modul 2-4 | 1-3 | Summe Session-Minuten ganzzahlig (0 bei Neustart, RAM-only) |
| Modul 5 | 4 | MQTT-Fehler-Indikator (`E` = kein Broker, leer = OK) |
| Modul 6-8 | 5-7 | Countdown (Gratiszeit) oder `--` (Idle/Netto) |
@ -211,7 +211,7 @@ Der Sketch durchlaeuft nacheinander:
## Test 5.6 - LaserTracker (`test_laser_tracker.cpp`)
### Zweck
Burst-Zustandsmaschine, Gratiszeit-Countdown, Session-Minuten und NVS-Gesamtzeit pruefen.
Session-Zustandsmaschine, Gratiszeit-Countdown, Summe Session-Minuten und NVS-Gesamtzeit pruefen.
### Flash & Monitor
```bash
@ -224,12 +224,12 @@ GPIO 4: Push-Button gegen GND (simuliert Laser-AN/AUS, LOW_ACTIVE)
### Testablauf
**A) Gratis-Burst (Laser < 20 s):**
**A) Gratis-Session (Laser < 20 s):**
1. Schalter schliessen -> Countdown startet auf Modul 6-8
2. Schalter vor Ablauf der 20 s oeffnen
3. Erwartung: Session-Minuten unveraendert (0), NVS erhoehte sich um Burst-Dauer
3. Erwartung: Summe Session-Minuten unveraendert (0), NVS erhoehte sich um Session-Dauer
**B) Netto-Burst (Laser > 20 s):**
**B) Netto-Session (Laser > 20 s):**
1. Schalter schliessen -> Countdown startet
2. Nach 20 s -> Countdown erlischt, Module 6-8 zeigen `--`
3. Schalter nach z.B. 80 Netto-Sekunden oeffnen
@ -237,8 +237,8 @@ GPIO 4: Push-Button gegen GND (simuliert Laser-AN/AUS, LOW_ACTIVE)
**C) Neustart-Test:**
1. ESP32 neu starten
2. Erwartung: Session-Minuten = 0 auf Modul 2-4
3. NVS-Gesamtzeit aus vorherigen Bursts bleibt erhalten (im Serial Monitor sichtbar)
2. Erwartung: Summe Session-Minuten = 0 auf Modul 2-4
3. NVS-Gesamtzeit aus vorherigen Sessions bleibt erhalten (im Serial Monitor sichtbar)
**D) Komplett-Reset:**
1. BOOT-Taste (GPIO 0) 3 Sekunden halten
@ -257,7 +257,8 @@ GPIO 4: Push-Button gegen GND (simuliert Laser-AN/AUS, LOW_ACTIVE)
### Ergebnis
- [x] GRATIS -> NET_COUNTING Uebergang nach 20 s
- [x] Session-Minuten incrementieren hart bei 60 Netto-Sekunden
- [x] Gratis-Bursts addieren keine Session-Zeit
- [x] Gratis-Sessions addieren keine Session-Zeit
- [x] Gratis-Sessions senden kein MQTT-Publish
- [x] NVS zaehlt gesamte Laser-AN-Zeit (inkl. Gratiszeit)
- [x] resetTotal() loescht NVS + Session
@ -290,19 +291,19 @@ pio device monitor -e test-mqtt
3. Im MQTT Explorer: `lasercutter/status` erscheint mit `{"online":true,...}` (retained)
4. Nach 60 s: erneuter Heartbeat sichtbar
**B) Session-Publish nach Burst:**
**B) Session-Publish nach Session-Ende:**
1. GPIO 4 Taste druecken (Laser AN) -> Countdown auf Modul 6-8
2. Taste loslassen (Laser AUS)
3. Serial: `BurstEnd erkannt -> publishSession`
2. Taste loslassen (Laser AUS) **nach** Ablauf der Gratiszeit
3. Serial: `SessionEnd -> publishSession`
4. MQTT Explorer: `lasercutter/session` erscheint mit JSON:
```json
{"session_s": 5, "total_min": "0.08", "gratiszeit_s": 20, "ip": "192.168.x.x"}
{"session_minuten": 1, "session_seconds": 5, "gratiszeit_s": 20, "ip": "192.168.x.x"}
```
**C) Gratis-Burst (< 20 s):**
**C) Gratis-Session (< 20 s):**
1. Taste < 20 s druecken und loslassen
2. `lasercutter/session` erscheint mit `"session_s": 0`
3. `total_min` erhoehte sich trotzdem (Gratiszeit zaehlt in NVS)
2. **Kein Publish** auf `lasercutter/session` (Netto-Zeit = 0s)
3. `machine_running_time_min` im naechsten Heartbeat erhoehte sich trotzdem (Gratiszeit zaehlt in NVS)
**D) Reset-Kommando via MQTT:**
1. Im MQTT Explorer auf Topic `lasercutter/reset` publishen
@ -339,9 +340,9 @@ pio device monitor -e test-mqtt
[MQTT] Abonniert: lasercutter/reset
[MQTT] Heartbeat: {"online":true,...} -> OK
...
[LaserTracker] BurstEnd: gesamt=35s netto=15s sessionNetSec=15 total=0.58min
[I][TEST-MQTT] BurstEnd erkannt -> publishSession (lastBurst=15s, total=0.58min)
[MQTT] publishSession: {"session_s":15,...} -> OK
[LaserTracker] SessionEnd: gesamt=35s netto=15s sessionNetSec=15 total=0.58min
[I][TEST-MQTT] SessionEnd -> publishSession (lastSession=15s)
[MQTT] publishSession: {"session_minuten":1,"session_seconds":15,"gratiszeit_s":20,"ip":"192.168.x.x"} -> OK
```
### Checkliste
@ -351,8 +352,8 @@ pio device monitor -e test-mqtt
| Verbindung zu mqtt.majufilo.eu | `[MQTT] Verbunden!` im Serial | [x] |
| Heartbeat beim Connect | `lasercutter/status` retained im MQTT Explorer | [x] |
| Heartbeat alle 60 s | Topic aktualisiert sich periodisch | [x] |
| Session-Publish nach Burst | `lasercutter/session` mit Session-Daten | [x] |
| Gratis-Burst publiziert `session_s: 0` | `total_min` trotzdem erhoehiert | [ ] |
| Session-Publish nach Session-Ende | `lasercutter/session` mit `session_minuten`, `session_seconds` | [x] |
| Gratis-Session publiziert NICHT | kein Topic-Update bei lastSession=0 | [ ] |
| Reset via MQTT (`lasercutter/reset` = `{"reset":true}`) | `total_min` springt auf 0 | [x] |
| LWT `{"online":false}` nach Verbindungsabbruch | Nach 60 s im MQTT Explorer sichtbar | [x] |
| MQTT-Error Modul 5 bei Verbindungsverlust | `E` auf Display Modul 5 | - ungetestet - |
@ -382,7 +383,7 @@ IP-Adresse aus dem Serial Monitor ablesen (erscheint nach WiFi-Connect):
**A) Statusseite `GET /`:**
1. Browser oeffnen: `http://<IP>/`
2. Folgende Felder pruefen:
- Session-Minuten, Gesamtzeit, letzter Burst
- Summe Session-Minuten, Maschinenlaufzeit (gesamt), letzte Laserzeit
- IP-Adresse und MQTT-Status (verbunden/getrennt)
- Broker-Hostname und Gratiszeit
3. Seite aktualisiert sich automatisch alle 10 s
@ -432,5 +433,5 @@ IP-Adresse aus dem Serial Monitor ablesen (erscheint nach WiFi-Connect):
| 2.2 | `test-nvs` | OK | Alle NVS-Felder, Roundtrip, Persistenz, Reset |
| 3.3 | `test-wifi` | OK | Captive Portal, Credentials-Persistenz, Reconnect |
| 4.3 | `test-display-mgr` | OK | Alle show*-Methoden, Modul-Mapping, Fehler-Indikatoren |
| 5.6 | `test-laser-tracker` | OK | Burst-Logik, Gratiszeit, Session/NVS-Trennung, Reset |
| 5.6 | `test-laser-tracker` | OK | Session-Logik, Gratiszeit, Summe Session/NVS-Trennung, Reset |
| 6.5 | `test-mqtt` | OK | mqtt.majufilo.eu TLS:8883, publishSession, Heartbeat, Reset-Subscribe |