KristianP26/ble-scale-sync 是一个托管在 GitHub 上的开源项目,主要使用 TypeScript 编写,采用 GNU General Public License v3.0 许可证,目前获得 224 个 Star、63 次 Fork。
仓库全名
KristianP26/ble-scale-sync
README 摘要
BLE Scale Sync 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 Install…
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.
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.
Home Assistant Add-on
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.
Requires 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.
Features
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).
Sets up through an interactive setup wizard, with scan, validate and diagnose commands 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.
Privacy
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).
Help
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.
Credits
Scale protocols: many adapters are ported from openScale by oliexdev and contributors.
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.
评论