From 4111f451d40f497e68e8e57db1080dd43bbcd8e1 Mon Sep 17 00:00:00 2001 From: MaPaLo76 <72209721+MaPaLo76@users.noreply.github.com> Date: Mon, 23 Feb 2026 19:53:35 +0100 Subject: [PATCH] docs(tests): Burst-Begriff durch Session ersetzt, MQTT-Payloads aktualisiert --- test_sketches/README.md | 47 +++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/test_sketches/README.md b/test_sketches/README.md index 328edde..13893c6 100644 --- a/test_sketches/README.md +++ b/test_sketches/README.md @@ -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:///` 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 | \ No newline at end of file