Skip to content

Supported Scales

35 protocol adapters, plus a Standard BT SIG catch-all for any spec-compliant scale. Most adapters cover several rebrands, so real coverage is wider than the count.

Scale List

Weight only means weight is reported normally but body composition is estimated from BMI. Known Limitations says why, per scale. Most popular brands first.

Brand / ModelsBody compositionNotes
Xiaomi Mi Scale 2 (MIBCS / MIBFS / XMTZC05HM)YesNo pairing needed; works on every transport
Xiaomi Mi Smart Scale 2 (XMTZC04HM / MI SCALE2)Weight onlyNo pairing needed
Silvergear Smart Scale 108Weight onlyBroadcast only; the display unit does not matter
Xiaomi Mijia Body Composition Scale S800 (ms116)Weight onlyNeeds a per-device ble.bind_key from the Mi cloud
Xiaomi Body Composition Scale S400 (MJTZC01YM)YesNeeds a per-device ble.bind_key from the Mi cloud plus ble.scale_mac; weigh barefoot for impedance
Renpho ES-CS20M / ES-32MD / Elis 1 / FITINDEX / Sencor (QN-Scale)YesThe most common protocol; many rebrands
Renpho ES-WBE28YesStandard GATT variant
Renpho ES-26BB-BYes
Renpho R-MSC04 (MorphoScan Nova)Weight only
1byone / Eufy C1 / P1Yes
Eufy Smart Scale P2 (T9148) / P2 Pro (T9149)Weight only
Yunmai Signal / Mini / SEYesThe scale sends its own body composition
Beurer BF700 / BF710 / BF800YesBF710: register it in the Beurer app first
Salter SA00656 / SA00432 (Salter Health)Weight onlyPowers off after weighing; suits continuous mode
Sanitas SBF70 / SBF75Yes
Sanitas SBF72 / SBF73 / Beurer BF915YesNeeds user slot 1 in the vendor app
Beurer BF720 / BF105 / BF500 / BF788 / BF950YesNeeds users[].beurer_pin and a bonded link
Soehnle Shape200 / Shape100 / Shape50 / Style100YesNeeds user slot 1 in the vendor app
Medisana BS430 / BS440 / BS444Yes
Active Era BS-06Weight onlyReports a resistance, but its scaling has never been checked against a capture (#386)
Senssun FatYesModel A only
MGB (Swan / Icomon / YG)Yes
Hutbit 218008 / WL292YesAlso sold under stock SWAN branding
Robi S9Weight only
Speediance Smart Scale FG2211WBFYesLefu/Icomon sibling of the Robi S9
Digoo DG-SO38H (Mengii)Yes
Excelvan CF369Yes
Trisa Body Analyze / ADE BA 1600 (fitvigo)Weight onlyThe resistance it reports is not on an ohm scale, so body fat is estimated (#386)
Hoffen BS-8107Yes
Etekcity ESF-551 Smart Fitness ScaleYesMatched by its advertised name
Hesley (YunChen)Yes
Inlife (FatScale)Yes
Koogeek S1YesConnecting can be unreliable, see below
Exingtech Y1 (vscale)Yes
Any standard BT SIG scale (BCS/WSS)YesCatch-all; select user 1 on the scale

Finding Your Scale

The setup wizard includes interactive scale discovery. It scans for nearby BLE devices, identifies supported scales, and writes the config for you. To scan without the wizard:

bash
# Docker
docker run --rm --network host --cap-add NET_ADMIN --cap-add NET_RAW \
  ghcr.io/kristianp26/ble-scale-sync:latest scan

# Standalone (npm install or npx)
ble-scale-sync scan

# Standalone (from a clone)
npm run scan

Set your scale's MAC address

We recommend setting scale_mac in config.yaml. It prevents the app from accidentally connecting to a neighbor's scale. The setup wizard does this automatically. If you skip it, the app falls back to auto-discovery by BLE advertisement name.

Known Limitations

Everything below still works; these are the quirks worth knowing before you buy or debug.

Soehnle, Sanitas SBF72/73, Beurer BF915

Create user slot 1 in the manufacturer's phone app first.

Standard GATT

Select user 1 on the scale before measuring.

Senssun Model B

Not supported yet (only Model A with service 0xFFF0).

Koogeek S1

The measurement protocol is implemented and verified, but this hardware's GATT connect and service discovery are unreliable on BlueZ and on ESP32 NimBLE, and succeed only occasionally on macOS CoreBluetooth. That is a trait of the device rather than of the adapter. Retry, or use whichever transport works best for your unit.

Renpho R-MSC04 (MorphoScan Nova)

Weight is read and verified. Body composition is estimated from BMI (Deurenberg formula) rather than measured impedance. The vendor handshake is documented but not yet implemented, and the scale also closes the link after its history sync, so a reconnect is needed before the live measurement arrives. Tracked in #117.

Eufy Smart Scale P2 / P2 Pro

Weight only. The bytes previously read as impedance are not a body resistance, so publishing them produced absurd body-composition figures (#289). Body composition is estimated from BMI (Deurenberg formula) instead. A raw FFF2 capture paired with the Eufy app's own body-fat figure would let the real field be decoded.

Xiaomi Mi Smart Scale 2 (XMTZC04HM)

Weight only. The 0x181D advertisement carries no impedance, so body composition is estimated from BMI (Deurenberg formula).

Xiaomi Body Composition Scale S400 (MJTZC01YM)

The scale broadcasts its measurement as an encrypted MiBeacon frame, so it needs the per-device ble.bind_key from the Mi cloud (extract it with the community Xiaomi-cloud-tokens-extractor after pairing the scale in the Mi Home app) and ble.scale_mac: the measurement frames omit the MAC the decryption nonce needs, and the MAC is otherwise only learned from the idle beacon. Register a user profile in Mi Home (the scale tags each reading with a profile slot) and keep the Mi Home app closed while weighing, or the phone takes the session and nothing is broadcast. Weigh barefoot: with socks the scale sends weight only and body composition is estimated from BMI (Deurenberg formula). The scale measures impedance at 50 kHz and 250 kHz and a heart rate; the 50 kHz value feeds the Xiaomi body-composition formulas shared with the Mi Scale 2 (the app's own dual-frequency model is proprietary, so expect small offsets, see Body Composition), the other two are logged only. It is a "sleepy" device that advertises only while someone stands on it, so run scan while you are on the scale.

Silvergear Smart Scale 108

Weight only. The advertisement carries a second frame after each weigh-in whose field looks like a whole-body impedance (529 ohm for a 108.5 kg adult, 0 for an object), but one sample is not a decode, so body composition is estimated from BMI (Deurenberg formula). The frame is logged in debug mode; a body-fat figure from the vendor app for the same weigh-in would settle it (#297).

Renpho ES-CS20M / Elis 1 (some hardware variants)

Some units use broadcast-only firmware that does not allow GATT connections. The same model name can ship with different internal hardware. If your ES-CS20M or Elis 1 is broadcast-only, ble-scale-sync reads weight directly from BLE advertisements. Body composition is estimated from BMI (Deurenberg formula) instead of impedance, since impedance is not available in broadcast mode. Run ble-scale-sync diagnose (npm run diagnose from a clone) to check whether your unit is connectable or broadcast-only.

Don't See Your Scale?

If your scale uses BLE but isn't listed, it might still work. The Standard BT SIG adapter catches any scale that follows the official Bluetooth specification. Run the setup wizard or ble-scale-sync scan to check.

Want to add support for a new scale? See Contributing.

Released under the GPL-3.0 License.