Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 def detection(device: BLEDevice, advertisement_data: AdvertisementData):
     if device_filter(device, advertisement_data):
         event.set()