2.0 KiB
author | authorURL | title |
---|---|---|
John Carr | https://github.com/Jc2k | Bluetooth passive sensor API changes for 2022.9 |
For Home Assistant Core 2022.9 we have changed the PassiveBluetoothProcessorCoordinator
and PassiveBluetoothDataProcessor
bluetooth API's to make PassiveBluetoothProcessorCoordinator
responsible for parsing. The coordinator then pushes parsed data to PassiveBluetoothDataProcessor
instances.
PassiveBluetoothProcessorCoordinator now takes a mandatory update_method callback that receives bluetooth advertisements (in the form of BluetoothServiceInfoBleak) and returns the data that should be handed off to any subscribed PassiveBluetoothDataProcessor:
def my_parser(service_info: BluetoothServiceInfoBleak) -> MyDataClass:
...
return MyDataClass(
a=some_parsed_data,
b=some_other_parsed_data,
)
coordinator = PassiveBluetoothProcessorCoordinator(
hass,
_LOGGER,
address=address,
mode=BluetoothScanningMode.PASSIVE,
update_method=my_parser,
)
PassiveBluetoothDataProcessor still takes an update_method, but instead of a BluetoothServiceInfoBleak, it now receives the data returned from PassiveBluetoothProcessorCoordinator's update_method. It should still return a PassiveBluetoothDataUpdate
as before:
def sensor_update_to_bluetooth_data_update(
sensor_update: MyDataClass,
) -> PassiveBluetoothDataUpdate:
"""Convert a sensor update to a bluetooth data update."""
...
return PassiveBluetoothDataUpdate( ... )
processor = PassiveBluetoothDataProcessor(sensor_update_to_bluetooth_data_update)
All the built-in integrations have already been converted, so take a look at them for more examples.
This change will help integrations that need to start parsing data before loading a platform (for example, the list of platforms to load depend on data from the advertisements) or changes where a single advertisement drives multiple platforms (you won't have to parse the broadcast twice).