doc: plan för openScale BT-vågsintegration (GPL-relicens, alla drivrutiner)
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
This commit is contained in:
2026-07-26 11:24:19 +02:00
parent b33a849f23
commit a99c11524b
2 changed files with 73 additions and 1 deletions

View File

@@ -0,0 +1,68 @@
# openScale BT-vågar — integrationsplan
Bygga in [openScale](https://github.com/oliexdev/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. `ScaleFactory` auto-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). `ScaleFactory` returnerar första matchande handler.
- Tre kopplingslägen: `CONNECT_GATT`, `BROADCAST_ONLY`, `CLASSIC_SPP` med var
sin adapter (Gatt/Broadcast/Spp).
- `ScaleMeasurement` bär weight, fat, water, muscle, visceralFat, bone, lbm,
bmr, protein, impedance m.m. → vi mappar weight + muscle/fat/water till vår
`BodyMeasurement` (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)
1. **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.*
2. **Porta bluetooth-paketet** — vendora `com.health.openscale.core.bluetooth`
(ScaleCommunicator, ScaleFactory, scales/, adaptrar, data/, libs/) med
copyright-headers kvar. Slimmad `ScaleMeasurement`/`ScaleUser`. Får det att
kompilera mot Blessed.
3. **Skanna + koppla** — "Anslut våg" i inställningar: skanna BLE, kör
`ScaleFactory` mot varje enhet, visa matchade vågar, spara vald MAC.
4. **Väg dig-flöde** — knapp som skannar/kopplar vald våg, tar emot en
`ScaleMeasurement`, förhandsvisar och sparar via `addBodyMeasurement`
(offline-kön tar resten). Live-status ("står på vågen…").
5. **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.
6. **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.

View File

@@ -61,7 +61,11 @@ mallar, grunddata och profil.
mätningar från profilen med datumväljare, viktgraf i statistiken med
glidande medelvärde och linjär trendlinje. Profilens bodyWeightKg
speglar alltid senaste mätningen.
4. **Passhistorik** — lista, visa, redigera och ta bort tidigare pass.
4. **BT-våg via openScale-drivrutiner** *(planerad)* — hämta vägningar
(vikt + %muskler/fett/vatten) direkt från en Bluetooth-våg genom att
bädda in openScales drivrutiner. Kräver relicens till GPL-3.0. Full plan:
[`doc/openscale-integration.md`](openscale-integration.md).
5. **Passhistorik** — lista, visa, redigera och ta bort tidigare pass.
4. **Logga lyft (snabbloggning) + PB** — enkel lyftlogg och PB-matrisen.
5. **Statistik** — perioder (vecka/månad/halvår/år), KPI-kort, trenddiagram,
muskelfördelning, aktivitets-heatmap.