Настройка автоматического спаривания Bluetooth на Linux

Я хочу использовать любой мобильный телефон для подключения к устройству IoT через Bluetooth Classic с протоколом последовательного порта (SPP). Устройство IoT не имеет экрана и не имеет клавиатуры, и предполагается, что оно автоматически подключается к сети, пока соединительный телефон знает секретный PIN-код (т.е. Я не хочу, чтобы его принудительно вводили в устройство IoT, чтобы каждый раз настраивать сопряжение новый мобильный телефон пытается подключиться).

Это команды, которые я выполнил до сих пор на устройстве IoT:

# Make the device discoverable:
hciconfig hci0 piscan

# Register SPP:
sdptool add --channel=22 SP

# Start rfcomm:
rfcomm -r watch /dev/rfcomm0 22

К сожалению, я не смог найти способ настройки PIN-кода, и при попытке подключения к мобильному телефону спариваться не удается. Кроме того, устройство можно обнаружить только на короткий промежуток времени.

Как настроить Bluetooth-стек устройства IoT (с последним Bluez) на автоматическую пару с любым телефоном, который знает данный PIN-код, и как сделать период обнаружения вечным?

Ответы

Ответ 1

Вы можете запустить приложение, которое реализует BlueZ DBus API. Я рекомендую BlueZ >= 5.42. Используйте интерфейс агента и реализуйте свой собственный PIN-код. После регистрации вашего агента bluez автоматически вызовет вызов и использует ваш собственный агент при запросе спаривания.

Кроме того, вы можете установить для DiscoverableTimeout значение от 0 до DBus с интерфейсом org.bluez.Adapter1.

"Значение нуля           означает, что таймаут отключен, и он останется в           доступный/ограниченный режим навсегда".

https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt (dbus-адаптер object doc) https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/agent-api.txt (dbus agent object doc) https://kernel.googlesource.com/pub/scm/bluetooth/bluez/+/5.44/test/simple-agent (образец) http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/ (читайте внизу)