fix: handle stale ble devices
This commit is contained in:
@@ -97,18 +97,10 @@ class PowerViewBLE:
|
|||||||
|
|
||||||
def __init__(self, ble_device: BLEDevice, home_key: bytes = b"") -> None:
|
def __init__(self, ble_device: BLEDevice, home_key: bytes = b"") -> None:
|
||||||
"""Initialize device API via Bluetooth."""
|
"""Initialize device API via Bluetooth."""
|
||||||
self._ble_device: Final[BLEDevice] = ble_device
|
self._ble_device: BLEDevice = ble_device
|
||||||
self.name: Final[str] = self._ble_device.name or "unknown"
|
self.name: Final[str] = self._ble_device.name or "unknown"
|
||||||
self._seqcnt: int = 1
|
self._seqcnt: int = 1
|
||||||
self._client: BleakClient = BleakClient(
|
self._client: BleakClient = BleakClient(self._ble_device)
|
||||||
self._ble_device,
|
|
||||||
disconnected_callback=self._on_disconnect,
|
|
||||||
services=[
|
|
||||||
UUID_COV_SERVICE,
|
|
||||||
UUID_DEV_SERVICE,
|
|
||||||
# self.UUID_BAT_SERVICE,
|
|
||||||
],
|
|
||||||
)
|
|
||||||
self._data_event = asyncio.Event()
|
self._data_event = asyncio.Event()
|
||||||
self._data: bytes = b""
|
self._data: bytes = b""
|
||||||
self._info: PVDeviceInfo = PVDeviceInfo()
|
self._info: PVDeviceInfo = PVDeviceInfo()
|
||||||
@@ -125,6 +117,10 @@ class PowerViewBLE:
|
|||||||
await self._data_event.wait()
|
await self._data_event.wait()
|
||||||
self._data_event.clear()
|
self._data_event.clear()
|
||||||
|
|
||||||
|
def set_ble_device(self, ble_device: BLEDevice) -> None:
|
||||||
|
"""Update the BLE device reference (e.g. when proxy details change)."""
|
||||||
|
self._ble_device = ble_device
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def encrypted(self) -> bool:
|
def encrypted(self) -> bool:
|
||||||
"""Return whether communication with this shade is encrypted."""
|
"""Return whether communication with this shade is encrypted."""
|
||||||
@@ -360,6 +356,7 @@ class PowerViewBLE:
|
|||||||
self._ble_device,
|
self._ble_device,
|
||||||
self.name,
|
self.name,
|
||||||
disconnected_callback=self._on_disconnect,
|
disconnected_callback=self._on_disconnect,
|
||||||
|
ble_device_callback=lambda: self._ble_device,
|
||||||
services=[
|
services=[
|
||||||
UUID_COV_SERVICE,
|
UUID_COV_SERVICE,
|
||||||
UUID_DEV_SERVICE,
|
UUID_DEV_SERVICE,
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ class PVCoordinator(PassiveBluetoothDataUpdateCoordinator):
|
|||||||
# self.hass.async_create_task(self._get_device_info())
|
# self.hass.async_create_task(self._get_device_info())
|
||||||
|
|
||||||
LOGGER.debug("BLE event %s: %s", change, service_info.manufacturer_data)
|
LOGGER.debug("BLE event %s: %s", change, service_info.manufacturer_data)
|
||||||
|
self.api.set_ble_device(service_info.device)
|
||||||
self.data = {ATTR_RSSI: service_info.rssi}
|
self.data = {ATTR_RSSI: service_info.rssi}
|
||||||
if change == bluetooth.BluetoothChange.ADVERTISEMENT:
|
if change == bluetooth.BluetoothChange.ADVERTISEMENT:
|
||||||
self.data.update(
|
self.data.update(
|
||||||
|
|||||||
Reference in New Issue
Block a user