docs: remove non-existent features from README (broker, client OTA server mode)
All checks were successful
CI / build (push) Successful in 1m12s

This commit is contained in:
eddy 2026-08-05 07:28:46 +02:00
commit 290a87ee65

View file

@ -123,6 +123,7 @@ module → App: SylDa_Server\n of SylDa_Client\n (device type)
App → module: KEY?\n
module → App: DEVICE_ID:<hex>\n (module UUID, 16 bytes = 32 hex)
module → App: PSK:<hex>\n (PSK, 32 bytes = 64 hex)
module → App: SERVER_UUID:<hex>\n (alleen client: opgeslagen server UUID, 32 hex)
module → App: NO_KEY\n (als module nog geen key heeft)
App → module: SET_KEY:<hex>\n (nieuwe PSK schrijven, 64 hex)
@ -139,15 +140,6 @@ module → App: OK\n
De server ondersteunt tot **2 gelijktijdige BLE-clients** (MAX_CLIENTS 2). Elke client krijgt een onafhankelijke ECDH-handshake, AES-sleutel en sequence counter. Relais-commando's van alle clients worden gecombineerd: een relais gaat aan als minimaal één client het aan-commando stuurt (OR-logica).
De server kan OTA-updates distribueren naar verbonden clients via het **broker protocol**:
```
BROKER_CMD_UPDATE_AVAILABLE (0x10) — server vertelt client dat er een update klaarstaat
BROKER_CMD_CLIENT_READY (0x20) — client meldt zich klaar voor OTA
```
Broker packets zijn versleuteld met AES-256-GCM (48 bytes: 4 seq + 8 nonce + 20 plain + 16 tag), onafhankelijk van relay-commando encryptie.
### Beveiligingsanalyse
| Aanval | Hoe geweerd |
@ -177,16 +169,14 @@ De firmware kan **over-the-air** worden geüpdatet via BLE (zonder USB):
Tijdens OTA zijn relais geforceerd UIT en knippert de LED groen. Na afloop (wachtend op confirm) is de LED geel.
> **Client OTA:** Clients kunnen ook OTA ontvangen. De server stuurt `BROKER_CMD_UPDATE_AVAILABLE`, de client antwoordt `BROKER_CMD_CLIENT_READY`, en start vervolgens een eigen BLE OTA-server (`SylDa_Client_OTA_XX`). De app verbindt met de client direct voor de OTA transfer.
## Firmware
De firmware is geschreven in C++ met PlatformIO en de Arduino-framework. BLE: ESP32 NimBLE library, crypto: mbedtls (ingebouwd in ESP-IDF).
| Environment | Bronbestand | Rol |
|---|---|---|
| `s3lite-server` | `src/main.cpp` | Ontvangt BLE-verbindingen, bedient relais, broker voor OTA-distributie |
| `s3lite-client` | `src/client.cpp` | Verbindt als BLE-central met server, stuurt relais-commando's, ontvangt OTA |
| `s3lite-server` | `src/main.cpp` | Ontvangt BLE-verbindingen, bedient relais |
| `s3lite-client` | `src/client.cpp` | Verbindt als BLE-central met server, stuurt relais-commando's |
Firmwareversies: `version.txt` (single source of truth) → `src/version.h` (gegenereerd door `tools/pio_version_pre.py`) + `SylDaVersions.kt` (Android). Versiebeheer via `tools/check_versions.sh`.
@ -217,8 +207,6 @@ De touch sensoren, BLE, en interne knop werken onafhankelijk (OR-logica). De int
| VERSION | `beb5483e-36e1-4688-b7f5-ea07361f26db` | READ | Firmware versie string |
| OTA | `beb5483e-36e1-4688-b7f5-ea07361f26da` | WRITE_NR, NOTIFY | BLE OTA firmware update |
| ECDH | `beb5483e-36e1-4688-b7f5-ea07361f26dc` | WRITE_NR, NOTIFY | ECDH sleuteluitwisseling |
| CLIENT_REGISTRY | `beb5483e-36e1-4688-b7f5-ea07361f26dd` | READ, WRITE_NR, NOTIFY | Client registratie (UUID + versie) |
| CLIENT_CONTROL | `beb5483e-36e1-4688-b7f5-ea07361f26de` | WRITE_NR, NOTIFY | Broker protocol (OTA notificaties) |
### Key provisioning
@ -261,7 +249,7 @@ Setup done.
**Client firmware log (geprovisioneerd):**
```
=== AtomS3 Lite SylDa Client v6 ===
=== SylDa Client v5 ===
PSK loaded from NVS
UUID loaded from NVS
BLE: scanning...
@ -323,7 +311,6 @@ Firmware binaries: `tools/copy_firmware.sh` kopieert `.bin` bestanden naar `asse
- **Key exchange geïntegreerd:** Module bijwerken = versie check → flashen (indien nodig) → PSK-uitwisseling — volledig automatisch
- **Thema-selector:** Instellingen → Weergave met Systeem, Licht of Donker
- **Permissies:** Vraagt BLUETOOTH_SCAN en BLUETOOTH_CONNECT. Bij weigeren wordt verwezen naar Instellingen
- **Broker protocol:** Ontvangt `CLIENT_CONTROL` notificaties van de server (OTA beschikbaar, client ready)
### Instellingenscherm
@ -346,7 +333,7 @@ De PSK en UUIDs worden opgeslagen in SharedPreferences en overleven app-herstart
Vereisten:
- Android SDK (API 34+)
- Java 21 (Java 26 werkt niet met Gradle)
- Java 17 target (JDK 21 voor Gradle — Java 26 werkt niet)
- Gradle 8.14 (via wrapper)
- AGP 8.5.2, Kotlin 2.0.21 (K2 compiler)
- USB host support (raw Android USB API, geen externe serial library)
@ -401,8 +388,8 @@ Project_SylDa/
├── version.txt # Single source of truth voor firmwareversies
├── icon.png / icon.svg # Project icon
├── src/
│ ├── main.cpp # Server firmware (BLE + ECDH/AES + NVS + USB + touch + relais + OTA + broker)
│ ├── client.cpp # Client firmware (BLE central + ECDH/AES + touch + relais + OTA server mode)
│ ├── main.cpp # Server firmware (BLE + ECDH/AES + NVS + USB + touch + relais + OTA)
│ ├── client.cpp # Client firmware (BLE central + ECDH/AES + touch + relais)
│ ├── ecdh_helper.h # ECDH crypto helper (secp256r1, AES-sleutel afleiding, pubkey HMAC)
│ └── version.h # Auto-gegenereerd uit version.txt — niet handmatig bewerken
├── tools/
@ -492,11 +479,10 @@ HMAC-SHA256 (vroegere versies) bood authenticatie maar geen confidentiality. ECD
- De app gebruikt raw Android USB API (`UsbDeviceConnection.bulkTransfer`) — geen externe serial library.
- `minSdk` is 26 (Android 8.0). `compileSdk`/`targetSdk` blijft op 34.
- Sequence counters starten bij 1 (niet 0), wrappen bij 1.000.000.
- BLE MTU: server stelt 248 in (ESP32 NimBLE limiet), app vraagt 512. OTA/ECDH chunks passen zich aan aan `negotiatedMtu - 3`.
- BLE MTU: server stelt 248 in (ESP32 NimBLE limiet), app vraagt 512. OTA/ECDH chunks passen zich aan aan `negotiatedMtu - 7`.
- Server krijgt maximaal 2 gelijktijdige BLE-clients. Client slaat server BLE-adres op in NVS voor snelle reconnect (valt terug op scan als adres niet werkt).
- Server advertising bevat manufacturer data (0xFFFF) met eerste 4 bytes van device UUID voor snelle identificatie.
- OTA: 500-byte chunks (aangepast aan MTU), 3 retries per chunk, SHA-256 hash verificatie, 10s 0xFF confirm timeout.
- Client in OTA server modus advertiseert als `SylDa_Client_OTA_XX` (XX = laatste 2 hex van device UUID).
## Release