Код Python для Bluetooth выдает ошибку после сброса адаптера

Я пробовал Программирование bluetooth на python. До вчерашнего дня все шло нормально. Сегодня утром произошло отключение питания, и по какой-то причине модуль bluetooth отключился, и его нельзя было включить. Итак, я сделал sudo hciconfig hci0 reset и затем включил его. С этого момента простейшие программы не выполняются. Взять этот например. Он застревает в advertise_service на bluetooth module и выдает следующую ошибку (FYI: virtualenv не был проблемой здесь. Общесистемный Python также делает то же самое).

Traceback (most recent call last):
  File "bt.py", line 17, in <module>
    advertise_service( server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ])
  File "/home/machinename/.virtualenvs/py27/local/lib/python2.7/site-packages/bluetooth/bluez.py", line 242, in advertise_service
    raise BluetoothError (str (e))
bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')

иногда я получал другую ошибку при компиляции и переустановке Bluez водитель:

Traceback (most recent call last):
  File "build/bdist.linux-x86_64/egg/bluetooth/bluez.py", line 268, in advertise_service
  bluetooth.btcommon.BluetoothError: error no advertisable device.

но все это работало как шарм раньше на этой машине; на самом деле вся программа отлично работает с моей другой машиной ubuntu (14.04 LTS), когда я пишу это. Я проверил исходный код и проследил до _bluetooth.so file-это скомпилированный код, поэтому я больше не мог понять, что делать.

любой указатель будет высоко оценен.

3 ответов


эта ошибка вызвана проблемами несовместимости с BlueZ 5 и SDP с bluetoothd

исправить для 15.10 и BlueZ 5

убедитесь, что работает sdptool browse local выдает следующую ошибку:

Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory

как выясняется, виновником является bluetoothd, демон Bluetooth. Использование SDP с bluetoothd требует устаревших функций по какой-то глупой причине, поэтому, чтобы исправить это, демон должен быть запущен в режиме совместимости с bluetoothd -C (или bluetooth --compat).

найти местоположение bluetooth.service by:

systemctl status bluetooth.service

затем измените bluetooth.service искать

ExecStart=/usr/libexec/bluetooth/bluetoothd

добавить --compat в конце этой строки, сохраните, а затем запустите

service bluetooth start

если все пойдет хорошо, вы должны быть в состоянии успешно работать

sudo sdptool browse local

наконец, сбросьте адаптер:

sudo hciconfig -a hci0 reset

теперь все должно работать нормально

ответ

просто, чтобы люди знали, я верить последним BlueZ сборка была каким-то образом нарушена в моей системе. Я загрузил, скомпилировал и установил 5.35 версия, и ничего не работает. Я набрал номер 5.34, все-таки одинаковые. Я также заметил, что адаптер bluetooth автоматически отключается через 3-4 минуты после его включения,

sudo hciconfig hci0 up # hci0 is the bt adapter

я использовал один USB-ключ bluetooth для тестирования. Он не пошел вниз автоматически, как встроенный адаптер, но проблемы упорствовавший. Тогда я использовал apt-get переустановить bluez,

apt-get install --reinstall bluez

опять же, как упомянул сидмайстер, Убедитесь, что запуск sdptool browse local дает следующую ошибку:

не удалось подключиться к серверу SDP на FF:FF:FF:00:00:00: нет такого файла или каталога

но для тех, кто использует initd system manager, трудно найти решение, если вы хотите выполнить sdp_rfcomm_server/client модель и терминал будут продолжать показывать одну и ту же ошибку снова и снова. Так для init.d выполните следующие действия:

  1. остановить bluetooth первый

    $ / etc / init.д/остановку Bluetooth

  2. проверить статус

    $ / etc / init.D / состояние bluetooth

  3. запустите bluetooth в режиме совместимости (не забудьте амперсанд,иначе приглашение не появится )

    $ / usr / libexec / bluetooth / bluetoothd --compat&

  4. снова запустите bluetooth

    $ / etc / init.D / bluetooth пуск

  5. еще раз попробуйте sdpbrowse

    $ sdptool просмотр локального

вещи должны работать для вас сейчас.


исправления:

bluetooth.btcommon.BluetoothError: (2, 'нет такого файла или каталога')

вам нужно:

  1. sudo nano /lib/systemd/system/bluetooth.service
  2. изменить с: ExecStart=/usr/lib/bluetooth/bluetoothd
  3. в: ExecStart=/usr/lib/bluetooth/bluetoothd --compat
  4. sudo systemctl daemon-reload