39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
import asyncio
|
|
import logging
|
|
from bleak import BleakClient, BleakScanner
|
|
from bleak.assigned_numbers import AdvertisementDataType
|
|
from bleak.backends.bluezdbus.advertisement_monitor import OrPattern
|
|
from bleak.backends.bluezdbus.scanner import BlueZScannerArgs
|
|
|
|
async def scan():
|
|
args = BlueZScannerArgs(
|
|
or_patterns=[OrPattern(0, AdvertisementDataType.MANUFACTURER_SPECIFIC_DATA, b"\x10\x05")]
|
|
)
|
|
|
|
async with BleakScanner(bluez=args, scanning_mode="passive") as scanner:
|
|
async for _, advertisement_data in scanner.advertisement_data():
|
|
mfr_data = advertisement_data.manufacturer_data
|
|
if mfr_data.get(0x02e1):
|
|
logging.info("scan(): found correct device: %s", mfr_data)
|
|
else:
|
|
logging.info("scan(): this should never happen: %s", mfr_data)
|
|
|
|
async def connect():
|
|
device1 = await BleakScanner.find_device_by_address("01:B6:EC:10:CB:8F")
|
|
|
|
async with BleakClient(device1):
|
|
logging.info("connect(): connected to device")
|
|
await asyncio.sleep(60)
|
|
|
|
async def main():
|
|
logging.info("main(): starting scan")
|
|
asyncio.create_task(scan())
|
|
await asyncio.sleep(30)
|
|
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)-15s %(name)-8s %(levelname)s: %(message)s",
|
|
)
|
|
|
|
asyncio.run(main())
|