0

I plan to buy wireless body scale and it would be nice to get that data wireless to my Raspberry Pi 4.

I don't want to use any smart phone apps and clouds.

OpenScale supports many scales but it is Android only. Is there any linux app like that?

OpenScale

I also found gatttool but don't know how to use it and it would be risky to buy scale and then fail to make it work.

This scale supports bluetooth and wifi but i don't know if it's possible to send data to Raspberry.

Huawei Scale 3

1

This is quite a broad question and I don't have the scale so there is a limit to how much I can answer. However, there is some information I can share which might help you move forward.

The Bluetooth stack on a Raspberry Pi is BlueZ which is the official Bluetooth stack for Linux. BlueZ provide a series of APIs to enable most programming languages to interact with the Bluetooth hardware. These APIs are documented at: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc and they have examples at: https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test

It looks like the scales are a Bluetooth Low Energy (BLE) device which means the data is organised with GATT. GATT is an acronym for the Generic Attribute Profile, and it defines the way that two Bluetooth Low Energy devices transfer data back and forth using concepts called Services and Characteristics.

To be able to interact with the scales you need to the Services and Characteristics the scales offer. It seems this information has already been collected in https://github.com/oliexdev/openScale/issues/763

The log reports can be viewed with btmon --read <log_file name> or with the wireshark tool.

From reading the logs, the structure of the Services and Characteristics looks like:

 Service 0x1800 "generic access"
 |- characteristic 0x2a00 "device name" (#3): READ
 |- characteristic 0x2a01 "appearance" (#5): READ
 |- characteristic 0x2a04 "peripheral preferred connection parameters" (#7): READ
 Service 0x181c "user data"
 |- characteristic 02b2a08e-f8b0-4047-b1fd-f4e0efeee679 (#10): INDICATE, WRITE*
 |- characteristic 32330a04-15d9-421a-91c5-2a2d5c7525c9 (#14): INDICATE, WRITE*
 |- characteristic a3d330f8-b84f-4f48-a78c-f8d1e33b597a (#18): INDICATE, WRITE*
 |- characteristic 42596cbe-d291-4da3-8ca6-d1ae5d1c9174 (#22): INDICATE, WRITE*
 |- characteristic 8cc61d7d-66c0-4802-89c3-38c5a163592e (#26): INDICATE, WRITE*
 |- characteristic 7749db19-9db5-4430-b6e2-5fcfb3f5b988 (#30): INDICATE, WRITE*
 |- characteristic 4599778a-ea8a-4ffe-9499-de1ba7a03f3a (#34): INDICATE, WRITE*
 |- characteristic 78bdadc1-5cae-4ec4-8832-21a020b1080b (#38): INDICATE, WRITE*
 |- characteristic 3a3a7d71-37f6-4b94-b44a-21ac1916ac4f (#42): INDICATE, WRITE*
 |- characteristic 4338c65e-ed8e-4085-bbea-a25e33ca6b54 (#46): INDICATE, WRITE*
 |- characteristic 2acf269d-6dae-4a64-98a4-dbf98c2e66c4 (#50): INDICATE, WRITE*
 |- characteristic 319d46ad-df02-4be5-b80f-6aa6f9c69329 (#54): INDICATE, WRITE*
 Service 0x1805 "current time"
 |- characteristic 0x2a2b "current time" (#59): INDICATE, WRITE*
 |- characteristic 7e7a5c8f-12a6-4e98-a171-09050a3a058e (#63): INDICATE, WRITE*
 |- characteristic 1f5d3d5c-496d-4290-af03-c7a8d5419741 (#67): INDICATE, WRITE*
 |- characteristic 11872f15-a91d-49da-ac89-5107284f3425 (#71): INDICATE, WRITE*
 |- characteristic 7e6dbc73-42e7-45b9-a6ec-6aa2d7834695 (#75): INDICATE, WRITE*
 |- characteristic e3c7a876-3307-414d-84f6-fbcd64710dc3 (#79): INDICATE, WRITE*
 |- characteristic bfc36f6e-4150-4a4b-9052-3d359e52962e (#83): INDICATE, WRITE*
 |- characteristic 8d4d3154-a5fc-45d4-a0e9-cd97d7cb6bb0 (#87): INDICATE, WRITE*
 |- characteristic ba216311-1787-472b-bef6-3eb29e62293e (#91): INDICATE, WRITE*
 |- characteristic 3beac702-addb-4e54-a16a-b731d0888a3f (#95): INDICATE, WRITE*
 |- characteristic 75143e79-f878-4a00-a628-edc40509de7e (#99): INDICATE, WRITE*
 |- characteristic 426f058d-8211-413e-8320-397a890a08bf (#103): INDICATE, WRITE*
 |- characteristic 7e557e42-62cd-4dad-9327-a62bdafb049d (#107): INDICATE, WRITE*
 |- characteristic 33ff0cad-834f-4e42-ab91-a0747856d574 (#111): INDICATE, WRITE*
 |- characteristic b4e384f2-d880-44e7-8c7e-5249239633b4 (#115): INDICATE, WRITE*
 Service 0x181b "body composition"
 |- characteristic 0212f42a-5f19-4bc1-ba52-d7ec7ccb71a4 (#120): INDICATE, WRITE*
 |- characteristic b7da53ee-6ef5-4467-9485-0eae498d7417 (#124): INDICATE, WRITE*
 |- characteristic 46797c17-d639-488d-9476-4789e8472878 (#128): INDICATE, WRITE*
 Service 0x1880
 |- characteristic 0x1881 (#133): INDICATE, WRITE*
 Service 0x18a0
 |- characteristic 0x18a1 (#138): INDICATE, WRITE*
 Service 0xfe86
 |- characteristic 0xfe01 (#143): WRITE*
 |- characteristic 0xfe02 (#146): NOTIFY

If you have the scales you can confirm this yourself with a generic Bluetooth Low Energy scanning and exploration tool. On a mobile phone, nRF Connect is very good.

On Linux, gatttool has been deprecated, and the tool to use is bluetoothctl. This will allow you to scan, connect, and get info on the scale.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.