Source code for poseyctrl.apps.posey_sniffer

from logging import getLogger

import argparse
import logging
import datetime as dt

from adafruit_ble import BLERadio
from adafruit_ble.advertising.standard import Advertisement


[docs]def posey_sniffer(): # Process arguments. parser = argparse.ArgumentParser( "posey-sniffer", description="Scan for Posey sensors.") parser.add_argument("-t", "--timeout", type=float, default=None, help="Timeout (seconds) to scan for BLE sensor devices.") parser.add_argument("-r", "--min-rssi", type=float, default=-100, help="Minimum device RSSI.") parser.add_argument("-d", "--debug", action="store_true", default=False, help="Enable debug logging.") args = parser.parse_args() # Configure logger. handlers = [logging.StreamHandler()] logging.basicConfig( handlers=handlers, datefmt='%H:%M:%S', format='{name:.<4} {asctime}: {message}', style='{', level=logging.DEBUG if args.debug else logging.INFO) log = getLogger("main") getLogger("asyncio").setLevel(logging.CRITICAL) # Find sensors. log.info(f"Scanning for Posey sensors...") ble = BLERadio() try: for adv in ble.start_scan(Advertisement, timeout=args.timeout, minimum_rssi=args.min_rssi): if adv.complete_name is None: continue cn = adv.complete_name.lower() if "posey" in cn: log.info(f"{adv.complete_name:30s} RSSI: {adv.rssi:4d} Address: {adv.address.string}") except KeyboardInterrupt: print("\nReceived keyboard interrupt, stopping.") ble.stop_scan()
if __name__ == "__main__": posey_sniffer()

Last update: May 05, 2023