Detecta continuamente si un dispositivo Bluetooth BLE específico está presente, utilizando su identificador de CoreBluetooth y registrando su RSSI.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
""" ============================================================ BLUETOOTH PRESENCE DETECTOR - macOS ============================================================ Detecta si un dispositivo Bluetooth BLE específico está presente en el entorno utilizando su identificador de CoreBluetooth. Objetivo: xxxxx-xxx-xxxx-xxxx-xxxxxx El programa realiza escaneos periódicos y muestra: - PRESENTE - NO PRESENTE Cuando el dispositivo está presente también muestra su RSSI. ============================================================ """ import asyncio from datetime import datetime from bleak import BleakScanner # ============================================================ # CONFIGURACIÓN # ============================================================ TARGET_ID = "xxxxx-xxx-xxxx-xxxx-xxxxxx" # Duración de cada escaneo SCAN_SECONDS = 10 # Tiempo entre escaneos WAIT_SECONDS = 2 # ============================================================ # ESCANEO # ============================================================ async def check_device(): detected = False rssis = [] def detection_callback(device, advertisement): nonlocal detected device_id = str(device.address).upper() if device_id == TARGET_ID.upper(): detected = True if advertisement.rssi is not None: rssis.append(advertisement.rssi) scanner = BleakScanner( detection_callback=detection_callback ) await scanner.start() await asyncio.sleep(SCAN_SECONDS) await scanner.stop() return detected, rssis # ============================================================ # PROGRAMA PRINCIPAL # ============================================================ async def main(): print() print("=" * 65) print(" BLUETOOTH PRESENCE DETECTOR") print("=" * 65) print() print("Dispositivo objetivo:") print(TARGET_ID) print() print("El detector está funcionando...") print("Pulsa CTRL+C para salir.") print() while True: timestamp = datetime.now().strftime( "%Y-%m-%d %H:%M:%S" ) detected, rssis = await check_device() print( f"[{timestamp}] ", end="" ) if detected: if rssis: average = sum(rssis) / len(rssis) print( f"✅ PRESENTE | " f"RSSI medio: {average:.1f} dBm" ) else: print( "✅ PRESENTE" ) else: print( "❌ NO PRESENTE" ) await asyncio.sleep( WAIT_SECONDS ) # ============================================================ # EJECUCIÓN # ============================================================ if __name__ == "__main__": try: asyncio.run( main() ) except KeyboardInterrupt: print() print() print("Detector detenido.") |