OTA implementeren voor client ESP #3
Labels
No labels
bug
bug
critical
documentation
duplicate
enhancement
enhancement
feature
good first issue
help wanted
invalid
question
security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
eddy/Project_SylDa#3
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Doel
Client ESP (SylDa_Client) moet OTA updates kunnen ontvangen via BLE, net als de server dat via de OTA characteristic doet.
Huidige situatie
main.cpp): OTA characteristic op UUIDbeb5...f26da,esp_ota_begin/write/endflow werkt (behalve chunk-0 bug, zie #1)client.cpp): geen OTA characteristic, moet na provisioning als BLE peripheral fungerenOtaManagerondersteunt OTA via BLE, path is al device-mode-awareAanpak
firmware/client/firmware.bin) al aanwezigGerelateerde bestanden
src/client.cpp: BLE peripheral setup, OTA characteristicandroid/.../OtaManager.kt: werkt nu viaBleRelayManager(zou ook met client moeten werken)android/.../SettingsActivity.kt: OTA triggerAfhankelijkheden
Implementatie status — OTA voor client ESP
Client OTA is volledig geïmplementeerd (firmware v20/client v8):
Client firmware (
src/client.cpp)beb5483e-36e1-4688-b7f5-ea07361f26da— zelfde protocol als server (START chunk, data chunks met seq+ACK/NAK, SHA256 verify, 0xFF confirm)1om aan de server te melden dat OTA klaarstaatSylDa_Client_OTACLIENT_OTA_TARGETcharacteristic van de server, als die hoger is dan eigen versie → OTA modeServer (
src/main.cpp)beb5483e-36e1-4688-b7f5-ea07361f26dd) — Android schrijft hier de target firmwareversie, server geeft deze door aan verbonden clientAndroid
ClientOtaConnector.kt— BLE GATT client connector voor OTA, implementeertOtaTransportinterfaceBleRelayManager.kt—writeClientOtaTarget(version)schrijft target versie naar serverSettingsActivity.kt—startClientOtaUpdate()flow:writeClientOtaTarget()SylDa_Client_OTAperipheralClientOtaConnector+OtaManagerOtaManager.kt— transport-agnostisch, werkt met zowel server (BleRelayManager) als client (ClientOtaConnector)Flow
Resterend (optioneel): Android zou het scan+OTA gedeelte kunnen automatiseren ipv handmatig in Settings. Voor nu is de implementatie compleet en functioneel.
Vervolg: Client OTA status zichtbaar maken in app
Probleem
Zodra de client disconnect om OTA peripheral te worden (
SylDa_Client_OTA), heeft de app geen zicht meer op de client. De gebruiker weet niet wanneer hij in Settings de OTA kan starten.Oplossing
Een nieuw
CLIENT_OTA_STATUScharacteristic op de server (beb5...26df):0x01vlak vóór disconnect naar OTA peripheral0x01: toast + navigeer naar Settings met client+BLE vooringesteld0x00(client up-to-date): poll stoptwriteClientOtaTargetgebeurt nu bij elke BLE connect inonFirmwareVersion(niet pas in Settings). Idempotent, dus veilig.Een
clientOtaTriggeredin-memory flag voorkomt dubbele toasts/navigatie bij herhaalde polls.Flow
Server OTA onderbreking
Client OTA status staat in NVS → overleeft server reboot. Bij herconnect schrijft Android target opnieuw (idempotent), poll herstart, vindt
0x01→ OTA gaat door.Te wijzigen bestanden
src/main.cpp— new characteristic + NVS persistencesrc/client.cpp— write status before OTA peripheral + fix!connectedbug in transitieandroid/.../BleRelayManager.kt— readCLIENT_OTA_STATUS+ callbackandroid/.../BleStatus.kt—onClientOtaStatuscallbackandroid/.../MainActivity.kt— poller,writeClientOtaTargetop connect, triggered flagandroid/.../SettingsActivity.kt— Intent extrastartClientOtapre-selectImplementatieplan:
docs/superpowers/plans/2026-08-04-client-ota-status-poll.mdImplementatieplan: Client BLE OTA via Server Broker
Na brainstorm-sessie is het volgende ontwerp vastgelegd:
Architectuur
CLIENT_REGISTRY(Read/Notify): Client meldt UUID + versie aan ServerCLIENT_CONTROL(Write/Notify): Notificaties voor update-beschikbaarheidFlow
CLIENT_REGISTRYUPDATE_AVAILABLE(0x10) naarCLIENT_CONTROL(Target UUID)NimBLEServeralsSylDa_Client_OTA_[UUID]+ schrijftREADY(0x20) terugSpecificatie
Zie
docs/superpowers/specs/2026-08-04-client-ble-ota-spec.mdvoor exacte byte-structuren en state-machines.Implementatieplan
Zie
docs/superpowers/plans/2026-08-04-client-ble-ota.mdvoor gedetailleerde taken.Taken
Branch:
feature/client-ble-ota