An ESPHome external component that bridges a GE "Fit Plus" body scale (BLE) to Home Assistant on an ESP32 (developed on an ESP32‑C6).
The component connects to the scale as a BLE central, replays the unlock handshake, parses the result frame (weight + 8 segmental impedances), reproduces the app's body‑composition numbers, writes them back to the scale's own display, and publishes everything to Home Assistant over the ESPHome native API. When the hand bars aren't used (no impedance), it falls back to a weight‑only BMI estimate.
No secrets here. This repo contains only the reusable component code. WiFi credentials, the API key, the scale's MAC address, and the personal profile (height/sex/birthday) all live in your own device YAML +
secrets.yaml, never in this repo.
Reference it from your ESPHome device YAML:
external_components:
- source: github://jojobird6/ge-scale-esphome@main
components: [ge_scale]
esp32_ble_tracker:
ble_client:
- mac_address: AA:BB:CC:DD:EE:FF # your scale's advertised address
id: ge_scale_client
ge_scale:
ble_client_id: ge_scale_client
height: 1.78 # metres
sex: male
birthday: "2000-01-01"
expected_weight: 74 # kg — used to tell the main user from a guest
weight_tolerance: 4
write_back: true
# ... map the sensor / text_sensor / binary_sensor entities you want ...See the component's __init__.py for the full list of exposed entities.
The body‑composition coefficients baked into ge_scale.cpp were fitted to a single
person from captured weigh‑ins. Weight is universally accurate; the fat/muscle/etc.
numbers are only accurate for that calibration and should be re‑fitted for other users.
MIT