¿RaspberryPi con BLE Dongle puede 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 funcionan como lo anuncian, pero me sorprendió lo que obtuve.

Había asumido que el RaspPi podría detectar iBeacons. En su lugar, el kit está configurado para crear un iBeacon. Mi caso de uso es detectar cuando un forklift entra en una habitación en particular para que pueda enviarles trabajo. Mi idea era poner un iBeacon en la carretilla elevadora y luego poner un RaspPi en busca de iBeacons. Y cuando se detectó un iBeacon (montacargas), se podría concluir que está cerca. Me gustaría conectar el RaspPi en el LAN y hacer que comunique la información a través de REST or similar. Sé que podría poner un Android or Apple device adecuado y lograrlo de esa manera, pero no veo por qué este dongle no puede detectar estos iBeacons y decirme cuáles son sus UUID's? ¿Qué me estoy perdiendo?

Author: Adrian Nicolaiev, 2014-02-12

3 answers

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

  1. Iniciar un proceso en segundo plano que realiza un LE scan bluetooth:

    sudo hcitool lescan --duplicates &
    

    Con el ajuste --duplicates el análisis no ignorará varios paquetes del mismo iBeacon.

  2. Inicie un hcidump y canalice la salida raw a un script que filtrará para iBeacon paquetes:

    sudo hcidump --raw 
    

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

Hemos reunido todo esto en un script ibeacon_scan que lo hace todo, incluyendo la conversión de los identificadores raw en una forma legible por humanos. Puede descargarlo aquí. Pronto, incluiremos esto en el Kit de Desarrollo de iBeacon para agregar 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 la salida desnuda que es fácil de analizar en otros scripts, 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 la salida del script a su script para activar acciones cuando se detecten iBeacons con ciertos identificadores.

EDIT: Hemos rediseñado este script para hacerlo más responsivo y robusto y lo hemos incorporado en la última versión del kit de desarrollo . La actualización está disponible para descargar aquí.

EDIT2: Según lo señalado por @sai-ramachandran, puede aumentar este script para capturar el RSSI de cada paquete iBeacon además de la POTENCIA. 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"
 66
Author: jjnebeker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:53

Tiene razón en que el Kit de Desarrollo de iBeacon no está diseñado para detectar iBeacons is está diseñado para transmitir como un iBeacon.

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

 2
Author: davidgyoung,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:30

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

Use esto para detectar iBeacons.

Permite que los dispositivos Android usen iBeacons al igual que los dispositivos iOS. Una aplicación puede solicitar recibir notificaciones cuando uno 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.

 -1
Author: user3305031,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-13 07:53:10