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