All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fixed
AttributeErrorin Python4Android backend when accessingis_connectedbefore connecting. Fixes #1791.
1.1.0 (2025-08-10)
- Added support for Pythonista iOS app backend.
- Added
BleakClient.nameproperty for getting the peripheral's name. Fixes #1802.
- Fixed
BleakClient.connect()on Android when service characteristics have descriptors. Fixes #1803. - Fixed disconnect callback not called on Windows when Bleak initiates disconnection.
1.0.1 (2025-06-30)
- Added deprecation warnings for importing
bleak.args.*types frombleak.backends.*.
- Restored
**kwargsinBLEDevice()constructor. Fixes #1783. - Restored importing
OrPatternfrombleak.backends.bluezdbus.advertisement_monitor.
1.0.0 (2025-06-28)
- Added
pairparameter toBleakClient()constructor to allow pairing before connecting. Fixes #309. - Added
notification_discriminatorparameter tostart_notify()on CoreBluetooth backend. Merged #1742.
- Enabled extended advertising scanning in the WinRT backend. Merged #1705.
- Made response argument of class
BleakClient.write_gatt_char()explicitly optional. Fixes #1730. - Updated Poetry build system version to
>=2.0. Merged #1718. - Log to stderr instead of stdout when
BLEAK_LOGGINGis enabled. Merged #1709. - Updated
winrtbackend to use PyWinRT >= 3.1. - Changed return type of
connect(),disconnect(),pair()andunpair()methods toNone. - Moved backend-specific arg types to new
bleak.argssub-package. BLEDevice.namewill now returnNoneinstead of the address when the name is not available. Merged #1762.- Deprecated
protection_levelkwarg for pairing in WinRT backend. Merged #1770.
- Fixed resolvable private address not updated after connecting in BlueZ backend. Fixes #1737.
- Fixed possible
KeyErrorwhen getting services in BlueZ backend. Fixes #1435. - Fix D-Bus connection leak when connecting to a device fails in BlueZ backend. Fixes #1698.
- Fixed possible deadlock when connecting on WinRT backend when device is already connected. Fixes #1757.
- Fixed getting notifications from devices connected to BLE adapters with index >9 (hci10, hci11, ...). Merged #1744.
- Fixed ATT error code 15 description to "Insufficient Encryption". Merged #1746.
- Removed support for Python 3.8. The minimum supported version is now Python 3.9.
- Removed deprecated parameters, properties and methods.
- Removed support for macOS < 10.13.
- Removed support for BlueZ < 5.55.
0.22.3 (2024-10-05)
- Don't change ctypes' global state
bleak.backends.winrt.util. - Improved performance of BlueZ backend when there are many adapters.
- Added support for Python 3.13.
0.22.2 (2024-06-01)
- Retrieve the BLE address required by
BleakClientWinRTfrom scan response if advertising is None (WinRT). - Changed type hint for
advattribute ofbleak.backends.winrt.scanner._RawAdvData. BleakGATTCharacteristic.max_write_without_response_sizeis now dynamic.
- Fixed
discovered_devices_and_advertisement_datareturning devices that should be filtered out by service UUIDs. Fixes #1576. - Fixed a
Descriptor None was not found!exception occurring instart_notify()on Android. Fixes #823. - Fixed exception raised when starting
BleakScannerwhile running in a Windows GUI app.
0.22.1 (2024-05-07)
- Added
bleak.backends.winrt.util.allow_sta()method to allow integration with graphical user interfaces on Windows. Fixes #1565.
0.22.0 (2024-05-04)
- Added
BleakCharacteristicNotFoundErrorwhich is raised if a device does not support a characteristic. - Added utility function to work around
pywin32setting threading model to STA on Windows.
- Updated PyObjC dependency on macOS to v10.x.
- Updated missing Bluetooth SIG characteristics and service UUIDs.
- Updated
BlueZManagerto remove empty interfaces from _properties during InterfacesRemoved message. - Updated PyWinRT dependency to v2. Fixes #1529.
- Raise exception when trying to scan while in a single-treaded apartment (STA) on Windows. Fixes #1132.
- Fixed BlueZ version in passive scanning error message. Fixes #1433.
- Fixed mypy requiring
Unpack[ExtraArgs]that were intended to be optional. Fixes #1487. - Fixed
KeyErrorin BlueZis_connected()andget_global_bluez_manager()when device is not present. Fixes #1507. - Fixed BlueZ
_wait_removedcompletion on invalid object path. Fixes #1489. - Fixed rare unhandled exception when scanning on macOS when using
use_bdaddr. Fixes #1523. - Fixed scanning silently failing on Windows when Bluetooth is off. Fixes #1535.
- Fixed using wrong value for
tx_powerin Android backend. Fixes #1532. - Fixed 4-character UUIDs not working on
BleakClient.*_gatt_charmethods. Fixes #1498. - Fixed race condition with getting max PDU size on Windows. Fixes #1497. [REVERTED in v0.22.2]
- Fixed filtering advertisement data by service UUID when multiple apps are scanning. Fixes #1534.
0.21.1 (2023-09-08)
- Changed
dbus-fastdependency to include v2.x. Fixes #1412.
0.21.0 (2023-09-02)
- Added
bleak.uuids.normalize_uuid_16()function. - Added
bleak.uuids.normalize_uuid_32()function. - Added
advertisement_data()async iterator method toBleakScanner. Merged #1361. - Added type hints for kwargs on
BleakScannerclass methods. - Added support for Python 3.12.
- Improved error messages when failing to get services in WinRT backend.
- Improved error messages with enum values in WinRT backend. Fixes #1284.
- Scanner backends modified to allow multiple advertisement callbacks. Merged #1367.
- Changed default handling of the
responseargument inBleakClient.write_gatt_char. Fixes #909. - Bleak recipe now automatically installs bleak from GitHub release in Kivy example.
- Changed BlueZManager methods to raise BleakError when device is not in BlueZ.
- Optimized BlueZ backend device watchers and condition callbacks to avoid linear searches.
- Changed type hint for buffer protocol to
collections.abc.Buffer.
- Fixed handling all access denied errors when enumerating characteristics on Windows. Fixes #1291.
- Added support for 32bit UUIDs. Fixes #1314.
- Fixed typing for
BaseBleakScannerdetection callback. - Fixed possible crash in
_stopped_handler()in WinRT backend. Fixes #1330. - Reduced expensive logging in the BlueZ backend. Merged #1376.
- Fixed race condition with
"InterfaceRemoved"when getting services in BlueZ backend. - Fixed missing permissions and requirements in android Kivy example. Fixes #1184.
- Fixed WinRT backend sometimes hanging forever when a device goes out of range during connection. Fixes #1359.
Dropped support for Python 3.7.
0.20.2 (2023-04-19)
- Fixed
org.bluez.Error.InProgressin characteristic and descriptor read and write methods in BlueZ backend. - Fixed
OSError: [WinError -2147483629] The object has been closedwhen connecting on Windows. Fixes #1280.
0.20.1 (2023-03-24)
- Fixed possible garbage collection of running async callback from
BleakClient.start_notify(). - Fixed possible garbage collection of running async callback from
BleakScanner(detection_callback=). - Fixed possible garbage collection of disconnect monitor in BlueZ backend. Fixed #1258.
0.20.0 (2023-03-17)
- Added
BLEAK_DBUS_AUTH_UIDenvironment variable for hardcoding D-Bus UID. Merged #1182. - Added return type
Noneto some scanner methods. - Added optional hack to use Bluetooth address instead of UUID on macOS. Merged #1073.
- Added
BleakScanner.find_device_by_name()class method. - Added optional command line argument to use debug log level to all applicable examples.
- Added
bleak.uuids.normalize_uuid_str()function. - Added optional
servicesargument toBleakClient()to filter services. Merged #654. - Added automatic retry on
le-connection-abort-by-localin BlueZ backend. Fixes #1220.
- Dropped
async-timeoutdependency on Python >= 3.11. - Deprecated
BLEDevice.rssiandBLEDevice.metadata. Fixes #1025. BLEDevicenow uses__slots__to reduce memory usage. Merged #1117.BaseBleakClient.servicesis nowNoneinstead of empty service collection until services are discovered.- Include thread name in
BLEAK_LOGGINGoutput. Merged #1144. - Updated PyObjC dependency on macOS to v9.x.
- Fixed invalid UTF-8 in
uuids.uuid16_dict. - Fixed
AttributeErrorin_ensure_successin WinRT backend. - Fixed
BleakScanner.stop()can raiseBleakDBusErrorwithorg.bluez.Error.NotReadyin BlueZ backend. - Fixed
BleakScanner.stop()hanging in WinRT backend when Bluetooth is disabled. - Fixed leaking services when
get_services()is cancelled in WinRT backend. - Fixed disconnect monitor task not always cancelled on the BlueZ client. Merged #1159.
- Fixed WinRT scanner never calling
detection_callbackwhen a device does not send a scan response. Fixes #1211. - Fixed
BLEDevicename sometimes incorrectlyNone. - Fixed unhandled exception in
CentralManagerDelegatedestructor on macOS. Fixes #1219. - Fixed object passed to
disconnected_callbackis notBleakClient. Fixes #1200.
0.19.5 (2022-11-19)
- Fixed more issues with getting services in WinRT backend.
0.19.4 (2022-11-06)
- Fixed
TypeErrorin WinRT backend introduced in v0.19.3.
0.19.3 (2022-11-06)
- Fixed
TimeoutErrorwhen connecting to certain devices with WinRT backend. Fixes #604.
0.19.2 (2022-11-06)
- Fixed crash when getting services in WinRT backend in Python 3.11. Fixes #1112.
- Fixed cache mode when retrying get services in WinRT backend. Merged #1102.
- Fixed
KeyErrorcrash in BlueZ backend when removing non-existent property. Fixes #1107.
0.19.1 (2022-10-29)
- Fixed crash in Android backend introduced in v0.19.0. Fixes #1085.
- Fixed service discovery blocking forever if device disconnects in BlueZ backend. Merged #1092.
- Fixed
AttributeErrorcrash when scanning on Windows builds < 19041. Fixes #1094.
0.19.0 (2022-10-13)
- Added support for Python 3.11. Merged #990.
- Added better error message for Bluetooth not authorized on macOS. Merged #1033.
- Added
BleakDeviceNotFoundErrorwhich should is raised if a device can not be found byconnect,pairandunpair. Merged #1022. - Added
rssiattribute toAdvertisementData. Merged #1047. - Added
BleakScanner.discovered_devices_and_advertisement_dataproperty. Merged #1047. - Added
return_advargument toBleakScanner.discovermethod. Merged #1047. - Added
BleakClient.unpair()implementation for BlueZ backend. Merged #1067.
- Changed
AdvertisementDatato a named tuple. Merged #1047. - A faster
unpack_variantsis now provided by dbus-fast. Merged #1055.
- On BlueZ, support creating additional instances running on a different event loops (i.e. multiple pytest-asyncio cases). Merged #1034.
- Fixed unhandled exception in
max_pdu_size_changed_handlerin WinRT backend. Fixes #1039. - Fixed stale services in WinRT backend causing
WinError -2147483629. Fixes #1061.
Removed bleak.__version__. Use importlib.metadata.version('bleak') instead.
0.18.1 (2022-09-25)
- Reverted unintentional breaking parameter name changes. Fixes #1028.
0.18.0 (2022-09-23)
- Relaxed
async-timeoutdependency version to support different installations. Merged #1009. BleakClient.unpair()in WinRT backend can be called without being connected first. Merged #1012.- Use relative imports internally. Merged #1007.
BleakScannerandBleakClientare now concrete classes. Fixes #582.- Deprecated
BleakScanner.register_detection_callback(). - Deprecated
BleakScanner.set_scanning_filter(). - Deprecated
BleakClient.set_disconnected_callback(). - Deprecated
BleakClient.get_services(). - Refactored common code in
BleakClient.start_notify(). - (BREAKING) Changed notification callback argument from
inttoBleakGattCharacteristic. Fixes #759.
- Fixed
tx_powernot included inAdvertisementData.__repr__when 0. Merged #1017.
0.17.0 (2022-09-12)
AdvertisementDataclass now has an attributetx_power. Merged #987.
BleakClientmethods now raiseBleakErrorif called when not connected in WinRT backend. Merged #973.- Extended disconnect timeout to 120 seconds in WinRT backend. Fixes #807.
- Changed version check for BlueZ battery workaround to exclude versions >= 5.55. Merged #976.
- Use Poetry for build system and dependencies. Merged #978.
- The BlueZ D-Bus backend implements a services cache between connections to significancy improve reconnect performance.
To use the cache, call
connectandget_serviceswith thedangerous_use_bleak_cacheargument to avoid services being resolved again. Merged #923. - The BlueZ D-Bus backend now uses
dbus-fastpackage instead ofdbus-nextwhich significantly improves performance. Merged #988. - The BlueZ D-Bus backend will not avoid trying to connect to devices that are already connected. Fixes #992.
- Updated logging to lazy version and replaced format by f-string for
BleakClientWinRT. #1000. - Added deprecation warning to
discover()method. Merged #1005. - BlueZ adapter is chosen dynamically if not provided, instead of using hardcoded "hci0". Fixes #513.
- Fixed wrong error message for BlueZ "Operation failed with ATT error". Merged #975.
- Fixed possible
AttributeErrorwhen enabling notifications for battery service in BlueZ backend. Merged #976. - Fixed use of wrong enum in unpair function of WinRT backend. Merged #986.
- Fixed inconsistent return types for
propertiesanddescriptorsproperties ofBleakGATTCharacteristic. Merged #989. - Handle device being removed before
GetManagedObjectsreturns in BlueZ backend. Fixes #996. - Fixed crash in
max_pdu_size_changed_handlerin WinRT backend. Fixes #998. - Fixes a race in the BlueZ D-Bus backend where the disconnect monitor would be removed before it could be awaited. Merged #999.
- Removed
BLEDeviceCoreBluetoothtype from CoreBluetooth backend. Merged #977.
0.16.0 (2022-08-31)
- Added
BleakGattCharacteristic.max_write_without_response_sizeproperty. Fixes #738.
- Fixed regression in v0.15 where devices removed from BlueZ while scanning
were still listed in
BleakScanner.discovered_devices. Fixes #942. - Fixed possible bad connection state in BlueZ backend. Fixes #951.
- Made BlueZ D-Bus signal callback logging lazy to improve performance. Merged #912.
- Switch to using
async_timeoutinstead ofasyncio.wait_for for performance. Merged #916. - Improved performance of
BlueZManager.get_services(). Fixes #927.
- Removed explicit inheritance from object in class declarations. Merged #922.
- Removed first seen filter in
BleakScannerdetection callbacks on BlueZ backend. Merged #964.
0.15.1 (2022-08-03)
- The global BlueZ manager now disconnects correctly on exception. Merged #918.
- Handle the race in the BlueZ D-Bus backend where the device disconnects during
the connection process which presented as
Failed to cancel connection. Merged #919. - Ensure the BlueZ D-Bus scanner can reconnect after DBus disconnection. Merged #920.
- Adjust default timeout for
read_gatt_char()with CoreBluetooth to 20s. Fixes #926.
0.15.0 (2022-07-29)
- Added new
assigned_numbersmodule andAdvertisementDataTypeenum. - Added new
bluezkwarg toBleakScannerin BlueZ backend. - Added support for passive scanning in the BlueZ backend. Fixes #606.
- Added option to use cached services, characteristics and descriptors in WinRT backend. Fixes #686.
- Added
PendingDeprecationWarningto use ofaddress_typeas keyword argument. It will be moved into thewinrtkeyword instead according to #623. - Added better error message when adapter is not present in BlueZ backend. Fixes #889.
- Add
py.typedfile so mypy discovers Bleak's type annotations. - UUID descriptions updated to 2022-03-16 assigned numbers document.
- Replace use of deprecated
asyncio.get_event_loop()in Android backend. - Adjust default timeout for
read_gatt_char()with CoreBluetooth to 10s. Merged #891. BleakScanner()argsdetection_callbackandservice_uuidsare no longer keyword-only.BleakScanner()argscanning_modeis no longer Windows-only and is no longer keyword-only.- All
BleakScanner()instances in BlueZ backend now use common D-Bus object manager. - Deprecated
filterskwarg inBleakScannerin BlueZ backend. - BlueZ version is now checked on first connection instead of import to avoid import side effects. Merged #907.
- Documentation fixes.
- On empty characteristic description from WinRT, use the lookup table instead of returning empty string.
- Fixed detection of first advertisement in BlueZ backend. Merged #903.
- Fixed performance issues in BlueZ backend caused by calling "GetManagedObjects" each time a
BleakScannerscans orBleakClientis connected. Fixes #500. - Fixed not handling "InterfacesRemoved" in
BleakClientin BlueZ backend. Fixes #882. - Fixed leaking D-Bus socket file descriptors in BlueZ backend. Fixes #805.
- Removed fallback to call "ConnectDevice" when "Connect" fails in Bluez backend. Fixes #806.
0.14.3 (2022-04-29)
- Suppress macOS 12 scanner bug error message for macOS 12.3 and higher. Fixes #720.
- Added filters
DiscoverableandPatternto BlueZ D-Bus scanner. Fixes #790.
- Fixed reading the battery level returns a zero-filled
bytearrayon BlueZ >= 5.48. Fixes #750. - Fixed unpairing does not work on windows with WinRT. Fixes #699
- Fixed leak of
_disconnect_futuresinCentralManagerDelegate. - Fixed callback not removed from
_disconnect_callbackson disconnect inCentralManagerDelegate.
0.14.2 (2022-01-26)
- Updated
bleak-winrtdependency to v1.1.1. Fixes #741.
- Fixed
nameis'Unknown'in WinRT backend. Fixes #736.
0.14.1 (2022-01-12)
- Fixed
AttributeErrorwhen passingBLEDevicetoBleakClientconstructor on WinRT backend. Fixes #731.
0.14.0 (2022-01-10)
- Added
service_uuidskwarg toBleakScanner. This can be used to work around issue of scanning not working on macOS 12. Fixes #230. Works around #635. - Added UUIDs for LEGO Powered Up Smart Hubs.
- Changed WinRT backend to use GATT session status instead of actual device connection status.
- Changed handling of scan response data on WinRT backend. Advertising data and scan response data is now combined in callbacks like other platforms.
- Updated
bleak-winrtdependency to v1.1.0. Fixes #698.
- Fixed
InvalidStateErrorin CoreBluetooth backend when read and notification of the same characteristic are used. Fixes #675. - Fixed reading a characteristic on CoreBluetooth backend also triggers notification callback.
- Fixed in Linux, scanner callback not setting metadata parameters. Merged #715.
0.13.0 (2021-10-20)
- Allow 16-bit UUID string arguments to
get_service()andget_characteristic(). - Added
register_uuids()to augment the uuid-to-description mapping. - Added support for Python 3.10.
- Added
force_indicatekeyword argument for WinRT backend client'sstart_notifymethod. Fixes #526. - Added python-for-android backend.
- Changed from
winrtdependency tobleak-winrt. - Improved error when connecting to device fails in WinRT backend. Fixes #647.
- Changed examples to use
asyncio.run(). - Changed the default notify method for the WinRT backend from
IndicatetoNotify. - Refactored GATT error handling in WinRT backend.
- Changed Windows Bluetooth packet capture instructions. Fixes #653.
- Replaced usage of deprecated
@abc.abstractproperty. - Use
asyncio.get_running_loop()instead ofasyncio.get_event_loop(). - Changed "service is already present" exception to logged error in BlueZ backend. Merged #622.
- WinRT backend no longer waits for GATT session to close on disconnect. Fixes #1759.
- Removed
dotnetbackend. - Dropped support for Python 3.6.
- Removed
use_cachedkwarg fromBleakClientconnect()andget_services()methods. Fixes #646.
- Fixed unused timeout in the implementation of BleakScanner's
find_device_by_address()function. - Fixed BleakClient ignoring the
adapterkwarg. Fixes #607. - Fixed writing descriptors in WinRT backend. Fixes #615.
- Fixed race on disconnect and cleanup of BlueZ matches when device disconnects early. Fixes #603.
- Fixed memory leaks on Windows.
- Fixed protocol error code descriptions on WinRT backend. Fixes #532.
- Fixed race condition hitting assentation in BlueZ
disconnect()method. Fixes #641. - Fixed enumerating services on a device with HID service on WinRT backend. Fixes #599.
- Fixed subprocess running to check BlueZ version each time a client is created. Fixes #602.
- Fixed exception when discovering services after reconnecting in CoreBluetooth backend.
0.12.1 (2021-07-07)
- Changed minimum
winrtpackage version to 1.0.21033.1. Fixes #589.
- Fixed unawaited future when writing without response on CoreBluetooth backend. Fixes #586.
0.12.0 (2021-06-19)
- Added
mtu_sizeproperty for clients. - Added WinRT backend.
- Added
BleakScanner.discovered_devicesproperty. - Added an event to await when stopping scanners in WinRT and pythonnet backends. Fixes #556.
- Added
BleakScanner.find_device_by_filterstatic method. - Added
scanner_byname.pyexample. - Added optional command line argument to specify device to all applicable examples.
- Added
Programming Language :: Python :: 3.9classifier insetup.py. - Deprecated
BleakScanner.get_discovered_devices()async method. - Added capability to handle async functions as detection callbacks in
BleakScanner. - Added error description in addition to error name when
BleakDBusErroris converted to string. - Change typing of data parameter in write methods to
Union[bytes, bytearray, memoryview]. - Improved type hints in CoreBluetooth backend.
- Use delegate callbacks for
get_rssi()on CoreBluetooth backend. - Use
@objc.python_methodwhere possible inPeripheralDelegateclass. - Using ObjC key-value observer to wait for
BleakScanner.start()andstop()in CoreBluetooth backend.
- Fixed
KeyErrorwhen trying to connect toBLEDevicefrom advertising data callback on macOS. Fixes #448. - Handling of undetected devices in
connect_by_bledevice.pyexample. Fixes #487. - Added
Optionaltypehint forBleakScanner.find_device_by_address. - Fixed
linux_autodoc_mock_importindocs/conf.py. - Minor fix for disconnection event handling in BlueZ backend. Fixes #491.
- Corrections for the Philips Hue lamp example. Merged #505.
- Fixed
BleakClientBlueZDBus.pair()method always returningTrue. Fixes #503. - Fixed waiting for notification start/stop to complete in CoreBluetooth backend.
- Fixed write without response on BlueZ < 5.51.
- Fixed error propagation for CoreBluetooth events.
- Fixed failed import on CI server when BlueZ is not installed.
- Fixed notification
valueshould bebytearrayon CoreBluetooth. Fixes #560. - Fixed crash when cancelling connection when Python runtime shuts down on CoreBluetooth backend. Fixes #538.
- Fixed connecting to multiple devices using a single
BleakScanneron CoreBluetooth backend. - Fixed deadlock in CoreBluetooth backend when device disconnects while callbacks are pending. Fixes #535.
- Fixed deadlock when using more than one service, characteristic or descriptor with the same UUID on CoreBluetooth backend.
- Fixed exception raised when calling
BleakScanner.stop()when already stopped in CoreBluetooth backend.
0.11.0 (2021-03-17)
- Updated
dotnet.client.BleakClientDotNetconnect method docstring. - Added
AdvertisementServiceDatain BLEDevice in macOS devices - Protection levels (encryption) in Windows backend pairing. Solves #405.
- Philips Hue lamp example script. Relates to #405.
- Keyword arguments to
get_servicesmethod onBleakClient. - Keyword argument
use_cachedon .NET backend, to enable uncached reading of services, characteristics and descriptors in Windows. - Documentation on troubleshooting OS level caches for services.
- New example added: Async callbacks with a queue and external consumer
handleproperty onBleakGATTServiceobjectsservice_handleproperty onBleakGATTCharacteristicobjects- Added more specific type hints for
BleakGATTServiceCollectionproperties. - Added
asynciotask to disconnect devices on event loop crash in BlueZ backend. - Added filtering on advertisement data callbacks on BlueZ backend so that callbacks only occur when advertising data changes like on macOS backend.
- Added fallback to try
org.bluez.Adapter1.ConnectDevicewhen trying to connect a device in BlueZ backend. - Added UART service example.
- Fixed wrong OS write method called in
write_gatt_descriptor()in Windows backend. Merged #403. - Fixed
BaseBleakClient.services_resolvednot reset on disconnect on BlueZ backend. Merged #401. - Fixed RSSI missing in discovered devices on macOS backend. Merged #400.
- Fixed scan result shows 'Unknown' name of the
BLEDevice. Fixes #371. - Fixed a broken check for the correct adapter in
BleakClientBlueZDBus. - Fixed #445 and #362 for Windows.
- Using handles to identify the services. Added handle abstract property to BleakGATTService and storing the services by handle instead of UUID.
- Changed
BleakScanner.set_scanning_filter()from async method to normal method. - Changed BlueZ backend to use
dbus-nextinstead oftxdbus. - Changed
BleakClient.is_connectedfrom async method to property. - Consolidated D-Bus signal debug messages in BlueZ backend.
- Removed all
__str__methods from backend service, characteristic and descriptor implementations in favour of those in the abstract base classes.
0.10.0 (2020-12-11)
- Added
AdvertisementDataclass used with detection callbacks across all supported platforms. Merged #334. - Added
BleakErrorraised during import on unsupported platforms. - Added
rssiparameter toBLEDeviceconstructor. - Added
detection_callbackkwarg toBleakScannerconstructor.
- Updated minimum PyObjC version to 7.0.1.
- Consolidated implementation of
BleakScanner.register_detection_callback(). All platforms now take callback withBLEDeviceandAdvertisementDataarguments. - Consolidated
BleakScanner.find_device_by_address()implementations. - Renamed "device" kwarg to "adapter" in BleakClient and BleakScanner. Fixes #381.
- Fixed use of bare exceptions.
- Fixed
BleakClientBlueZDBus.start_notify()misses initial notifications with fast Bluetooth devices. Fixed #374. - Fix event callbacks on Windows not running in asyncio event loop thread.
- Fixed
BleakScanner.discover()on older versions of macOS. Fixes #331. - Fixed disconnect callback on BlueZ backend.
- Fixed calling
BleakClient.is_connected()on Mac before connection. - Fixed kwargs ignored in
BleakScanner.find_device_by_address()in BlueZ backend. Fixes #360.
- Removed duplicate definition of
BLEDevicein BlueZ backend. - Removed unused imports.
- Removed separate implementation of global
discovermethod.
0.9.1 (2020-10-22)
- Added new attribute
_device_infoonBleakClientBlueZDBus. Merges #347. - Added Pull Request Template.
- Updated instructions on how to contribute, file issues and make PRs.
- Updated
AUTHORS.rstfile with development team.
- Fix well-known services not converted to UUIDs in
BLEDevice.metadatain CoreBluetooth backend. Fixes #342. - Fix advertising data replaced instead of merged in scanner in CoreBluetooth backend. Merged #343.
- Fix CBCentralManager not properly waited for during initialization in some cases.
- Fix AttributeError in CoreBluetooth when using BLEDeviceCoreBluetooth object.
0.9.0 (2020-10-20)
- Timeout for BlueZ backend connect call to avoid potential infinite hanging. Merged #306.
- Added Interfaces API docs again.
- Troubleshooting documentation.
- noqa flags added to
BleakBridgeimports. - Adding a timeout on OSX so that the connect cannot hang forever. Merge #336.
BleakCharacteristic.description()on .NET now returns the same value as other platforms.- Changed all adding and removal of .NET event handler from
+=/-=syntax to callingadd_andremove_methods instead. This allows for proper removal of event handlers in .NET backend. - All code dependence on the
BleakBridgeis now removed. It is only imported to allow for access to UWP namespaces. - Removing internal method
_start_notifyin the .NET backend. GattSessionobject now manages lifetime of .NETBleakClientconnection.BleakClientin .NET backend will reuse previous device information when reconnecting so that it doesn't have to scan/discover again.
- UUID property bug fixed in BlueZ backend. Merged #307.
- Fix for broken RTD documentation.
- Fix UUID string arguments should not be case sensitive.
- Fix
BleakGATTService.get_characteristic()method overridden withNotImplementedErrorin BlueZ backend. - Fix
AttributeErrorwhen trying to connect using CoreBluetooth backend. Merged #323. - Fix disconnect callback called multiple times in .NET backend. Fixes #312.
- Fix
BleakClient.disconnect()method failing when called multiple times in .NET backend. Fixes #313. - Fix
BleakClient.disconnect()method failing when called multiple times in Core Bluetooth backend. Merge #333. - Catch RemoteError in
is_connectedin BlueZ backend. Fixes #310, - Prevent overwriting address in constructor of
BleakClientin BlueZ backend. Merge #311. - Fix nordic uart UUID. Merge #339.
0.8.0 (2020-09-22)
- Implemented
set_disconnected_callbackin the .NET backendBleakClientimplementation. - Added
find_device_by_addressmethod to theBleakScannerinterface, for stopping scanning when a desired address is found. - Implemented
find_device_by_addressin the .NET backendBleakScannerimplementation and switched itsBleakClientimplementation to use that method inconnect. - Implemented
find_device_by_addressin the BlueZ backendBleakScannerimplementation and switched itsBleakClientimplementation to use that method inconnect. - Implemented
find_device_by_addressin the Core Bluetooth backendBleakScannerimplementation and switched itsBleakClientimplementation to use that method inconnect. - Added text representations of Protocol Errors that are visible in the .NET backend. Added these texts to errors raised.
- Added pairing method in
BleakClientinterface. - Implemented pairing method in .NET backend.
- Implemented pairing method in the BlueZ backend.
- Added stumps and
NotImplementedErroron pairing in macOS backend. - Added the possibility to connect using
BLEDeviceinstead of a string address. This allows for skipping the discovery call when connecting.
- Support for Python 3.5.
- BREAKING CHANGE All notifications now have the characteristic's integer handle instead of its UUID as a
string as the first argument
sendersent to notification callbacks. This provides the uniqueness of sender in notifications as well. - Renamed
BleakClientargumentaddresstoaddress_or_ble_device. - Version 0.5.0 of BleakUWPBridge, with some modified methods and implementing
IDisposable. - Merged #224. All storing and passing of event loops in bleak is removed.
- Removed Objective C delegate compliance checks. Merged #253.
- Made context managers for .NET
DataReaderandDataWriter.
- .NET backend loop handling bug entered by #224 fixed.
- Removed default
DEBUGlevel set to bleak logger. Fixes #251. - More coherency in logger uses over all backends. Fixes #258
- Attempted fix of #255 and #133: cleanups, disposing of objects and creating new
BleakBridgeinstances each disconnect. - Fixed some type hints and docstrings.
- Modified the
connected_peripheral_delegatehandling in macOS backend to fix #213 and #116. - Merged #270, fixing a critical bug in
get_servicesmethod in Core Bluetooth backend. - Improved handling of disconnections and
is_connectedin BlueZ backend to fix #259. - Fix for
set_disconnected_callbackon Core Bluetooth. Fixes #276. - Safer Core Bluetooth presence check. Merged #280.
0.7.1 (2020-07-02)
- Improved, more explanatory error on BlueZ backend when
BleakClientcannot find the desired device when trying to connect. (#238) - Better-than-nothing documentation about scanning filters added (#230).
- Ran black on code which was forgotten in 0.7.0. Large diffs due to that.
- Re-adding Python 3.8 CI "tests" on Windows again.
- Fix when characteristic updates value faster than asyncio schedule (#240 & #241)
- Incorrect
MANIFEST.incorrected. (#244)
0.7.0 (2020-06-30)
- Better feedback of communication errors to user in .NET backend and implementing error details proposed in #174.
- Two devices example file to use for e.g. debugging.
- Detection/discovery callbacks in Core Bluetooth backend
Scannerimplemented. - Characteristic handle printout in
service_explorer.py. - Added scanning filters to .NET backend's
discovermethod.
- Replace
NSRunLoopwith dispatch queue in Core Bluetooth backend. This causes callbacks to be dispatched on a background thread instead of on the main dispatch queue on the main thread.call_soon_threadsafe()is used to synchronize the events with the event loop where the central manager was created. Fixes #111. - The Central Manager is no longer global in the Core Bluetooth backend. A new one is created for each
BleakClientandBleakScanner. Fixes #206 and #105. - Merged #167 and reworked characteristics handling in Bleak. Implemented in all backends; bleak now uses the characteristics' handle to identify and keep track of them. Fixes #139 and #159 and allows connection for devices with multiple instances of the same characteristic UUIDs.
- In
requirements.txtandPipfile, the requirement onpythonnetwas bumped to version 2.5.1, which seems to solve issues described in #217 and #225. - Renamed
HISTORY.rsttoCHANGELOG.rstand adopted the Keep a Changelog format. - Python 3.5 support from macOS is officially removed since pyobjc>6 requires 3.6+
- Pin
pyobjcdependencies to use at least version 6.2. (PR #194) - Pin development requirement on bump2version to version 1.0.0
- Added
.pyup.ymlfor Pyup - Using CBManagerState constants from pyobj instead of integers.
- Removed documentation note about not using new event loops in Linux. This was fixed by #143.
_central_manager_delegate_readywas removed in macOS backend.- Removed the
bleak.backends.bluez.utils.get_gatt_service_pathmethod. It is not used by bleak and possibly generates errors.
- Improved handling of the txdbus connection to avoid hanging of disconnection clients in BlueZ backend. Fixes #216, #219 & #221.
- #150 hints at the device path not being possible to create as is done in the get_device_object_path method. Now, we try to get it from BlueZ first. Otherwise, use the old fallback.
- Minor documentation errors corrected.
CBManagerStatePoweredOnis now properly handled in Core Bluetooth.- Device enumeration in
discover``and ``Scannercorrected. Fixes #211 - Updated documentation about scanning filters.
- Added workaround for
isScanningattribute added in macOS 10.13. Fixes #234.
0.6.4 (2020-05-20)
- Fix for bumpversion usage
0.6.3 (2020-05-20)
- Building and releasing from Github Actions
- Building and releasing on Azure Pipelines
0.6.2 (2020-05-15)
- Added
disconnection_callbackfunctionality for Core Bluetooth (#184 & #186) - Added
requirements.txt
- Better cleanup of Bluez notifications (#154)
- Fix for
read_gatt_charin Core Bluetooth (#177) - Fix for
is_disconnectedin Core Bluetooth (#187 & #185) - Documentation fixes
0.6.1 (2020-03-09)
- Including #156, lost notifications on macOS backend, which was accidentally missed on previous release.
0.6.0 (2020-03-09)
- New Scanner object to allow for async device scanning.
- Updated
txdbusrequirement to version 1.1.1 (Merged #122) - Implemented
write_gatt_descriptorfor Bluez backend. - Large change in Bluez backend handling of Twisted reactors. Fixes #143
- Modified
set_disconnected_callbackto actually call the callback as a callback. Fixes #108. - Added another required parameter to disconnect callbacks.
- Added Discovery filter option in BlueZ backend (Merged #124)
- Merge #138: comments about Bluez version check.
- Improved scanning data for macOS backend. Merge #126.
- Merges #141, a critical fix for macOS.
- Fix for #114, write with response on macOS.
- Fix for #87, DIctionary changes size on .NET backend.
- Fix for #127, uuid or str on macOS.
- Handles str/uuid for characteristics better.
- Merge #148, Run .NET backend notifications on event loop instead of main loop.
- Merge #146, adapt characteristic write log to account for WriteWithoutResponse on macOS.
- Fix for #145, Error in cleanup on Bluez backend.
- Fix for #151, only subscribe to BlueZ messages on DBus. Merge #152.
- Fix for #142, Merge #144, Improved scanning for macOS backend.
- Fix for #155, Merge #156, lost notifications on macOS backend.
- Improved type hints
- Improved error handling for .NET backend.
- Documentation fixes.
- Active Scanning on Windows, #99 potentially solving #95
- Longer timeout in service discovery on BlueZ
- Added
timeoutto constructors and connect methods - Fix for
get_serviceson macOS. Relates to #101 - Fixes for disconnect callback on BlueZ, #86 and #83
- Fixed reading of device name in BlueZ. It is not readable as regular characteristic. #104
- Removed logger feedback in BlueZ discovery method.
- More verbose exceptions on macOS, #117 and #107
- macOS support added (thanks to @kevincar)
- Merged #90 which fixed #89: Leaking callbacks in BlueZ
- Merged #92 which fixed #91, Prevent leaking of DBus connections on discovery
- Merged #96: Regex patterns
- Merged #86 which fixed #83 and #82
- Recovered old .NET discovery method to try for #95
- Merged #80: macOS development
- Fix for #76
- Fix for #69
- Fix for #74
- Fix for #68
- Fix for #70
- Merged #66
- Fix for missed part of PR #61.
- Merging of PR #61, improvements and fixes for multiple issues for BlueZ backend
- Implementation of issue #57
- Fixing issue #59
- Documentation fixes.
- Transferred code from the BleakUWPBridge C# support project to pythonnet code
- Fixed BlueZ >= 5.48 issues regarding Battery Service
- Fix for issue #55
- Fix for issue #53: Windows and Python 3.7 error
- Azure Pipelines used for CI
- Fix for issue #52: Timing issue getting characteristics
- Additional fix for issue #51.
- Bugfix for string method for BLEDevice.
- Fix for issue #51:
dpkg-query not found on all Linux systems
- Made it compliant with Python 3.5 by removing f-strings
- Improved logging on .NET discover method
- Some type annotation fixes in .NET code
- Project added to Github
- First version on PyPI.
- Working Linux (BlueZ DBus API) backend.
- Working Windows (UWP Bluetooth API) backend.
- Bleak created.