45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
"""The bluetooth integration utilities."""
|
|
from __future__ import annotations
|
|
|
|
from bluetooth_adapters import BluetoothAdapters
|
|
from bluetooth_auto_recovery import recover_adapter
|
|
|
|
from homeassistant.core import callback
|
|
from homeassistant.util.dt import monotonic_time_coarse
|
|
|
|
from .models import BluetoothServiceInfoBleak
|
|
|
|
|
|
@callback
|
|
def async_load_history_from_system(
|
|
adapters: BluetoothAdapters,
|
|
) -> dict[str, BluetoothServiceInfoBleak]:
|
|
"""Load the device and advertisement_data history if available on the current system."""
|
|
now = monotonic_time_coarse()
|
|
return {
|
|
address: BluetoothServiceInfoBleak(
|
|
name=history.advertisement_data.local_name
|
|
or history.device.name
|
|
or history.device.address,
|
|
address=history.device.address,
|
|
rssi=history.advertisement_data.rssi,
|
|
manufacturer_data=history.advertisement_data.manufacturer_data,
|
|
service_data=history.advertisement_data.service_data,
|
|
service_uuids=history.advertisement_data.service_uuids,
|
|
source=history.source,
|
|
device=history.device,
|
|
advertisement=history.advertisement_data,
|
|
connectable=False,
|
|
time=now,
|
|
)
|
|
for address, history in adapters.history.items()
|
|
}
|
|
|
|
|
|
async def async_reset_adapter(adapter: str | None) -> bool | None:
|
|
"""Reset the adapter."""
|
|
if adapter and adapter.startswith("hci"):
|
|
adapter_id = int(adapter[3:])
|
|
return await recover_adapter(adapter_id)
|
|
return False
|