bleak.backends package

Subpackages

Submodules

bleak.backends.characteristic module

Interface class for the Bleak representation of a GATT Characteristic

class bleak.backends.characteristic.BleakGATTCharacteristic(obj: Any, handle: int, uuid: str, properties: list[CharacteristicPropertyName], max_write_without_response_size: Callable[[], int], service: BleakGATTService)[source]

Bases: object

The Bleak representation of a GATT Characteristic

add_descriptor(descriptor: BleakGATTDescriptor) None[source]

Add a BleakGATTDescriptor to the characteristic.

Should not be used by end user, but rather by bleak itself.

property description: str

Description for this characteristic

property descriptors: list[BleakGATTDescriptor]

List of descriptors for this service

get_descriptor(specifier: int | str | UUID) BleakGATTDescriptor | None[source]

Get a descriptor by handle (int) or UUID (str or uuid.UUID)

property handle: int

The handle for this characteristic

property max_write_without_response_size: int

Gets the maximum size in bytes that can be used for the data argument of BleakClient.write_gatt_char() when response=False.

In rare cases, a device may take a long time to update this value, so reading this property may return the default value of 20 and reading it again after a some time may return the expected higher value.

If you really need to wait for a higher value, you can do something like this:

async with asyncio.timeout(10):
    while char.max_write_without_response_size == 20:
        await asyncio.sleep(0.5)

Warning

Linux quirk: For BlueZ versions < 5.62, this property will always return 20.

Added in version 0.16.

property properties: list[Literal['broadcast', 'read', 'write-without-response', 'write', 'notify', 'indicate', 'authenticated-signed-writes', 'extended-properties', 'reliable-write', 'writable-auxiliaries', 'encrypt-read', 'encrypt-write', 'encrypt-authenticated-read', 'encrypt-authenticated-write', 'authorize']]

Properties of this characteristic

property service_handle: int

The integer handle of the Service containing this characteristic

property service_uuid: str

The UUID of the Service containing this characteristic

property uuid: str

The UUID for this characteristic

class bleak.backends.characteristic.GattCharacteristicsFlags(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: Enum

authenticated_signed_writes = 64
broadcast = 1
extended_properties = 128
indicate = 32
notify = 16
read = 2
reliable_write = 256
writable_auxiliaries = 512
write = 8
write_without_response = 4

bleak.backends.client module

Base class for backend clients.

class bleak.backends.client.BaseBleakClient(address_or_ble_device: BLEDevice | str, **kwargs: Any)[source]

Bases: ABC

The Client Interface for Bleak Backend implementations to implement.

The documentation of this interface should thus be safe to use as a reference for your implementation.

Parameters:

address_or_ble_device (BLEDevice or str) – The Bluetooth address of the BLE peripheral to connect to or the BLEDevice object representing it.

Keyword Arguments:
  • timeout (float) – Timeout for required discover call. Defaults to 10.0.

  • disconnected_callback (callable) – Callback that will be scheduled in the event loop when the client is disconnected. The callable must take one argument, which will be this client object.

abstract async connect(pair: bool, **kwargs: Any) None[source]

Connect to the specified GATT server.

Parameters:
  • pair (bool) – If the client should attempt to pair with the

  • paired. (peripheral before connecting if it is not already)

  • appropriate (Backends that can't implement this should make an)

  • parameter. (log message and ignore the)

abstract async disconnect() None[source]

Disconnect from the specified GATT server.

abstract property is_connected: bool

Check connection status between this client and the server.

Returns:

Boolean representing connection status.

abstract property mtu_size: int

Gets the negotiated MTU.

abstract async pair(*args: Any, **kwargs: Any) None[source]

Pair with the peripheral.

abstract async read_gatt_char(characteristic: BleakGATTCharacteristic, **kwargs: Any) bytearray[source]

Perform read operation on the specified GATT characteristic.

Parameters:

characteristic (BleakGATTCharacteristic) – The characteristic to read from.

Returns:

(bytearray) The read data.

abstract async read_gatt_descriptor(descriptor: BleakGATTDescriptor, **kwargs: Any) bytearray[source]

Perform read operation on the specified GATT descriptor.

Parameters:

descriptor – The descriptor to read from.

Returns:

The read data.

set_disconnected_callback(callback: Callable[[], None] | None, **kwargs: Any) None[source]

Set the disconnect callback. The callback will only be called on unsolicited disconnect event.

Set the callback to None to remove any existing callback.

Parameters:

callback – callback to be called on disconnection.

abstract async start_notify(characteristic: BleakGATTCharacteristic, callback: Callable[[bytearray], None], **kwargs: Any) None[source]

Activate notifications/indications on a characteristic.

Implementers should call the OS function to enable notifications or indications on the characteristic.

To keep things the same cross-platform, notifications should be preferred over indications if possible when a characteristic supports both.

abstract async stop_notify(characteristic: BleakGATTCharacteristic) None[source]

Deactivate notification/indication on a specified characteristic.

Parameters:

characteristic (BleakGATTCharacteristic) – The characteristic to deactivate notification/indication on.

abstract async unpair() None[source]

Unpair with the peripheral.

abstract async write_gatt_char(characteristic: BleakGATTCharacteristic, data: Buffer, response: bool) None[source]

Perform a write operation on the specified GATT characteristic.

Parameters:
  • characteristic – The characteristic to write to.

  • data – The data to send.

  • response – If write-with-response operation should be done.

abstract async write_gatt_descriptor(descriptor: BleakGATTDescriptor, data: Buffer) None[source]

Perform a write operation on the specified GATT descriptor.

Parameters:
  • descriptor – The descriptor to read from.

  • data – The data to send (any bytes-like object).

bleak.backends.client.get_platform_client_backend_type() type[BaseBleakClient][source]

Gets the platform-specific BaseBleakClient type.

bleak.backends.descriptor module

Interface class for the Bleak representation of a GATT Descriptor

class bleak.backends.descriptor.BleakGATTDescriptor(obj: Any, handle: int, uuid: str, characteristic: BleakGATTCharacteristic)[source]

Bases: object

The Bleak representation of a GATT Descriptor

property characteristic_handle: int

handle for the characteristic that this descriptor belongs to

property characteristic_uuid: str

UUID for the characteristic that this descriptor belongs to

property description: str

A text description of what this descriptor represents

property handle: int

Integer handle for this descriptor

property uuid: str

UUID for this descriptor

bleak.backends.device module

Wrapper class for Bluetooth LE servers returned from calling bleak.discover().

class bleak.backends.device.BLEDevice(address: str, name: str | None, details: Any, **kwargs: Any)[source]

Bases: object

A simple wrapper class representing a BLE server detected during scanning.

address

The Bluetooth address of the device on this machine (UUID on macOS).

details

The OS native details required for connecting to the device.

name

The operating system name of the device (not necessarily the local name from the advertising data), suitable for display to the user.

bleak.backends.scanner module

class bleak.backends.scanner.AdvertisementData(local_name: str | None, manufacturer_data: dict[int, bytes], service_data: dict[str, bytes], service_uuids: list[str], tx_power: int | None, rssi: int, platform_data: tuple[Any, ...])[source]

Bases: NamedTuple

Wrapper around the advertisement data that each platform returns upon discovery

local_name: str | None

The local name of the device or None if not included in advertising data.

manufacturer_data: dict[int, bytes]

Dictionary of manufacturer data in bytes from the received advertisement data or empty dict if not present.

The keys are Bluetooth SIG assigned Company Identifiers and the values are bytes.

https://www.bluetooth.com/specifications/assigned-numbers/company-identifiers/

platform_data: tuple[Any, ...]

Tuple of platform specific data.

This is not a stable API. The actual values may change between releases.

rssi: int

The Radio Receive Signal Strength (RSSI) in dBm.

Added in version 0.19.

service_data: dict[str, bytes]

Dictionary of service data from the received advertisement data or empty dict if not present.

service_uuids: list[str]

List of service UUIDs from the received advertisement data or empty list if not present.

tx_power: int | None

TX Power Level of the remote device from the received advertising data or None if not present.

Added in version 0.17.

bleak.backends.scanner.AdvertisementDataCallback

Type alias for callback called when advertisement data is received.

alias of Callable[[BLEDevice, AdvertisementData], Coroutine[Any, Any, None] | None]

bleak.backends.scanner.AdvertisementDataFilter

Type alias for an advertisement data filter function.

Implementations should return True for matches, otherwise False.

alias of Callable[[BLEDevice, AdvertisementData], bool]

class bleak.backends.scanner.BaseBleakScanner(detection_callback: Callable[[BLEDevice, AdvertisementData], Coroutine[Any, Any, None] | None] | None, service_uuids: list[str] | None)[source]

Bases: ABC

Interface for Bleak Bluetooth LE Scanners

Parameters:
  • detection_callback – Optional function that will be called each time a device is discovered or advertising data has changed.

  • service_uuids – Optional list of service UUIDs to filter on. Only advertisements containing this advertising data will be received.

call_detection_callbacks(device: BLEDevice, advertisement_data: AdvertisementData) None[source]

Calls all registered detection callbacks.

Backend implementations should call this method when an advertisement event is received from the OS.

create_or_update_device(key: str, address: str, name: str | None, details: Any, adv: AdvertisementData) BLEDevice[source]

Creates or updates a device in seen_devices.

Parameters:
  • key – A backend-specific identifier for the device.

  • address – The Bluetooth address of the device (UUID on macOS).

  • name – The OS display name for the device.

  • details – The platform-specific handle for the device.

  • adv – The most recent advertisement data received.

Returns:

The updated device.

is_allowed_uuid(service_uuids: list[str] | None) bool[source]

Check if the advertisement data contains any of the service UUIDs matching the filter. If no filter is set, this will always return True.

Parameters:

service_uuids – The service UUIDs from the advertisement data.

Returns:

True if the advertisement data should be allowed or False

if the advertisement data should be filtered out.

register_detection_callback(callback: Callable[[BLEDevice, AdvertisementData], Coroutine[Any, Any, None] | None] | None) Callable[[], None][source]

Register a callback that is called when an advertisement event from the OS is received.

The callback is a function or coroutine that takes two arguments: BLEDevice and AdvertisementData.

Parameters:

callback – A function, coroutine or None.

Returns:

A method that can be called to unregister the callback.

seen_devices: dict[str, tuple[BLEDevice, AdvertisementData]]

Map of device identifier to BLEDevice and most recent advertisement data.

The key is a backend-specific identifier for the device.

This map must be cleared when scanning starts.

abstract async start() None[source]

Start scanning for devices

abstract async stop() None[source]

Stop scanning for devices

bleak.backends.scanner.get_platform_scanner_backend_type() type[BaseBleakScanner][source]

Gets the platform-specific BaseBleakScanner type.

bleak.backends.service module

Gatt Service Collection class and interface class for the Bleak representation of a GATT Service.

class bleak.backends.service.BleakGATTService(obj: Any, handle: int, uuid: str)[source]

Bases: object

The Bleak representation of a GATT Service.

add_characteristic(characteristic: BleakGATTCharacteristic) None[source]

Add a BleakGATTCharacteristic to the service.

Should not be used by end user, but rather by bleak itself.

property characteristics: list[BleakGATTCharacteristic]

List of characteristics for this service

property description: str

String description for this service

get_characteristic(uuid: str | UUID) BleakGATTCharacteristic | None[source]

Get a characteristic by UUID.

Parameters:

uuid – The UUID to match.

Returns:

The first characteristic matching uuid or None if no matching characteristic was found.

property handle: int

The handle of this service

property uuid: str

The UUID to this service

class bleak.backends.service.BleakGATTServiceCollection[source]

Bases: object

Simple data container for storing the peripheral’s service complement.

add_characteristic(characteristic: BleakGATTCharacteristic) None[source]

Add a BleakGATTCharacteristic to the service collection.

Should not be used by end user, but rather by bleak itself.

add_descriptor(descriptor: BleakGATTDescriptor) None[source]

Add a BleakGATTDescriptor to the service collection.

Should not be used by end user, but rather by bleak itself.

add_service(service: BleakGATTService) None[source]

Add a BleakGATTService to the service collection.

Should not be used by end user, but rather by bleak itself.

property characteristics: dict[int, BleakGATTCharacteristic]

Returns dictionary of handles mapping to BleakGATTCharacteristic

property descriptors: dict[int, BleakGATTDescriptor]

Returns a dictionary of integer handles mapping to BleakGATTDescriptor

get_characteristic(specifier: int | str | UUID) BleakGATTCharacteristic | None[source]

Get a characteristic by handle (int) or UUID (str or uuid.UUID)

get_descriptor(handle: int) BleakGATTDescriptor | None[source]

Get a descriptor by integer handle

get_service(specifier: int | str | UUID) BleakGATTService | None[source]

Get a service by handle (int) or UUID (str or uuid.UUID)

property services: dict[int, BleakGATTService]

Returns dictionary of handles mapping to BleakGATTService

Module contents

__init__.py