logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·31.10.26
← Back to news

I Connected My Withings Body+ to Home Assistant with an ESP32

Original article
didac.dev|66 points|20 comments|by sabatesduran|Sep 3, 2026

Localizing My Withings Body+ via ESP32

By Dídac Sabatés | September 3, 2026

I have successfully integrated my Withings Body+ scale into Home Assistant using an ESP32. The primary goal was to ensure that my body composition and weight data travel directly to my local server, completely bypassing the Withings cloud infrastructure.

The Motivation: Cutting the Cord

Normally, the scale operates by identifying the user and syncing data to the official app. While the official Home Assistant integration is easy to set up, the data path is inefficient:

Body+ →\rightarrow→ Withings Cloud →\rightarrow→ Home Assistant

I wanted a truly local solution. By utilizing an ESP32 and ESPHome, I shifted the architecture to:

Body+ →\rightarrow→ ESP32 →\rightarrow→ Home Assistant

Data Flow Comparison

Hardware Requirements

Not all ESP boards are created equal. The Body+ relies on Bluetooth Classic, which limits the hardware choices.

Board ModelBluetooth SupportCompatible?
Original ESP32Classic + LE✅ Yes
ESP32-C3LE Only❌ No
ESP32-S3LE Only❌ No

Note: Ensure you verify your board's pinout before starting.

The Engineering Hurdle

The hardest part wasn't the hardware, but the protocol. Withings does not document the communication method for third-party replacements. To solve this, I leveraged ChatGPT/Codex to perform the heavy lifting:

  1. Analyzing decompiled Android app code.
  2. Comparing Bluetooth packets.
  3. Translating those findings into C++ for ESPHome.

"I became the world's most inefficient tester: I would flash the firmware, walk to the bathroom, step on the scale, check the logs, and repeat."

The process was a cycle of trial and error. Many attempts left the scale stuck on the setup screen until a log finally confirmed: Body+ association complete.

Project Checklist

  • Source original ESP32
  • Reverse engineer Bluetooth protocol via AI
  • Write custom ESPHome component
  • Remove Wi-Fi credentials from scale
  • Validate data in Home Assistant

Handling Multiple Users

I initially worried I would have to distinguish between my wife and me based on weight thresholds (e.g., if weight>xweight > xweight>x then User A). However, the Body+ is smarter; it transmits a unique User ID with every measurement.

The custom component maps these IDs to specific sensors. We now track the following metrics for both profiles:

  • Weight
  • Body Fat %
  • Fat Mass
  • Muscle Mass
  • Body Water
  • Bone Mass
  • Fat-free Mass

Home Assistant Integration & Persistence

While ESPHome provides the sensors automatically, they become unavailable if the ESP32 loses power. To prevent my dashboard from looking broken, I implemented template sensors.

The logic follows a simple persistence rule: Current Display Value={New Measurement,if availableLast Known Value,if unavailable\text{Current Display Value} = \begin{cases} \text{New Measurement}, & \text{if available} \\ \text{Last Known Value}, & \text{if unavailable} \end{cases}Current Display Value={New Measurement,Last Known Value,​if availableif unavailable​

I also utilized step charts for visualization, ensuring the line remains flat between weigh-ins rather than interpolating fake data points.

# Example logic for persistence
template:
  - sensor:
      - name: "Persistent Weight"
        state: "{{ states('sensor.esp32_weight') if states('sensor.esp32_weight') != 'unavailable' else states('sensor.persistent_weight') }}"

Final Results

The user experience remains unchanged, but the privacy is vastly improved. We step on the scale, and seconds later, the data is in Home Assistant. The scale no longer requires Wi-Fi, and the Withings app is obsolete.

Caveats:

  • This was tested specifically with the Body+ and one specific ESP32 board.
  • It is not a universal fix for all Withings models.
  • The code is not yet on GitHub, but it will be soon.

Home Assistant