linux bluetooth bluetooth-lowenergy bluez rssi

Bluetooth LE Signal Strength Linux



bluetooth-lowenergy bluez (5)

En Linux, la forma de hacerlo es con el comando hcitool. Sin embargo, debe estar conectado para obtener el rssi de un dispositivo. Si desea lograr esto desde la línea de comando, intente:

#hcitool rssi AA:BB:CC:DD:EE:FF

Si desea ver el código C real para lograr esto, eche un vistazo al archivo bluez tools / hcitool.c , bajo la función cmd_rssi.

static void cmd_rssi(int dev_id, int argc, char **argv) { ... }

Para Bluetooth Low Energy , solo sé una forma de hacerlo, y eso es usar el comando #btmon. Ejecute btmon en segundo plano y luego busque dispositivos Bluetooth Low Energy:

#./btmon & # hcitool lescan

Los resultados que se muestran en el monitor deben ser similares a esto:

> HCI Event: LE Meta Event (0x3e) plen 12 LE Advertising Report (0x02) Num reports: 1 Event type: Scan response - SCAN_RSP (0x04) Address type: Public (0x00) Address: AA:BB:CC:DD:EE:FF (<Vendor Name>) Data length: 0 ***RSSI: -34 dBm (0xde)*** AA:BB:CC:DD:EE:FF <Device Name>

Tenga en cuenta que cuando usa btmon no tiene que conectarse para obtener el rssi de un dispositivo BLE.

Espero que esto ayude.

Hola, ¿hay alguna forma de obtener la fuerza de la señal de Bluetooth cerca de los dispositivos en Linux? O cualquier buena biblioteca para nodejs, php o mono (sé algo de c ++ o python, pero preferiría decir que están lejos de ellos) si una herramienta no existe, pero sería bastante fácil de escribir

Gracias



Ok, perdón por la otra respuesta ...

Esto funciona para el lenguaje c, pero tiene un error al convertir los bytes que tienen la información sobre la señal de rssi. https://github.com/glock45/intel-edison-playground/blob/master/scan.c

esta línea 121: printf ("% s - RSSI% d / n", addr, ( char ) información-> datos [información-> longitud]);

debería ser: printf ("% s - RSSI% d / n", addr, ( int8_t ) información-> datos [información-> longitud]);

Encontré estos mirando dentro de bluez-version / monitor / *. c, donde está el programa btmon. Puede ver los tipos de datos y estructuras, hcidump.c es muy útil y packets.c, y main.c también, pero hay muchos para aprender sobre los sockets hci


tratar :

$ bluez-test-discovery

salida:

[ 18:7A:93:05:E4:B1 ] Name = AMIYJ_E4B1 Paired = 0 LegacyPairing = 0 Alias = AMIYJ_E4B1 Broadcaster = 0 UUIDs = dbus.Array([dbus.String(u''0000fff0-0000-1000-8000-00805f9b34fb'')], signature=dbus.Signature(''s''), variant_level=1) Address = 18:7A:93:05:E4:B1 RSSI = -65 Class = 0x000000

te da: RSSI = -65


Puede usar una combinación de: sudo hcitool lescan --duplicates &; sudo hcidump --raw

que le proporcionará el volcado sin formato de todos los paquetes bluetooth que contienen toda la información relevante que le interese, tales como: UUID, Major, Minor, RSSI, TxPower. Deberá ejecutar algún tipo de secuencia de comandos para analizar y filtrar los paquetes LE y hacerlos legibles.

Uno de los guiones escritos con el editor Bash and S fue proporcionado por jjnebaker aquí con el problema y la solución discutidos aquí.

La opción Otra es usar PyBluez usando el código de ejemplo aquí. Sin embargo, puede encontrar que la solución proporcionada por los laboratorios Switchdoc también es útil según sus necesidades. aquí