diff --git a/blatted/tools/ble/models.py b/blatted/tools/ble/models.py new file mode 100644 index 0000000..0500631 --- /dev/null +++ b/blatted/tools/ble/models.py @@ -0,0 +1,22 @@ +from dataclasses import dataclass, field + +from bleak.backends.device import BLEDevice +from bleak.backends.scanner import AdvertisementData + + +@dataclass +class DiscoveredDevice: + device: BLEDevice + services: AdvertisementData = field(repr=False) + + +@dataclass +class DiscoveredDevices: + devices: list[DiscoveredDevice] = field(default_factory=list) + + def add(self, device: DiscoveredDevice): + if not device in self.devices: + self.devices.append(device) + + def count(self): + return len(self.devices) diff --git a/blatted/tools/ble/scanner.py b/blatted/tools/ble/scanner.py index f56f300..a4d6540 100644 --- a/blatted/tools/ble/scanner.py +++ b/blatted/tools/ble/scanner.py @@ -5,11 +5,15 @@ from bleak import BleakScanner from bleak.backends.device import BLEDevice from bleak.backends.scanner import AdvertisementData +from .models import DiscoveredDevice + def discover_callback(device: BLEDevice, advertising_data: AdvertisementData): - print( - f"[{advertising_data.rssi:-4d}] {device.address} - {device.name} with {len(advertising_data.service_uuids)} services" - ) + if len(advertising_data.service_uuids) > 0: + discovered = DiscoveredDevice(device, advertising_data) + print( + f"[{advertising_data.rssi:-4d}] {device.address} - {device.name} [{discovered}]" + ) async def discover_devices():