DEV Community

Hacking BLE Kitchen Scale

George Hertz on September 04, 2020

TL;DR: Result hertzg / metekcity ETEKCITY smart nutrition scale p...
Collapse
 
wilsonsilva profile image
Wilson Silva

I have the exact same need as yours. The scale has a nice design, it is easy to clean and has a useful LCD display. But the app doesn't let me access MY data, search for food using a food database or use a barcode scanner.

At some point I thought that the only way to fulfil my needs was to make my own scale using a Raspberry PI or an Arduino. But reverse engineering seemed way easier.

Thanks for the amazing work!

Collapse
 
hertzg profile image
George Hertz

I'm glad you found this useful, I have ordered an android phone and dumped some more packets to progress futhter you can see the packets and a wireshark dissector code in the repository research folder. Next step for me would be to write a lib and a small cli tool right now :)

Collapse
 
madmod profile image
John Wells

@hertzg I'm trying to use this scale to prototype an automated ingredient mixer. Could you please share your code to connect to the scale? I tried making a simple discover script with @abandonware/noble but wasn't able to find it. (Maybe that just doesn't work on M1 macs?)

Collapse
 
hertzg profile image
George Hertz

Hey! Glad you found this interesting, I've just recently refactored and pushed demo code to run it directly in your browser. You might need to enable some flags in chrome but should work without it. You can always create a pr or issue on github to further address certain topics :)

Collapse
 
shaunhurley profile image
Shaun Hurley

Looks like a great start, am interested in how this develops. Found myself in a similar situation, have one of these scales, but it (the app) doesn't address a key need - I make the same (or similar) foods regularly - my lunch salad, for example - but it varies a little day to day depending on what is in the fridge. I don't want to store static, once-and-done recipes, I want to save the recipe as a 'template' and then queue up the ingredients each time I make it, based on the stored template, then step though each ingredient (as in, accepting a weight with a tap/click automatically jumps to the next ingredient/line) grabbing the current weights, and have the current nutrition pop out at the end (with bonus points for submitting to through the Fitbit API :). And, of course, their food database sucks :)

Was looking at playing with some Arduino based stuff, but it's wired USB based (until/unless I figure out adding in a BLE module) and then I came across your writeup :)

I know you said you are getting an Android device for some planned wok, but would you mind sharing the hardware stack you are / have been using to date? As in, Windows / OSX / Linux, etc?

Collapse
 
hertzg profile image
George Hertz

Glad you found this (somewhat) useful 😊 , so far I managed to borrow an the Android device from a friend and managed to take dumps of data that was being sent over the network. As well as tried to disassemble the Android .apk to get a glimpse of the packing/compression algorithm.

The current status is that the project is on-hold because I've exhausted the samples of data I have and I no longer have access to an Android device to make more snapshots/samples.

In terms of the hardware stack, for development I was mainly using Linux (Ubuntu) on my personal laptop. To take the samples I (had to) use Windows (due to drivers of the specific phone model) and adb + wireshark to snoop on the bluetooth traffic between the phone and the scale.
For testing the written code I used linux and noble npm package to communicate with the BLE scale while utilising the library I wrote to pack and unpack packets.

For the final use case I got a raspberry pi with bluetooth + bluez to manage BLE GATT protocol. Placed the whole thing in the kitchen (where the scale is) and it constantly scans for the scales MAC and GATT ID's, once it finds it, tries to connect and sends the measurements to my local MQTT broker from where I deal with the data.

So far the whole setup is kind of "listen only" mode because I never got time to take snapshots of the "SET_NUTRITION" packets to understand how they are packed.

Collapse
 
mike_hatfield_bf922d43339 profile image
Mike hatfield

Wow! Nice work. I’m looking to add this device to my homebridge running on rpi to so it can warm up my kettle in the morning. Need it to follow my espresso machine on/off schedule with a slight delay so it doesn’t draw too many amps from same outlet and trip my breaker.

Eventually would like to read temp of scale and use it to stop my espresso shot at designated weight. I already installed a Shelly switch in espresso machine so that is hooked up to homebridge and apple HomeKit.

Any luck sending commands to turn it on/off?

Collapse
 
hertzg profile image
George Hertz

Connecting to its BLE (GATT) service causes it to turn on, have you tried doing that? Not sure how that would affect the initial calibration weighting though

Collapse
 
niklampe profile image
Nik • Edited

Hey George, impressive work so far.

Last night I had a similar idea. I wanted to write my own App to read the scale values of a renpho kitchen scale as the app is.. well, not good. :D

But the advertised services and their characteristics unfortunately didn't lead to anything. Found something, but there seem to be no values transmitted.

You wrote, that "With some luck and more luck I was able to guess the correct service, characteristic and ended up with some notes where I could start looking at the protocol."

How did you start the guessing? Were the services and characteristics you found not advertised by the peripheral?

Collapse
 
hertzg profile image
George Hertz

The easiest way would be to use the official app and somehow sniff the data. In one of the comments I've described how I've done this. Easiest way would be to use an Android device, adb and wireshark to sniff the bluetooth traffic. Next step would be to disassemble the apk which might give you more hints, like strings and constants and maybe a glimpse of how it serializes/marshals the data. Hope this helps a bit.

Collapse
 
dbirkhead profile image
dbirkhead • Edited

Have a headache myself with a client who commissioned an app and wants to add a scale for users to weigh things for the app to read. It seems we can’t just use any Bluetooth scale for that?

Has anyone ID’d any “off the shelf” kitchen scales that may be fit for this purpose as of yet?

Watching closely as I have a real and urgent need for this.