Bluetooth btcommon bluetootherror no advertisable device

Python code for Bluetooth throws error after I had to reset the adapter

I was trying out bluetooth programming in python. It was working fine till yesterday. This morning, there was a power outage and for some reason, the bluetooth module got disabled and it could not be turned on. So, I did a sudo hciconfig hci0 reset and then turned it on. From that point onwards, the simplest of the programs are failing to execute. Take this one for example. It gets stuck at advertise_service in bluetooth module and throws the following error (FYI: virtualenv was not a problem here. The systemwide python also does the same thing).

Traceback (most recent call last): File "bt.py", line 17, in 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') 
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. 

But all of these worked like a charm before in that machine; in fact all of the program works just fine with my other ubuntu (14.04LTS) machine as I write this. I inspected the source code, and traced to a _bluetooth.so file — which is a compiled code, hence I couldn’t figure out what to do anymore. Any pointer will be highly appreciated.

Источник

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

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

Traceback (most recent call last): File "bt.py", line 17, in 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') 
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.04LTS), когда я пишу это. Я проверил исходный код и проследил до файла _bluetooth.so , который является скомпилированным кодом, поэтому я не мог понять, что делать дальше. Любой указатель будет высоко оценен.

Читайте также:  Подключить мышку logitech bluetooth

Источник

rapberry pi: bluetooth.btcommon.BluetoothError: нет рекламного устройства в rc.local

ошибка возникает при запуске скрипта Python, включая подключение Bluetooth к другому устройству через rc.local. Ошибка не возникает при запуске через терминал с помощью sudo. Полное сообщение в /var/log/syslog гласит:

Apr 3 20:25:01 raspberrypi systemd[1]: Starting /etc/rc.local Compatibility. Apr 3 20:25:01 raspberrypi systemd[1]: Started /etc/rc.local Compatibility. Apr 3 20:25:02 raspberrypi rc.local[515]: Can't get device info: No such device Apr 3 20:25:04 raspberrypi rc.local[492]: Exception in thread Thread-2: Apr 3 20:25:04 raspberrypi rc.local[492]: Traceback (most recent call last): Apr 3 20:25:04 raspberrypi rc.local[492]: File "/usr/local/lib/python3.9/dist-packages/bluetooth/bluez.py", line 271, in advertise_service Apr 3 20:25:04 raspberrypi rc.local[492]: _bt.sdp_advertise_service (sock._sock, name, service_id, \ Apr 3 20:25:04 raspberrypi rc.local[492]: _bluetooth.error: no advertisable device Apr 3 20:25:04 raspberrypi rc.local[492]: During handling of the above exception, another exception occurred: Apr 3 20:25:04 raspberrypi rc.local[492]: Traceback (most recent call last): Apr 3 20:25:04 raspberrypi rc.local[492]: File "/usr/lib/python3.9/threading.py", line 954, in _bootstrap_inner Apr 3 20:25:04 raspberrypi rc.local[492]: self.run() Apr 3 20:25:04 raspberrypi rc.local[492]: File "/home/pi/Autosteuerung/AutosteuerungAutostart.py", line 44, in run Apr 3 20:25:04 raspberrypi rc.local[492]: advertise_service( server_sock, "SampleServer", Apr 3 20:25:04 raspberrypi rc.local[492]: File "/usr/local/lib/python3.9/dist-packages/bluetooth/bluez.py", line 275, in advertise_service Apr 3 20:25:04 raspberrypi rc.local[492]: raise BluetoothError (*e.args) Apr 3 20:25:04 raspberrypi rc.local[492]: bluetooth.btcommon.BluetoothError: no advertisable device 

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

import subprocess import threading from bluetooth import * import pigpio import time subprocess.call(['pigpiod']) subprocess.call(['hciconfig', 'hci0', 'piscan']) pi = pigpio.pi() pi.set_mode(2, pigpio.OUTPUT) pi.set_mode(3, pigpio.OUTPUT) pi.set_mode(23, pigpio.INPUT) pi.set_mode(13, pigpio.OUTPUT) pi.set_mode(26, pigpio.OUTPUT) pi.set_pull_up_down(23, pigpio.PUD_UP) class CarController(threading.Thread): global pi def __init__(self): threading.Thread.__init__ (self) def run(self): while(True): pi.write(13, 0) pi.write(26, 1) time.sleep(1) pi.write(13, 1) pi.write(26, 0) time.sleep(1) pi.write(13, 1) pi.write(26, 1) server_sock=BluetoothSocket( RFCOMM ) server_sock.bind(("",PORT_ANY)) server_sock.listen(1) port = server_sock.getsockname()[1] uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" advertise_service( server_sock, "SampleServer", service_id = uuid, service_classes = [ uuid, SERIAL_PORT_CLASS ], profiles = [ SERIAL_PORT_PROFILE ], # protocols = [ OBEX_UUID ] ) print("Waiting for connection on RFCOMM channel %d" % port) client_sock, client_info = server_sock.accept() print("Accepted connection from ", client_info) try: data_out = bytes(3) while True: data_in = client_sock.recv(3) if len(data_in) > 0: gas = data_in[0] & 127 reverse = data_in[0] & 0b10000000 steer = data_in[1] other = data_in[2] if gas > 100: pi.write(3, 0) pi.hardware_PWM(18, 2000, 0) else: pi.write(3, 1) pi.hardware_PWM(18, 2000, (gas * 10000)) if reverse: pi.write(2, 1) else: pi.write(2, 0) if steer < 7: pi.write(13, 0) pi.write(26, 1) elif steer >11: pi.write(13, 1) pi.write(26, 0) else: pi.write(13, 1) pi.write(26, 1) client_sock.send(data_out) except IOError: pi.hardware_PWM(18, 2000, 0) pass finally: print("disconnected") pi.hardware_PWM(18, 2000, 0) running = False client_sock.close() server_sock.close() print("all done") try: shutdown = False carController = CarController() if(pi.read(23) == 0): shutdown = True carController.start() while(pi.read(23) == 00): time.sleep(1) finally: pi.stop() if(shutdown): print("shutdown") subprocess.call(["shutdown", "-h", "now"]) else: print("resume") 

Я уже пробовал каждое решение для этого сообщения, которое я нашел, но все они касаются этой проблемы, возникающей из-за запуска терминала, а не rc.local.

Читайте также:  Блютуз отключается при подключении наушников

Источник

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

Я пробовал программировать bluetooth на python. До вчерашнего дня он работал нормально. Сегодня утром произошло отключение электричества и по какой-то причине отключился модуль bluetooth и его нельзя было включить. Итак, я сделал sudo hciconfig hci0 reset , а затем включил его. С этого момента простейшие программы перестают выполняться. Возьмите

Иногда я получал другую ошибку, когда компилировал и переустанавливал драйвер 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.04LTS), когда я пишу это. Я проверил исходный код и проследил до файла _bluetooth.so — это скомпилированный код, поэтому я не мог понять, что делать дальше.

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

2 ответа

Эта ошибка вызвана проблемами несовместимости с 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 по:

systemctl status bluetooth.service 

Затем отредактируйте bluetooth.service и найдите

ExecStart=/usr/libexec/bluetooth/bluetoothd 

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

Если все идет хорошо, вы сможете успешно запустить

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 

И вдруг все пришло в норму.

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

Источник

bluetooth error no advertisable device

I keep getting an error saying «bluetooth.btcommon.BluetoothError: error no advertisable device» The line number points to the advertise_service line, and it does so whether or not I add the additional parameters as shown in the example in the pybluez github page, or bind the port to bluetooth.PORT_ANY The method being called is here:

def advertise_service (sock, name, service_id = "", service_classes = [], \ profiles = [], provider = "", description = "", protocols = []): if service_id != "" and not is_valid_uuid (service_id): raise ValueError ("invalid UUID specified for service_id") for uuid in service_classes: if not is_valid_uuid (uuid): raise ValueError ("invalid UUID specified in service_classes") for uuid, version in profiles: if not is_valid_uuid (uuid) or version < 0 or version >0xFFFF: raise ValueError ("Invalid Profile Descriptor") for uuid in protocols: if not is_valid_uuid (uuid): raise ValueError ("invalid UUID specified in protocols") try: _bt.sdp_advertise_service (sock._sock, name, service_id, \ service_classes, profiles, provider, description, \ protocols) except _bt.error as e: raise BluetoothError (str (e)) 

I’m can’t print off the client information if I don’t advertise, and get a null pointer exception on the android side, so I figure it’s necessary, but can’t get past this error if I do advertise. This is the smallest amount of code I can have to get this error. Like I mentioned, not advertising results in no error, but I can’t print off client information on the connect (the android side can’t find the pi).

Читайте также:  What ipods have bluetooth

If you do know of a way to do this without that portion, here’s the android code:

 Set pairedDevices = BTAdapter.getBondedDevices(); TextView textShowConnected = (TextView) findViewById(R.id.textShowConnected); if (pairedDevices.size() > 0) < for (BluetoothDevice device : pairedDevices) < if(device.getName().toString().equals("Pi")) < textShowConnected.setText("Found the Pi. Address is "+device.getAddress()); TextView textShowConnectedSocket = (TextView) findViewById(R.id.textShowConnectedSocket); //textShowConnectedSocket.setText("uuid is: "+device.getUuids()[0].getUuid().toString()); try < BluetoothSocket connection = device.createRfcommSocketToServiceRecord(device.getUuids()[0].getUuid()); //BluetoothSocket connection = device.createInsecureRfcommSocketToServiceRecord(device.getUuids()[0].getUuid()); connection.connect(); if(connection.isConnected()) < textShowConnected.setText("Is connected from second."); textShowConnectedSocket.setText("Is conencted to: "+connection.getRemoteDevice().getName().toString()); textShowPlace.setText("Is connected to: "+connection.getRemoteDevice().getAddress().toString()); >else < textShowConnected.setText("No connection."); textShowConnectedSocket.setText("No connection."); textShowPlace.setText("No connection."); >> catch (IOException e) < e.printStackTrace(); >> //DeviceItem newDevice = new DeviceItem(device.getName(), device.getAddress(), "false"); //deviceItemList.add(newDevice); > > > 

My most recent Java side attempt (just in case the pi side was fine):

for (BluetoothDevice device : pairedDevices) < if(device.getName().toString().equals("Pi")) < textShowConnected.setText("Found the Pi. Address is "+device.getAddress()); TextView textShowConnectedSocket = (TextView) findViewById(R.id.textShowConnectedSocket); TextView textShowPlace = (TextView) findViewById(R.id.textShowPlace); //textShowConnectedSocket.setText("uuid is: "+device.getUuids()[0].getUuid().toString()); int bt_port_to_connect = 1; BluetoothSocket deviceSocket = null; Method m = null; try < textShowPlace.setText("created socket"); m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] ); deviceSocket = (BluetoothSocket) m.invoke(device,bt_port_to_connect); deviceSocket.connect(); if(deviceSocket.isConnected()) < textShowPlace.setText("is connected"); textShowConnectedSocket.setText("Connected successfully."); textShowConnected.setText("Connected to: "+deviceSocket.getRemoteDevice().getName().toString()); >else < textShowConnectedSocket.setText("Did not connect."); >> catch (IOException e) < textShowPlace.setText("catch statement "+e); textShowConnectedSocket.setText("No connection."); >catch (NoSuchMethodException e) < textShowConnected.setText("No such method."); textShowPlace.setText("catch statement "+e); >catch (InvocationTargetException e) < textShowPlace.setText("catch statement "+e); textShowConnectedSocket.setText("No connection."); >catch (IllegalAccessException e) < textShowPlace.setText("catch statement "+e); textShowConnectedSocket.setText("No connection."); >//device.createRfcommSocketToServiceRecord(uuid); //device.createInsecureRfcommSocketToServiceRecord(uuid); > //DeviceItem newDevice = new DeviceItem(device.getName(), device.getAddress(), "false"); //deviceItemList.add(newDevice); > 

I’d appreciate any help on this with getting a connection going. I’m not sure what’s getting messed up here.

David Binnion Avatar

asked Jun 20 ’16 09:06

David Binnion

1 Answers

Looks like to advertise it just needed: «sudo hciconfig hci0 piscan»

And to connect it needed bluetooth.PORT_ANY from that import, so I’m marking this as answered.

To anyone that finds this because of their own problems with this. You have an answer now. Good luck.

David Binnion Avatar

answered Nov 16 ’22 05:11

Источник

Оцените статью
Adblock
detector