All checks were successful
release / build-release (push) Successful in 6m30s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
3.7 KiB
3.7 KiB
openScale BT-vågar — integrationsplan
Bygga in openScale:s Bluetooth- drivrutiner i FitnessDroid så att vägningar (vikt + %muskler/fett/vatten) kan hämtas direkt från en BT-våg in i appens kroppsmätningar.
Beslut (2026-07-26)
- Licens: FitnessDroid relicensas till GPL-3.0. openScale är GPL-3.0; att bädda in deras kod kräver att hela appen blir GPL-3.0. LICENSE byts, och källfilerna som kommer från openScale behåller sina copyright-headers.
- Alla drivrutiner portas (hela
core/bluetooth-paketet, ~55 handlers + adaptrar), inte bara en modell.ScaleFactoryauto-detekterar vågen vid skanning precis som i openScale. - Attribution: en About-vy under Profil som anger att appen använder openScales drivrutiner, med länk till deras GitHub och GPL-3.0-licensen, plus en lista på öppen källkod som används (openScale, Blessed-Kotlin).
Teknik (bekräftat från repot)
- openScale använder Blessed-Kotlin (coroutine-BLE-wrapper) — läggs till som Gradle-beroende; vi portar drivrutinerna som ligger ovanpå, inte BLE-plumbingen.
ScaleDeviceHandler.supportFor(device)→DeviceSupport(displayName, linkMode, tuningProfile).ScaleFactoryreturnerar första matchande handler.- Tre kopplingslägen:
CONNECT_GATT,BROADCAST_ONLY,CLASSIC_SPPmed var sin adapter (Gatt/Broadcast/Spp). ScaleMeasurementbär weight, fat, water, muscle, visceralFat, bone, lbm, bmr, protein, impedance m.m. → vi mappar weight + muscle/fat/water till vårBodyMeasurement(resten kan tas in senare).- minSdk 31 matchar vår app (BLE-permissions
BLUETOOTH_SCAN/_CONNECT).
Fallgrop: impedansvågar behöver användarprofil
Vissa vågar skickar bara rå impedans; openScale räknar då själv ut fett/muskler/vatten med en formel som kräver längd, ålder, kön (ScaleUser). Vi måste därför:
- Lägga till längd/födelseår/kön i profilen (lokalt; kan senare speglas i API).
- Porta openScales BIA-beräkning för de vågar som kräver den. Vågar som räknar ombord och skickar färdiga procent behöver inte detta.
Milstolpar (byggbara steg)
- Grund + licens + About — LICENSE → GPL-3.0;
blessed-kotlin-beroende; BLE-permissions i manifestet; About-vy under Profil (attribution + länkar + openetlicens-text); körruntime-permission-flöde. Ingen vågkod än — bara att allt kompilerar och About visas. - Porta bluetooth-paketet — vendora
com.health.openscale.core.bluetooth(ScaleCommunicator, ScaleFactory, scales/, adaptrar, data/, libs/) med copyright-headers kvar. SlimmadScaleMeasurement/ScaleUser. Får det att kompilera mot Blessed. - Skanna + koppla — "Anslut våg" i inställningar: skanna BLE, kör
ScaleFactorymot varje enhet, visa matchade vågar, spara vald MAC. - Väg dig-flöde — knapp som skannar/kopplar vald våg, tar emot en
ScaleMeasurement, förhandsvisar och sparar viaaddBodyMeasurement(offline-kön tar resten). Live-status ("står på vågen…"). - Impedansvågar — profilfält (längd/ålder/kön) + BIA-beräkning för de vågar som skickar rå impedans. Verifieras mot din våg.
- Polering + docs — felhantering, timeouts, ominställning av våg; uppdatera README/wiki + infra-Doc (GPL-relicens noterad).
Öppna frågor / risker
- Vilken våg du har avgör om milstolpe 5 (impedans-BIA) behövs eller om din våg skickar färdiga procent. Identifieras i milstolpe 3 via skanning.
- Blessed-Kotlins exakta koordinater/version verifieras vid milstolpe 1.
- APK växer (drivrutiner + BLE-lib) — troligen någon MB, oproblematiskt.
- GPL-relicens är permanent för koden; medvetet val.