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
También encontré un programa que pude editar para hacer lo que yo quería, y también lo hice en mi cuenta de github https://github.com/tholum/bluez/blob/master/blue.py
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í