4 KiB
LED-signalering: stabiele verbinding
Issue: #4 — Leds mogen uit na een minuut stabiele verbinding Datum: 2026-08-02 Status: goedgekeurd
Doel
Uniforme LED-signalering voor zowel server als client. De LED dient als debug-indicator tijdens opstarten en bij verbindingsproblemen. Na 60 seconden continue stabiele verbinding schakelt de LED uit.
Kleurenschema
Identiek voor server (main.cpp) en client (client.cpp):
| State | LED | Prioriteit |
|---|---|---|
| OTA in progress | Groen knipperend (100ms interval) | 1 (hoogst) |
| OTA completed, waiting confirm | Geel vast | 1 |
| Geen verbinding | Rood | 2 |
| Verbinding actief (< 60s) | Geel | 3 |
| Verbinding stabiel (>= 60s) | Uit | 4 (laagst) |
| Relais-flash (overlay) | Groen 150ms | overlay |
Relais-flash is een overlay: toont kort groen bij verandering in relais-status, daarna keert LED terug naar de kleur die hoort bij de huidige verbindingsstatus.
Timer-logica
- Timer (
connectionStableMs) start zodra de eerste verbinding tot stand komt connectionStableMstelt op zolang er minstens 1 verbinding is (connectedCount > 0 voor server, connected == true voor client)- Nieuwe verbindingen die later bijkomen resetten de timer niet
- Bij disconnect van een verbinding terwijl er nog andere verbindingen zijn: timer loopt door
- Pas als alle verbindingen wegvallen:
connectionStableMs= 0, LED direct rood - Drempel:
STABLE_LED_TIMEOUT_MS = 60000
Server-specifiek
connectedCount: aantal actieve BLE-clients (0-2)- Timer loopt als
connectedCount > 0 - Alle clients disconnect = reset
Client-specifiek
connected: boolean, of client verbonden is met server- Timer loopt als
connected == true - Disconnect = reset
Relais-flash mechanisme
- Detectie: vergelijk huidige relais-state met vorige loop-iteratie
- Bij verandering: zet
relayFlashUntil = millis() + 150 - Zolang
millis() < relayFlashUntil: LED groen (overschrijft verbindingskleur) - Flash reset de 60s timer niet
- Server: detecteert verandering in
relay1State || relay2State(combinatie van touch, button, en BLE-commands) - Client: detecteert verandering in
relay1State || relay2State(alleen touch/button)
OTA (beide firmwares)
OTA heeft hoogste prioriteit en override alle andere LED-states:
- OTA in progress (
otaInProgress == true): groen knipperend, 100ms interval - OTA completed, waiting confirm (
otaEnded == true && !otaConfirmed): geel vast - OTA confirm timeout of OTA error: valt terug naar normale verbindings-LED
- OTA success + reboot: groen vast, dan reboot
Client heeft OTA-logica nog niet geïmplementeerd, maar de LED-code wordt alvast voorbereid met dezelfde OTA-override structuur zodat toekomstige OTA-implementatie direct past.
LED-update volgorde in loop()
1. Bepaal base-kleur op basis van verbindingsstatus (rood/geel/uit)
2. Controleer relais-flash: als actief -> groen
3. Controleer OTA-override: als actief -> OTA-kleur
4. FastLED.show()
Wijzigingen per bestand
src/main.cpp (server)
- Toevoegen:
STABLE_LED_TIMEOUT_MS,connectionStableMs,relayFlashUntil,lastRelayActive - Aanpassen: LED-logica in
loop()— base-kleur uitconnectionStableMsi.p.v.connectedCount > 0 - Toevoegen: relais-flash detectie
- Behouden: OTA LED-override (werkt al, prioriteit blijft hoogst)
- Verwijderen: setup LED-blinks (drie groene knipperingen) — vervangen door rood (geen verbinding)
src/client.cpp (client)
- Toevoegen:
STABLE_LED_TIMEOUT_MS,connectionStableMs,relayFlashUntil,lastRelayActive - Aanpassen: LED-logica in
loop()— base-kleur uitconnectionStableMs, geen aparte relais-kleur meer - Toevoegen: relais-flash detectie
- Toevoegen: OTA-override structuur (placeholder,
otaInProgressdefaultfalse) - Setup: LED rood i.p.v. direct rood (blijft rood, maar nu als onderdeel van uniform schema)
src/version.h
- Server versie bump naar "16"
- Client versie bump naar "2"