Add support for PICOOC Mini Lite (PICOOC-L broadcast scale) - #1512
Conversation
Non-connectable PICOOC-L advertisements carry weight and impedance; body composition is a clean-room port of the vendor's 4.3.0 White/Caucasian BIA path, with an online learner for the vendor's anchor_weight/anchor_beta profile state. Plumbs the existing useAssistedWeighing flag (9436dcf) into ScaleUser so the handler can skip composition while assisted weighing is active.
|
I reverted the I made the two new types generic ( Smaller things: dropped the BMI write ( Two questions, no code needed:
|
|
Yes, 0x39 repeats. The attached log contains two weighings, with the scale going to sleep between them. The second weighing included extra weight: 82.0 → 86.3 Restarting scanning during that burst could accept the same result again. In another capture, two separate weighings produced identical payloads, so comparing The 0x39 check comes from the vendor app’s isTrueWeightData(). The 0x38 test packet is synthetic; treating other states as “in progress” was my unverified Agreed on adding the White/Caucasian model limitation to the device settings. One concern about useAssistedWeighing: composition values are discarded before saving, but the handler has already persisted anchor and learner state. For a |
|
thanks for your PR 👍 |
Closes #1511.
Model: PICOOC Mini Lite, advertises as
PICOOC-L— a non-connectable broadcast scale (weight and impedance inside BLE manufacturer-specific data), so the handler uses broadcast-only mode with no pairing, like the AiLink family.What works
0x39; in-progress frames re-arm the completion guard)anchor_weight/anchor_bataprofile calibration: a beta cluster is promoted after four nearby BIA measurements and persisted per user; calibration resets when profile inputs changeDesign notes (per the wiki ground rules)
PicoocWhiteBodyComposition.kt(BIA math + anchor learner), free of Android dependencies and unit-tested on the JVM; the handler stays a thin byte-moving layerPICOOC-Lname match, registered inScaleFactoryimmediately beforeScaleupHandler's generic0xD0manufacturer match (with a comment); catalog fixture + remark addedvalues/strings.xmlonly; translations to follow via WeblateShared-infrastructure touch (please double-check)
Two lines plumb the existing
useAssistedWeighingflag (introduced for UI/database in 9436dcf) throughScaleUserinto the Bluetooth layer, so the handler can suppress body composition while assisted weighing is active. No other handler reads or is affected by the field; happy to split this into a separate PR if preferred.Testing
./gradlew testis green