A Python package for interacting with Etekcity ESF551 Smart Fitness Scales via BLE
Project description
Etekcity ESF-551 BLE
This package provides a basic interface for interacting with Etekcity ESF-551 Smart Fitness Scale using Bluetooth Low Energy (BLE). It allows you to easily connect to the scale, receive weight and impedance measurements, and manage the display unit settings. It is a very basic library, providing access to just the most fundamental functionality of the scale.
It has only been tested on the ESF-551 model. I have no idea whether it might also work with some other bluetooth bathroom scale models from Etekcity. If you try it with a different model, please let me know whether it works or not.
Installation
Install the package using pip:
pip install etekcity_esf551_ble
Quick Start
Here's a basic example of how to use the library:
import asyncio
from etekcity_esf551_ble import (
IMPEDANCE_KEY,
WEIGHT_KEY,
EtekcitySmartFitnessScale,
ScaleData,
WeightUnit,
)
async def main():
def notification_callback(data: ScaleData):
print(f"Weight: {data.measurements[WEIGHT_KEY]} {data.display_unit.name}")
if 'impedance' in data.measurements:
print(f"Impedance: {data.measurements[IMPEDANCE_KEY]} Ω")
scale = EtekcitySmartFitnessScale("XX:XX:XX:XX:XX:XX", notification_callback)
scale.display_unit = WeightUnit.KG # Set display unit to kilograms
await scale.async_start()
await asyncio.sleep(30) # Wait for measurements
await scale.async_stop()
asyncio.run(main())
API Reference
EtekcitySmartFitnessScale
The main class for interacting with the scale.
Methods:
__init__(self, address: str, notification_callback: Callable[[ScaleData], None], display_unit: WeightUnit = None)
async_start()
: Start scanning for and connecting to the scale.async_stop()
: Stop the connection to the scale.
Properties:
display_unit
: Get or set the display unit (WeightUnit.KG, WeightUnit.LB or WeightUnit.ST). Returns None if the display unit is currently unknown (not set by the user and not yet received from the scale together with a stable weight measurement).hw_version
: Get the hardware version of the scale (read-only).sw_version
: Get the software version of the scale (read-only).
WeightUnit
An enum representing the possible display units:
WeightUnit.KG
: KilogramsWeightUnit.LB
: PoundsWeightUnit.ST
: Stones
ScaleData
A dataclass containing scale measurement data:
name
: Scale nameaddress
: Scale Bluetooth addresshw_version
: Hardware versionsw_version
: Software versiondisplay_unit
: Current display unitmeasurements
: Dictionary of measurements (currently supports: weight in kilograms and impedance in ohms)
Compatibility
- Tested on Mac (Apple Silicon) and Raspberry Pi 4
- Compatibility with Windows is unknown
Troubleshooting
On Raspberry Pi 4 (and possibly other Linux machines using BlueZ), if you encounter a org.bluez.Error.InProgress
error, try the following in bluetoothctl
:
power off
power on
scan on
(See https://github.com/home-assistant/core/issues/76186#issuecomment-1204954485)
Support the Project
If you find this project helpful, consider buying me a coffee! Your support helps maintain and improve this library.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for etekcity_esf551_ble-0.1.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 20b6a5baedc2daaf394f9446d3a75d34ba02ffa740d6df477378adcc45386554 |
|
MD5 | 160aac0bdf73cad2101cb2da86fe6896 |
|
BLAKE2b-256 | 2a4ff5f1f35ad0a38931f1d140f74328ba7914ea79412c4dfc94c7b781ace08b |
Hashes for etekcity_esf551_ble-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a6f70769ae4e13680a727a5ea1cddfc72e64f6cd50928ef26c91dec66636b27c |
|
MD5 | 3de29ab15534871828c1cc525d2ace4e |
|
BLAKE2b-256 | efd9e5ab5369957f84e2faaba1526bcbc39e47b2e1d275254c66545266c55d32 |