Skip to content

Add support for the Hume Health Dara 2.0 scale - #1486

Open
andyjk15 wants to merge 1 commit into
oliexdev:masterfrom
andyjk15:add-hume-dara-2-support
Open

Add support for the Hume Health Dara 2.0 scale#1486
andyjk15 wants to merge 1 commit into
oliexdev:masterfrom
andyjk15:add-hume-dara-2-support

Conversation

@andyjk15

Copy link
Copy Markdown

Closes #1448.

What

Adds HumeDara2Handler for the Hume Health "Dara 2.0" (BLE Device Information reports manufacturer "LeFu Scale"). It's a different, unrelated device from FitTrack's own "Dara" (added in #1430) despite sharing the model name — a different chip family (0xFFF0/0xCF framing vs. 0xFFB0/AC 02…), which is why FitTrackDaraHandler's "FITTRACK"-prefixed name match never caught it, and why it still showed "Not Supported" after #1430 shipped.

Same GATT layout as ExcelvanCF36xHandler ("Electronic Scale" units) — 0xFFF0/0xFFF1 write / 0xFFF4 notify, same 0xCF frame header, same 8-byte user-config write — evidently the same underlying chip family under a different rebrand. Kept as a separate handler since the measurement frame is a different, shorter shape and the device names don't collide.

Measurements

  • Weight — exact match to the Hume app's own display across five real weigh-ins.
  • Body fat %, water %, muscle %, bone, BMR — computed from a decoded raw impedance reading via openScale's existing StandardImpedanceLib (generic BIA formula), not the device's own numbers. The remaining frame bytes don't correlate with anything the Hume app displays, and there isn't room in an 11-byte frame for the ~13 metrics Hume shows — most of it is evidently computed client-side by Hume, not transmitted. Measured accuracy against one real reading: skeletal muscle %/BMR within ~1-2%, fat%/water%/lean mass within ~15%, bone ~24%. Full reasoning and the ground-truth frame table are in the class doc comment.
  • Subcutaneous fat, visceral fat index, and a "skeletal mass" distinct from muscle mass aren't attempted — those need segmental/multi-frequency BIA hardware a single whole-body impedance reading can't provide.

How it was verified

  • Protocol reverse-engineered from five real weigh-ins on the actual device (Debug-mode GATT dump + raw frame logging), each cross-checked against the Hume app's own simultaneous reading.
  • Weight and impedance decode confirmed exact/stable across all five captures; checksum formula verified against all five.
  • Built and tested end-to-end on the real device: connect → weigh-in → measurement saved in openScale, repeated across multiple sessions.
  • HumeDara2HandlerTest covers weight/impedance decode, checksum, and live-vs-locked frame detection against the real captured frames. ScaleFactoryTest pins this device against the FitTrack/Excelvan collision that caused the original bug.

Notes

  • implemented still claims BODY_COMPOSITION since the handler does populate those fields, but they're a generic-formula approximation, not device-reported values — documented prominently in the class doc comment so nobody mistakes them for exact.

Fixes oliexdev#1448. This device advertises literally as "Dara 2.0" and its BLE
Device Information service reports manufacturer "LeFu Scale" — not
FitTrack, despite sharing a model name with FitTrack's unrelated "Dara"
scale (a different product on a different chip family, 0xFFB0/AC02
framing vs this device's 0xFFF0/0xCF framing). That name collision is
why FitTrackDaraHandler's "FITTRACK"-prefixed name match never fired
for this unit, even after 3.1.2 shipped named FitTrack Dara 2.0 support.

New HumeDara2Handler matches on the device's actual advertised name and
decodes the real 11-byte measurement frame (reverse-engineered from five
real weigh-ins, ground truth documented in the class doc comment):
weight and a raw BIA impedance reading, both cross-checked against the
official Hume app's own display. Body composition (fat/water/muscle/
bone/BMR) is computed from that impedance via openScale's existing
StandardImpedanceLib generic formula rather than guessed frame offsets,
since the remaining frame bytes don't correlate with anything Hume's
own app displays — this is an approximation of Hume's proprietary
numbers, not a device reading, and the class doc comment states the
measured accuracy against a real reading (~1-2% off on skeletal muscle
%/BMR, ~15% on fat%/water%/lean mass, ~24% on bone).

Kept as a sibling of ExcelvanCF36xHandler (same GATT layout and 0xCF
frame header, evidently the same underlying chip family under a
different rebrand) rather than merged into it, since the measurement
frame shape differs and the device names don't collide — matching this
codebase's existing one-handler-per-rebrand pattern.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dara 2.0 (Inlife handler): CCC descriptor not found on fff1 during setNotify — IllegalArgumentException

1 participant