I Connected My Withings Body+ to Home Assistant with an ESP32
Posted by sabatesduran 5 days ago
Comments
Comment by AshleyGrant 1 day ago
The BMPro app is... well, it's like they actively worked to make it terrible.
I put up with it for 2 years and then had the bright idea to throw the APK at Claude Opus earlier this year. I now no longer have to use their terrible app as it reverse engineered the Bluetooth protocol and I can either use the custom-built Android app, website hosted on GitHub Pages, or the Home Assistant app I built using AI.
It's not perfect, and it has bugs, but it is less buggy than their app. I've been busy at work lately, so I haven't had a chance to resolve the bugs, but I'll get around to it.
I ended up also using Opus to patch the original APK to fix several bugs and inexplicably bad UI choices they made. I still prefer to use my own app, but I have the patched app as a fallback.
Comment by Neywiny 1 day ago
Comment by AshleyGrant 1 day ago
Call it what you will, the point is I do not have the necessary skills to accomplish this task, but I was able to go from an APK to a working implementation that was controlling the lights in my RV in a couple of hours back in early April using whatever was the current version of Opus at the time. While I understand what it did to accomplish this, it might as well be magic for me, because it would take me months of free time to get to where it got.
It also wrote out documentation of the protocol so subsequent work would not require reading decompiled Java code.
Comment by dgacmu 1 day ago
Huge fan of running it this way.
(Yesterday I ordered a more commercial, polished-looking esp32 Bluetooth proxy integrated into a smart plug - athome brand - but it's the same functionality, just in a nicer package than having a USB thing dangling from my outlet)
Comment by dawnerd 1 day ago
Comment by toomuchtodo 1 day ago
Comment by dgacmu 1 day ago
I'm just using a cheap ESP-WROOM-32 but the recommended way to do it is with an wired ethernet-based ESP32 so you don't have interference with the wifi and btle. For a scale this works well enough. I haven't yet received the athom smart plug so I can't recommend it yet. Should be here in a week or so.
Once you've got the proxy you can just use the eufylife integration: https://www.home-assistant.io/integrations/eufylife_ble/
To setup the esphome bluetooth proxy you install esphome, and then create a yaml file that you'll use to configure the board, like this:
esphome:
name: bluetooth-proxy
esp32:
board: esp32dev
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "YOUR_KEY_HERE"
# Enable OTA updates
ota:
- platform: esphome
# WiFi configuration (matching the settings from your other devices)
wifi:
ssid: "YOUR_WIFI_SSID"
password: "YOUR_WIFI_PASSWORD"
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Bluetooth Proxy Fallback"
password: "proxyfallback"
captive_portal:
# Enable ESP32 BLE Tracker
esp32_ble_tracker:
scan_parameters:
active: true
# Enable Bluetooth Proxy
bluetooth_proxy:
active: true
Once that's done, plug in your board to your system and use esphome run bluetooth-proxy.yaml (you might have to find the device it's showing up as in tty.usbserial or whatever).Comment by toomuchtodo 1 day ago
Comment by kjmr 1 day ago
Comment by SaberTail 1 day ago
Comment by bassdreads 1 day ago
Comment by frereubu 1 day ago
Comment by jabiko 1 day ago
The experience integrating with Withings was really good. Garmin on the other hand seems to be actively hostile if you (as an end user) want to programmatically interact with their ecosystem.
Comment by deivid 1 day ago
The app is at https://github.com/DavidVentura/withouthings - the firmware on the watch was leaked as well, and it's been helpful to debug some of the protocol.
Comment by tetris11 1 day ago
Comment by sowbug 1 day ago
Comment by sabatesduran 1 day ago
Comment by Gehinnn 1 day ago
Comment by cromka 1 day ago
Comment by venzaspa 1 day ago
Comment by variety8675 1 day ago
Comment by mrlinx 1 day ago
Comment by abcd_f 1 day ago
Because OP's hookup works offline, via the Bluetooth.
Comment by madaxe_again 1 day ago
Comment by baby_souffle 1 day ago
But not the calibration that maps a raw ADC sample to "24.5% body fat, 21 Kg bone ..." etc.
Comment by alex_sf 1 day ago
Comment by madaxe_again 1 day ago
Comment by baby_souffle 1 day ago
Comment by deebuildsthings 20 hours ago
Comment by deebuildsthings 20 hours ago
Comment by notchdock 1 day ago