Альтернатива устаревшему двоичному файлу rfcomm в bluez

10

Начиная с bluez 5.44, двоичные файлы rfcomm, содержащиеся в bluez-utils (среди прочего, такие как hcitool), считаются устаревшими и теперь включены только в пакет bluez-utils-compat, предоставляемый AUR.

Существует ли подобное приложение командной строки для привязки устройства Bluetooth к последовательному порту с помощью модуля ядра rfcomm, или мне теперь нужно использовать PyBluez или похожие библиотеки?

Если последнее случается, какие библиотеки Python 3 вы бы порекомендовали?

И если кто-то знает, пожалуйста, скажите мне, почему так много из bluez-utils внезапно считаются устаревшими. Я не мог ничего найти об этом.

ArchWiki рекомендует реализацию функциональности RFCOMM с использованием нового D-Bus Профиль 1 API .

Эйке
источник

Ответы:

2

Недавно я нашел проект bluez-tools , целью которого является реализация утраченной функциональности с использованием текущего API-интерфейса D-Bus Bluez.

Bluez-инструменты доступны на ArchLinux из репозитория сообщества. Я не проверял это, и на странице github говорится, что он все еще находится в бета-версии. Но согласно документации, bt-serial должен иметь возможность заменить старый bluez rfcomm, а bt-adapter + bt-agent + bt-device имеют функциональность hcitool.

Изменить: При просмотре списка проблем и последних коммитов, bluez-tools, похоже, больше не поддерживаются.

Эйке
источник
1

Я нашел другое возможное решение. Я нашел это, копаясь в чьем-то репозитории в git hub. Это использует Python3 встроенный модуль сокета.

Предпосылки:

  1. У вас есть рабочий адаптер по адресу <адрес адаптера>.
  2. Ваше целевое устройство Bluetooth находится по адресу <адрес устройства>.
  3. Устройство закреплено.

То есть тот же момент, что rfcomm может быть использован.


$python3
>>> import socket
>>> sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
>>> adapter = '00:11:22:33:44:55' #<adapter address>
>>> device = '55:44:33:22:11:00' #<device address>
>>> sock.bind((adapter, 1))
>>> sock.connect((device, 1))
## If not pinned it will ask you. You can use/adapt the bluez simple-agent for headless pinning
>>> sock.send(b'hello\n')
>>> sock.recv(100)
>>> sock.close()
Голт Драккор
источник
Приятно знать, что Python изначально поддерживает последовательную связь Bluetooth. Спасибо за ответ на этот относительно старый вопрос.
Eike
0

я хочу отметить об этой проблеме:

  1. что этот проект github содержит некоторые функции rfcomm. (на основе тестовых файлов bluez).
  2. Сам проект bluez по-прежнему содержит файл rfcomm.c, который можно легко скомпилировать с помощью:

    gcc -lbluetooth rfcomm.c -orfcomm -DVERSION = xyz

... только один файл, нет необходимости компилировать весь проект bluez. где xyz - версия загруженного исходного кода bluez tar.xz (сейчас 5.46). перед загрузкой необходимо сначала проверить собственный bluetoothd -vи загрузить соответствующий источник. bluez-libs - только зависимость для успеха компиляции.

Мне нужен rfcomm для armv7 (raspberry 2), и нет пакета aur для rfcomm, и это был единственный способ, но он работает хорошо.

Все еще не уверен, почему rfcomm устарел, без хорошей альтернативы, и как общаться с Bluetooth, поскольку это был последовательный порт другим способом. Потому что даже вы являетесь экспертом по питону и экспертом по DBUS ... (как, вероятно, владелец вышеупомянутого проекта) ... все же только fifo был предоставлен таким образом, а не реальное символьное устройство в / dev / ..., как во всех других программах (например, arduino) ) можно увидеть и работать с.

Асаин Куйович
источник
2
1. Страница проекта гласит: «Просто чтобы избежать повторной реализации некоторого старого кода, использующего эти инструменты», что означает, что автор предложил бы придерживаться другого подхода при использовании bluez для новых проектов. 2. Существует много способов собрать rfcomm самостоятельно, поэтому я ищу причину его устаревания и поддерживаемую альтернативу.
Айке