BLE Scale Sync reads weight and body composition from Bluetooth Low Energy smart scales and sends every reading to Garmin Connect, Home Assistant, InfluxDB and other services. It runs on a Raspberry Pi, a Linux server, macOS, Windows or as a Home Assistant add-on, so you do not need the scale's phone app.
Documentation | Getting Started | Supported Scales | Exporters | Troubleshooting | FAQ
Run the setup wizard in the container to write config.yaml, then start the container with host networking and the D-Bus socket mounted. Docker needs a Linux host with BlueZ, such as a Raspberry Pi. The commands and a Compose file are in Getting Started: Docker.
The add-on needs Home Assistant OS or Supervised. On HA Container or Core, use Docker; the sensors still appear through MQTT discovery. The add-on guide covers options, Garmin sign-in and MFA.
npx ble-scale-sync setup # wizard, writes ./config.yaml
CONTINUOUS_MODE=true npx ble-scale-sync # always onRequires Node.js 22.23.4+, 24.22.1+ or 26.12.1+ and a BLE adapter. Getting Started: Standalone has the prerequisites, a systemd service and the install from a clone.
- Reads scales from Xiaomi, Renpho, Eufy, Yunmai, Beurer, Sanitas, Medisana and other brands, over a GATT connection or from their advertisements (Supported Scales).
- Sends each reading to 13 export targets, among them Garmin Connect, Strava, MQTT with Home Assistant discovery, InfluxDB, webhooks and CSV or JSONL files.
- Computes body composition from weight and impedance, with a BMI-based estimate for scales that report no impedance.
- Tells household members apart by weight and gives each person their own exporters (Multi-User).
- Imports measurements stored in the scale's memory with their original time, for exporters that can record a past measurement (historical readings).
- Uses the computer's own Bluetooth adapter, an ESP32 BLE proxy, an ESPHome Bluetooth proxy or Home Assistant Bluetooth as the radio (Bluetooth Transports).
- Sets up through an interactive setup wizard, with
scan,validateanddiagnosecommands for checking the result. - Recovers BlueZ on Linux when discovery stops after hours of uptime (BlueZ stuck state).
- Logs a notice when a new version is out; Auto Updates has recipes for Watchtower, a systemd timer and the add-on.
No scale vendor app or account is involved. Readings go only to the exporters you configure. The one other request is a version check, at most once a day, that sends the app version, OS and CPU architecture; those also feed the public usage stats. Set update_check: false to turn it off (what the update check sends).
If your scale is not found or its values look wrong, follow Troubleshooting. For a scale that is not listed, collect a log with debug mode and open an issue with the log and the scale model.
- Scale protocols: many adapters are ported from openScale by oliexdev and contributors.
- Eufy P2, P2 Pro, C20 and P3: bdr99/eufylife-ble-client.
- Etekcity Fit 8S: etekcity_esf551_ble, support contributed by Flautz.
- OKOK and Chipsea broadcast: public captures, checked against openScale and ble_monitor.
- PICOOC Mini Lite: openScale (dnsfdv) and the advertisement log in oliexdev/openScale#1512.
- A&D UC-352BLE: the capture in oliexdev/openScale#1505 (mrblowntobits) and the GATT dump in HEADS-project/ThingML-BLE.
- Huawei CH100 and AH100: openScale (danieldorigatti, martinriedel), the captures in oliexdev/openScale#547 (dmitriytim) and testing on a CH100 by Otautahi.
- QN-Scale, FITINDEX and a few others: reverse-engineered in this project.
- Garmin upload: garminconnect by cyberjunky.
- BLE: node-ble (Linux), @abandonware/noble (Windows), @stoprocent/noble (macOS).
- ESP32 proxy: mqtt_as by peterhinch, aioble.
KristianP26 1,373 commits |
APIUM 34 commits |
alasano 8 commits |
marcelorodrigo 7 commits |
alexw23 3 commits |
bondesen 3 commits |
albert-canfield 3 commits |
ibrokemypie 3 commits |
fromport 2 commits |
O-Palda 2 commits |
chrisauer 2 commits |
gvarph 2 commits |
vargamihaly 2 commits |
FridoE 2 commits |
boildead 1 commit |
junaidk 1 commit |
hedoric 1 commit |
Bretos 1 commit |
JamieSBenson 1 commit |
totalitarian 1 commit |
ocurero 1 commit |
rolandgeider 1 commit |
sanglt 1 commit |
rjekelmans 1 commit |
intrak 1 commit |
codewirrwarr 1 commit |
Nitrogenbear 1 commit |
snajby 1 commit |
See CONTRIBUTING.md for the development setup, tests and how to add a scale adapter or an exporter.
GPL-3.0. See LICENSE.