Как мы можем получить значения RSSI от маяков Bluetooth (желательно, чтобы быть конкретными) в Linux?

Мне нужно получить расстояния от нескольких маяков Bluetooth для триангуляции, чтобы я мог делать в помещении. Я постарался дать как можно больше соответствующих деталей. Этот проект предназначен для RPi, но в настоящее время я пытаюсь сначала протестировать его на своем ноутбуке. Я попробовал большинство из того, что я могу найти в Интернете по этому поводу:

Лучший способ найти значения rssi - hcitool rssi <address of beacon>

Отсюда https://stackoverflow.com/questions/24417017/bluetooth-le-signal-strength-linux

Чтобы проверить это, я попытался сначала получить его для своего мобильного телефона. ПоказалоNot ConnectedMsgstr "Я подумал, что мне нужно сначала подключиться, поэтому я попробовал много способов подключения моего мобильного телефона:

а) hcittol cc <address of mobile>

б) gatttool -b <address of mobile> -t random --interactive

с) rfcomm connect 0 <address of mobile> 10

В каждом случае, когда я нажимал пару в моем мобильном телефоне, соединение разрывалось.

Затем я подключил свой мобильный телефон обычным способом из меню Bluetooth, а затем попытался hcitool rssi <Address of mobile> который затем, наконец, вернул значение -8,

Теперь, когда у меня было это для моего мобильного телефона, я теперь перешел на маяки.

Затем я попробовал то же самое для моих маяков. На этот раз я должен был сначала сделать hcitool lescan чтобы получить адреса доступных маяков, подключитесь к одному из маяков с помощью команды hcitool lecc <address of beacon> который вернул ошибку Could not create connection: Connection timed outИтак, затем я снова попытался соединиться с двумя другими способами:

rfcomm connect 0 <address of beacon> 10 который вернул ошибку Can't connect RFCOMM socket: Host is down когда я могу быть уверен, что hci0 был.

Тогда я попробовал с sudo gatttool -b F1:15:A7:E3:17:63 --interactive после чего открылся интерактивный режим и я дал команду connect, Это дало разные ошибки после Attempting to connect to <address of beacon>, в основном connect error : Connection timed out а также Error: connect error: Connection refused (111)

Тогда я читаю мне нужно использовать -t random из https://stackoverflow.com/questions/22213793/bluetooth-le-on-raspbian, https://ubuntuforums.org/showthread.php?t=2204808 и другого источника, который я не могу найти прямо сейчас.

Итак, я вошел sudo gatttool -b F1:15:A7:E3:17:63 -t random --interactive в котором, когда я дал connect команда, я получил ошибку Error: connect error: Device or resource busy (16) а также иногда Error: connect error: Input/Output Error

тогда я прочитал, что мне, возможно, нужно перезагрузить мой hci0 hciconfig hci0 down а потом hciconfig hci0 up который сделал трюк, маяк теперь подключился.

Но затем он быстро отключился после сообщения `GLib-WARNING **: неверный дескриптор файла.

`Я прочитал здесь https://raspberrypi.stackexchange.com/questions/53982/how-to-fix-gatttools-glib-warning-invalid-file-descriptor что это из-за плохих соединений. Я попытался держать маяки ближе, но это сделало то же самое.

Так что я попытался в любом случае получить хотя бы одно значение rssi в течение короткого периода времени, когда оно подключено. Но даже когда он был таким образом связан, я сделал hcitool rssi <address of beacon> ошибка пришла так:

hcitool rssi F1:15:A7:E3:17:63
Get connection info failed: No such file or directory

На что я еще не нашел правильного решения.

Я попробовал другой способ чтения значения rssi, который дал следующее:

hcidump -R
HCI sniffer - Bluetooth packet analyzer ver 5.37
device: hci0 snap_len: 1500 filter: 0xffffffffffffffff
> 04 0E 04 01 0B 20 00 
> 04 0E 04 01 0C 20 00 
> 04 0E 04 01 0C 20 00 
> 04 0F 04 00 01 0D 20 
> 04 0F 04 00 01 16 20 
> 04 0F 04 00 01 13 20 

Это было до того, как было отключено. Я читаю здесь https://stackoverflow.com/questions/37073114/obtain-rssi-with-hcidump который сказал, чтобы прочитать 14-й байт. так как все они казались шестнадцатеричными числами, это означало бы, что каждое число составляет 1 байт. Но, таким образом, у меня есть только 7 номеров в строке, как я могу прочитать 14-й байт?

Дистанция от маяков меня очень беспокоила, и я потратила много времени. Пожалуйста, помогите мне в этом вопросе. Если вы поможете мне найти ресурс, который поможет мне сделать это, я буду признателен за помощь.

2 ответа

Возможно, ваши маяки активно отказываются от вашего соединения, чтобы сэкономить электроэнергию, но для того, чтобы просто прочитать уровень сигнала, вам не нужно подключаться, поскольку они все равно должны передавать эту информацию.

Я не смог заставить hcidump предоставить мне информацию, которую я искал, поэтому вместо этого я использовал btmon и с большим успехом получил RSSI от моих маяков BLE:

btmon &
hcitool lescan --duplicates

Я проверялsudo btmgmt find и получил значения RSSI.

Отредактированный вывод:

hci0 dev_found: xx:xx:xx:xx:xx:xx type BR/EDR rssi -86 flags 0x0003
eir_len 5

(хх заменены мной)

Проверено на распи ноль ш

Может быть, это то, что вы ищете.

Другие вопросы по тегам