Skip to content

About

No description, website, or topics provided.

Resources

Contributing

Stars

163 stars

Watchers

5 watching

Forks

Repository files navigation

YOW logo

YourOwnWeigh (YOW)

Free Wi-Fi Syncing for Withings Scales

This project provides the components needed to have your Withings scales sync its readings to your own data store. The scales sync over wifi, as they do now, just for free and without Withings.

It is designed to allow you to ensure your hardware is able to work how you want, without subscription fees. You can sync to Apple Health, Google Health or anywhere you want.

If you want to know more about why, see this blog post, otherwise there are quick start guides below - including how to host this all on a free CloudFlare account.

This was just released 29th October, and whilst I'm using it fine on my own scales, I cannot make any guarantees. Also this repo may be a bit rough around the edges, but I wanted to get something out.

If you are interested in helping as a maintainer, please email me at yow@<domain-of-blog-post>.

YOW Components

This repo provides several components:

  • firmware patches for various models (see below)
  • a Python bridge app you run locally to do firmware updates
  • a web app that
    • manages device config, users and readings
    • replaces Withings as the data sync API for your scales
    • acts as the firmware management interface (with the bridge)
  • shortcuts/scripts that help you automatically sync this data (e.g. into Apple Health)

You can easily import your devices, and registered scale user roster into YOW, so you can continue right where you left off.

YOW Dashboard Screenshot

Supported Models

The below models are currently supported. Pull Requests to add more models are very welcome.

Scale Stock Firmware YOW Firmware Bluetooth Notes
Body Smart (WBS13) v1311 v100 BLE
Body (WBS06) v1181 v127 BLE
Wireless Scale (WS-30 / WBS03) v921 v102 Classic Scales->YOW is HTTP only

You can check your model under the batteries. Not all models with the same name (e.g. "Body Smart") are equivalent to one another, so please check the actual model number.

Supported Platforms

OS Status
macOS 27 Confirmed
macOS 26 Should work
macOS 15 Should work
Windows Pending
Linux Confirmed

The web app component should support all operating systems, but the Python bridge currently only supports macOS & Linux. Windows support still needs adding.

Quick Start Using Cloudflare

Using a free CloudFlare account, you can set this up end to end in a durable fashion.

You will deploy a CloudFlare worker that uses D1 for storage, and which serves as the YOW dashboard, the API for scales to speak to, and the Sync API for reading data back out (to Apple Health, for example).

You will also need to run the Python bridge on a machine that is within Bluetooth range of your scales.

  1. Setup a free Cloudflare account (or use an existing account).
  2. Run:
npm ci
npx wrangler login
npm run setup:cloudflare -- --name YOUR-SHORT-WORKER-NAME --deploy

Choose a short Worker name: the complete hostname must fit your scale's character limit below.

  1. Open the HTTPS URL printed by Wrangler. Enter the bootstrap token, then set an admin password. The Sync API (for reading data out of YOW) uses it too, by default (you can override).

  2. Install and start the Python bridge:

    python3.11 -m venv .venv
    .venv/bin/pip install ./bridge
    .venv/bin/yow-bridge

It will ask for an invite code, required for it to establish a secure connection to your server.

  1. In the web app, open Firmware Bridge, and click Generate Connection Invitation and paste it into Terminal. Grant Bluetooth permissions if requested. The bridge's connected status appears in the page.
  2. Put the scale into setup mode with its button. Press Scan BLE (or Scan Classic for older devices), and wait for that to complete.
  3. Click Connect against the desired device, the bridge should identify the scale automatically.
  4. Accept Import Device To Server. The scales' existing settings are fetched automatically from Withings (using the MAC & Secret read from the device).
  5. Users are also read from Withings, and new users can be imported too. (If the initial profile fetch fails, use Finish Device Import under Scales → Edit Settings later.)

At this point you now have your server running, with your device imported, and your user roster imported. We now need to update the firmware on your device so it also connects to this server - only do this on supported devices (and accept it may be a risk).

  1. Press Generate Firmware, which will download the supported Withing's firmware version for your scales and patch it with the necessary updates.
  2. Make sure to review the model/version, then Send Update To Device and type FLASH. Keep the scale powered and bridge running.
  3. After reboot reconnect to confirm the version. (Note: I sometimes found I had to remove the batteries and replace them after an update - something for the TODO list.)
  4. Once reconnected, in the Configure pane, enter your server's hostname (there is a link to help), and select the protocol the scales should use (some only support HTTP currently - your secret is hashed, but your data is in the clear).
  5. Also update your Wifi details if needed.
  6. Weigh yourself! Wait a moment (usually 20-40 seconds) and check Readings. Hopefully you have a result there!

Running Locally with Caddy

You can run the whole server locally, but you will need your server to stay using the same internal network IP and to stay up. You can run locally just for getting up and running, and later import the database (via the Settings panel in the app) into another instance.

The firmware only supports connecting to ports 80 or 443, which a normal user cannot listen on, so install Caddy which handles this for you.

Then run:

npm ci
npm run setup:local -- --scale-host YOUR_MAC_LAN_IP
  • Open http://127.0.0.1:8080, use the printed bootstrap token and set your password.
  • In a second Terminal, run the Caddy command printed by setup. It forwards HTTP 80 and HTTPS 443 to the scale-only listener at 127.0.0.1:8081; the admin page remains on loopback.
  • You can now follow from step 4 (Python bridge) in the CloudFlare section above, entering the machines IP as the scale's hostname.

FAQ

Q) Will this brick my device?

Unlikely, but possible. I flashed lots of firmware attempts to my WBS06 and WS-30 scales whilst researching how to make this work, and that worked fine. I later added WBS13 without problems.

The models I looked at all have two firmware slots, and updates are always written to the slot with the lowest version. I have deliberately set my version numbers low so one slot should retain a Withings vanilla firmware.

An incomplete firmware write (an interrupted one for example) invalidates a slot, and future updates will prefer an invalid slot, so you can try again.

There is a possibility that a bad firmware write makes your Bluetooth become unavailable in an unlucky, which would require rescuing your scales with a UART connection ($10 for a cable on Amazon) - there are various UART tools included in this repo for those who know what they are doing.

Q) Are you distributing Withings' firmware?

No - the app downloads the firmware from Withings' servers and then patched.

Q) How can I be sure my scales are on the YOW firmware?

Scanning and connecting via the app will show you a firmware version.

Or, remove a battery for a moment, and replace it. Stock firmware displays a 'Hello' message, but YOW firmware will show a smiley face.

Q) Why did you make this?

See this blog post for details, but mainly because syncing my scales was much buggier than it used to be, and Withings starting to charge people for it made me scared they'd charge everyone at somepoint.

Q) How can I help?

There are 3 areas that can help (all are achievable without special equipment):

  1. Adding Windows support to the Python bridge - most of the code should be transferrable but I don't have the hardware to check things.
  2. Adding support for more models of scales. You must own the model of scales you are adding, and be willing to test against them. You need to be comfortable with modding firmware, or trust AI to do it for you, and be willing to then install that on your own device.
  3. If you can't contribute firmware, but do own a model of scales (check under the batteries for the model number) not on the firmware list, then running a Python script can identify the firmware used for that model, which is also useful.

SeeCONTRIBUTING.md.

Q) Why have you not covered XYZ?

I'm time poor, doing this for fun in my spare time, and wanted to actually release something without sinking loads more hours into it. It works for me as it is, and I'm hoping others can help fill in the gaps.

Constraints And Current Limits

  • The firmware currently supports hostnames over a limited length. WBS06 is max 48 chars. WS-30 is 59 chars.
  • WBS06 HTTPS encrypts traffic but does not authenticate the server certificate or CertificateVerify signature. WS-30 uses plaintext HTTP. The bridge, browser and Withings migration client use ordinary verified HTTPS for remote services.
  • Save original firmware/device backups and a recovery plan before OTA. Bluetooth does not read full firmware or expose/control the destination bank. An inactive bank can still supply radio resources; do not erase it casually. UART recovery tools.

Related Projects

There are a few other community projects that relate to this

  • withings-local - supports syncing Withings scales to Homekit over Bluetooth. Doesn't require updating the firmware.
  • esphome-withings-wpp - allows syncing Withings scales via an ESPHome sensor. Doesn't require updating the firmware.
  • openScale - Open-source weight and body metrics tracker, with support for Bluetooth scales, but no Withings support currently.

Legal

Withings is a trademark of Withings SA. This project is not affiliated with, endorsed by or supported by Withings. Use it at your own risk.

About

No description, website, or topics provided.

Resources

Contributing

Stars

163 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages