¿Puede RaspberryPi con BLE Dongle detectar iBeacons?

Compré un kit de desarrollador de Radius Networks que incluye un ioGear GBU521 BLE 4.0 dongle y un Raspberry Pi . También compré uno de sus RadBeacon iBeacons . Ambos trabajan como se anuncia, pero estaba algo sorprendido por lo que obtuve.

Supuse que el RaspPi podría detectar iBeacons . En cambio, el kit está configurado para crear un iBeacon . Mi caso de uso es detectar cuándo una forklift ingresa a una habitación particular para poder enviarles trabajo. Mi idea era poner un iBeacon en la carretilla elevadora y luego poner un RaspPi buscando iBeacons. Y cuando se detectó un iBeacon (montacargas), puede concluir que está cerca. Conectaba el RaspPi a la LAN y le pedía que comunicara la información a través de REST or similar . Sé que podría poner un Android or Apple device adecuado de Android or Apple device y lograrlo de esa manera, pero no veo por qué este dongle no puede detectar estas iBeacons y decirme cuáles son sus UUID's . ¿Qué me estoy perdiendo?

¡Sí! Puedes usar tu Raspberry Pi para escanear iBeacons. Hemos creado un script a continuación que hace esto, también puede hacerlo usted mismo con estos pasos:

  1. Comience un proceso en segundo plano que hace un escaneo LE de Bluetooth:

     sudo hcitool lescan --duplicates & 

    Con la configuración --duplicates , el escaneo no ignorará múltiples paquetes del mismo iBeacon.

  2. Inicie un hcidump y hcidump el resultado sin procesar a un script que filtrará los paquetes iBeacon:

     sudo hcidump --raw 

El filtrado es la parte difícil, la salida sin procesar de hcidump no está formateada muy bien y también muestra paquetes que no son transmisiones iBeacon. Para resolver esto, hicimos una secuencia de comandos de filtro que lee en la línea de salida y separa los paquetes sin procesar de la otra salida (es decir, direcciones MAC, etc.). Hemos investigado mucho en Radius Networks en el perfil bluetooth iBeacon , que utilizamos para identificar paquetes iBeacon y filtrarlos de paquetes de otros dispositivos.

Hemos unido todo esto en una ibeacon_scan comandos ibeacon_scan que hace todo, incluida la conversión de los identificadores sin procesar a una forma legible por humanos. Puedes descargarlo aquí . Pronto, incluiremos esto en el kit de desarrollo iBeacon para agregar la capacidad de escaneo.

Aquí hay un ejemplo de la salida del script:

 $ ./ibeacon_scan UUID: 74278BDA-B644-4520-8F0C-720EAF059935 MAJOR: 0 MINOR: 73 POWER: -50 UUID: 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 MAJOR: 1 MINOR: 6 POWER: -59 UUID: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 MAJOR: 6 MINOR: 9 POWER: -55 

También hemos incluido una opción -b para salida simple que es fácil de analizar en otras secuencias de comandos, aquí hay un ejemplo:

 $ ./ibeacon_scan -b 2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6 1 6 -59 E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 6 9 -55 74278BDA-B644-4520-8F0C-720EAF059935 0 73 -50 

Puede usar esta opción y canalizar el resultado del script a su script para desencadenar acciones cuando se detectan iBeacons con ciertos identificadores.

EDITAR: hemos modificado esta secuencia de comandos para que sea más receptiva y robusta, y la hemos incorporado a la última versión del kit de desarrollo . La actualización está disponible para descargar aquí .

EDIT2: Como señaló @ sai-twigchandran , puede boost este script para capturar el RSSI de cada paquete iBeacon además de POWER. Para hacer esto, agregue las siguientes líneas al script:

  RSSI=`echo $packet | sed 's/^.\{132\}\(.\{2\}\).*$/\1/'` RSSI=`echo "ibase=16; $RSSI" | bc` RSSI=$[RSSI - 256] 

y asegúrese de agregar RSSI a la salida:

  echo "UUID: $UUID MAJOR: $MAJOR MINOR: $MINOR POWER: $POWER RSSI: $RSSI" 

Tiene razón en que el iBeacon Development Kit no está diseñado para detectar iBeacons, está diseñado para transmitir como iBeacon.

Dicho esto, es posible detectar iBeacons con una Raspberry Pi usando una variación de lo que sugiere @ChrisStratton en su comentario. Vea la respuesta de mi colega @jjnebeker que ha hecho un guión para hacer lo que quiera.

https://github.com/RadiusNetworks/android-ibeacon-service

Use esto para detectar iBeacons.

Permite que los dispositivos Android usen iBeacons de manera similar a los dispositivos iOS. Una aplicación puede solicitar recibir notificaciones cuando una o más iBeacons aparecen o desaparecen. Una aplicación también puede solicitar obtener una actualización de rango de uno o más iBeacons a una frecuencia de 1Hz.

    Intereting Posts