Repository navigation
feat: Qardio QardioBase / QardioBase 2 support - #1557
Conversation
92d005e to
2010ceb
Compare
|
Hello, requesting a review from @oliexdev or another maintainer |
7b0b160 to
2a66f5f
Compare
|
JSON. Wi-Fi read. The Wi-Fi config read returns SSID and passkey in clear text, only to show a Strings. 54 new strings is a lot for one driver, and each one goes to every translator on
|
Qardio shut down in 2025 and its app no longer works; the scales keep
working over BLE. The protocol comes from the last official Android app
(2.5.1) and was verified on a QardioBase 2 (B200).
Features:
- Weigh-ins over BLE: weight and impedance, plus the scale's own body
fat, water, skeletal muscle and bone when it recognises the person.
The weigh-in time is taken from the scale (Unix time in the result id).
- User management: each openScale user is stored as a profile on the
scale (name, height, birthday, sex, weight unit), kept up to date and
re-registered after a reset. Several phones can share one scale.
- Weigh-ins are saved to the active openScale user. Results the scale
assigns to another profile are not saved (with a warning); guest
weigh-ins follow the official app and are not saved unless "Save
guest weigh-ins" is enabled. A guest result is held for 30 s so the
user can pick their name on the scale; another weigh-in in that time
resolves the held one first instead of dropping it.
- A weigh-in made while no phone was connected is collected on the next
connection, quietly unless it is under 2 minutes old. Each weigh-in is
saved once: by result id on the B200. The B100 sends no id or time, so
a result read at connect is taken only if the first state is 6 (the
weigh-in finished just before the connection; it gets the time of
collection), and repeated reads are dropped by value per connection.
- Device settings, in sections:
- Scale (read-only, from the last connection): model, firmware and
software revision, battery, and the profiles on the scale (names for those registered from this
phone; the scale's list carries ids only).
- Scale settings: impedance and vibration switches, scale-wide,
applied once on the next connection by rewriting the own profile
slot (the flags travel with every profile write, as in the official
app).
- This phone: select my profile when connecting, save guest
weigh-ins.
- Maintenance: resend profiles; reset (the scale cannot delete a
single user); experimental legacy reset of the official app for
firmware before 1.8 (clear user and Wi-Fi config).
- Reset is a step of its own: it removes all users and the Wi-Fi network
(verified on a B200) and restores the scale's defaults, then
disconnects, so a reset scale can be given away. The next connection
registers the profile again and restores the previous impedance and
vibration settings.
- Configuration mode and reset give up after 10 s without an answer
(the change stays pending), so the phone never holds the scale's
single connection.
- Time sync and battery level.
Notes:
- Profile names must be lowercase letters/digits, max 6, as the
official app enforced; the firmware never matches other names.
Accents are dropped ("José" -> "jose"); a name without Latin letters
or digits becomes "user".
- Only values the scale reports are published; openScale derives BMI,
BMR and lean body mass. The scale's "mt" (Qardio's muscle share) is
documented and dropped; "sm" and "bmc" meanings are inferred and the
evidence is written down in QardioBaseLib.
- JSON goes through org.json; both test classes run under Robolectric.
Library tests use captured B200 payloads.
- The Wi-Fi config is never read: it returns the SSID and passkey in
clear text.
- Only the QardioBase 2 (B200) was tested. The original QardioBase
(B100) uses the same service in the official app but is untested.
- Photo of a QardioBase 2 added to the scale gallery
(docs/scales/qardio_qardiobase2.jpg).
- QardioBase X is a different device (standard SIG profile) and is not
covered.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2a66f5f to
c8b7c7f
Compare
|
Thanks for the review! All three done:
Also rebased onto master to fix the conflict in scale_catalog_remarks.txt. |
|
Thanks for your PR 👍 |
Qardio shut down in 2025 and its app no longer works; the scales keep
working over BLE. The protocol comes from the last official Android app
(2.5.1) and was verified on a QardioBase 2 (B200).
Features:
fat, water, skeletal muscle and bone when it recognises the person.
The weigh-in time is taken from the scale (Unix time in the result id).
scale (name, height, birthday, sex, weight unit), kept up to date and
re-registered after a reset. Several phones can share one scale.
assigns to another profile are not saved (with a warning); guest
weigh-ins follow the official app and are not saved unless "Save
guest weigh-ins" is enabled. A guest result is held for 30 s so the
user can pick their name on the scale.
software revision, battery, whether a Wi-Fi network is stored, and
the profiles on the scale (names for those registered from this
phone; the scale's list carries ids only).
applied once on the next connection by rewriting the own profile
slot (the flags travel with every profile write, as in the official
app).
weigh-ins.
single user); experimental legacy reset of the official app for
firmware before 1.8 (clear user and Wi-Fi config).
(verified on a B200) and restores the scale's defaults, then
disconnects, so a reset scale can be given away. The next connection
registers the profile again and restores the previous impedance and
vibration settings.
scale settings change.
Notes:
official app enforced; the firmware never matches other names.
BMR and lean body mass. The scale's "mt" (Qardio's muscle share) is
documented and dropped; "sm" and "bmc" meanings are inferred and the
evidence is written down in QardioBaseLib.
writer); both test classes run on the JVM. Library tests use captured
B200 payloads.
(B100) uses the same service in the official app but is untested.
(docs/scales/qardio_qardiobase2.jpg).
covered.
Known limitations
Weigh-ins are saved only for the active openScale user. If the scale recognises another openScale user from the same phone, the result is not saved to that user. Use one phone per person, or switch the active user.
Driver settings are stored per handler class, not per scale. Two Qardio scales paired with one phone share the settings, including a pending reset.
Only the QardioBase 2 (B200) was tested on hardware. The original QardioBase (B100) is handled from the official app’s code; testing by a B100 owner is welcome.