async def _async_has_devices(hass: HomeAssistant) -> bool: """Return if there are devices that can be discovered.""" service_infos = async_discovered_service_info(hass) for service_info in service_infos: if device_filter(service_info.device, service_info.advertisement): return True return False
async def detection_callback( ble_device: BLEDevice, advertisement_data: AdvertisementData) -> None: if not device_filter(ble_device, advertisement_data): return _LOGGER.debug("Detection: %s %s - %s", ble_device.name, ble_device, advertisement_data) data = state.devices.get(ble_device.address) if data: data.device.detection_callback(ble_device, advertisement_data) data.coordinator.async_set_updated_data(data.device.state) else: device = Device(ble_device) device.detection_callback(ble_device, advertisement_data) async def async_update_data(): """Handle an explicit update request.""" await device.update() return device.state coordinator: DataUpdateCoordinator[State] = DataUpdateCoordinator( hass, logger=_LOGGER, name="Fjaraskupan Updater", update_interval=timedelta(seconds=120), update_method=async_update_data, ) coordinator.async_set_updated_data(device.state) device_info: DeviceInfo = { "identifiers": {(DOMAIN, ble_device.address)}, "manufacturer": "Fjäråskupan", "name": "Fjäråskupan", } device_state = DeviceState(device, coordinator, device_info) state.devices[ble_device.address] = device_state async_dispatcher_send(hass, f"{DISPATCH_DETECTION}.{entry.entry_id}", device_state)
scanner = BleakScanner(filters={"UUIDs": [str(UUID_SERVICE)]}) state = EntryState(scanner, {}) hass.data.setdefault(DOMAIN, {}) hass.data[DOMAIN][entry.entry_id] = state async def detection_callback( ble_device: BLEDevice, advertisement_data: AdvertisementData) -> None: if data := state.coordinators.get(ble_device.address): _LOGGER.debug("Update: %s %s - %s", ble_device.name, ble_device, advertisement_data) data.detection_callback(ble_device, advertisement_data) else: if not device_filter(ble_device, advertisement_data): return _LOGGER.debug("Detected: %s %s - %s", ble_device.name, ble_device, advertisement_data) device = Device(ble_device) device_info = DeviceInfo( identifiers={(DOMAIN, ble_device.address)}, manufacturer="Fjäråskupan", name="Fjäråskupan", ) coordinator: Coordinator = Coordinator(hass, device, device_info) coordinator.detection_callback(ble_device, advertisement_data)
def detection(device: BLEDevice, advertisement_data: AdvertisementData): if device_filter(device, advertisement_data): event.set()