Технология Bluetooth LE Signal Strength Linux

Привет, есть ли способ получить силу сигнала рядом с установками bluetooth в Linux? Или любые хорошие библиотеки для nodejs, php или mono (я знаю некоторые С++ или python, но предпочитаю сказать от них), если инструмент не exsist, но будет довольно легко писать

Спасибо

Ответы

Ответ 1

В Linux способ сделать это с помощью команды hcitool. Однако вы должны быть подключены, чтобы получить rssi устройства. Если вы хотите добиться этого из командной строки, попробуйте:

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

Если вы хотите увидеть фактический код C для этого, посмотрите файл bluez tools/hcitool.c в функции cmd_rssi.

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

Для Низкой Энергии Bluetooth, я знаю только один способ сделать это, и это использует команду #btmon. Запустите btmon в фоновом режиме, затем сканируйте устройства Bluetooth Low Energy:

#./btmon &
# hcitool lescan

Результаты, отображаемые на мониторе, должны быть похожи на следующие:

> 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>

Обратите внимание, что при использовании btmon вам не нужно подключаться для получения rssi устройства BLE.

Надеюсь, это поможет.

Ответ 2

Вы можете использовать комбинацию: sudo hcitool lescan - дубликаты и; sudo hcidump --raw

который предоставит вам необработанный дамп всех пакетов bluetooth, которые содержат всю необходимую информацию, которую вы должны быть заинтересованы, например: UUID, Major, Minor, RSSI, TxPower. Вам нужно будет запустить какой-то script для анализа и фильтрации пакетов LE и преобразования их в удобочитаемую форму.

Один из скриптов, написанных с помощью редактора Bash и S, был предоставлен jjnebaker здесь с обсуждаемой проблемой и решением здесь

Другой вариант - использовать PyBluez, используя код примера здесь Но вы можете найти решение, предоставляемое лабораториями Switchdoc, полезное в соответствии с вашими потребностями. здесь

Ответ 3

Хорошо, извините за другой ответ...

Это работает для языка c, но имеет ошибку при выдаче байтов, содержащих информацию о сигнале de rssi. https://github.com/glock45/intel-edison-playground/blob/master/scan.c

эта строка 121: printf ( "% s - RSSI% d\n", addr, (char) info- > data [info- > length]);

должно быть: printf ( "% s - RSSI% d\n", addr, (int8_t) info- > data [info- > length]);

я нашел их, заглянув внутрь bluez-version/monitor/*. c, где программа btmon. Вы можете видеть типы данных и структуры, hcidump.c очень полезен и packets.c, и main.c тоже, но есть много, чтобы узнать о сокетах hci

Ответ 4

Я также нашел программу, которую я смог редактировать, чтобы делать то, что я хотел Я через него на моей учетной записи github https://github.com/tholum/bluez/blob/master/blue.py

Ответ 5

попробуйте:

$bluez-test-discovery

вывод:

[ 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

дает вам: RSSI = -65

Ответ 6

Нет необходимости соединяться с btmgmt

$ sudo btmgmt find

Discovery started
hci0 type 7 discovering on
hci0 dev_found: 50:8C:FD:99:0A:EC type LE Random rssi -80 flags 0x0000 
AD flags 0x06 
eir_len 23
…

индикатор относительной силы сигнала rssi -80 и список продолжается некоторое время для этого и других устройств.

Чтобы шпионить за вашим Bluetooth-соседством, показывая только уникальные MAC-адреса с их самым сильным RSSI, выполните следующую команду:

$ sudo btmgmt find |grep rssi |sort -n |uniq -w 33

hci0 dev_found: 40:43:42:B3:71:11 type LE Random rssi -53 flags 0x0000 
hci0 dev_found: 44:DA:5F:EA:C6:CF type LE Random rssi -78 flags 0x0000 
hci0 dev_found: 7F:7D:08:6B:E0:37 type LE Random rssi -74 flags 0x0000 
hci0 dev_found: A4:58:0F:21:A1:8C type BR/EDR rssi -79 flags 0x0000