Python-Code für Bluetooth löst einen Fehler aus, nachdem ich den Adapter zurücksetzen musste

8

Ich habe Bluetooth-Programmierung in Python ausprobiert. Es hat bis gestern gut funktioniert. Heute Morgen gab es einen Stromausfall und aus irgendeinem Grund wurde das Bluetooth-Modul deaktiviert und es konnte nicht eingeschaltet werden. Also habe ich ein sudo hciconfig hci0 reset gemacht und es dann angeschaltet. Ab diesem Zeitpunkt wird das einfachste Programm nicht mehr ausgeführt. Nehmen Sie diesen zum Beispiel. Es bleibt bei advertise_service in bluetooth module hängen und löst den folgenden Fehler aus (FYI: virtualenv war hier kein Problem. Das systemweite Python macht das gleiche).

%Vor%

Manchmal habe ich einen anderen Fehler bekommen, als ich Bluez driver kompiliert und neu installiert habe:

%Vor%

Aber all das wirkte in dieser Maschine wie ein Zauberspruch; in der Tat funktioniert das ganze Programm gut mit meinem anderen ubuntu (14.04LTS) Maschine, während ich dies schreibe. Ich habe den Quellcode inspiziert und zu einer _bluetooth.so -Datei zurückverfolgt - was ein kompilierter Code ist, daher konnte ich nicht herausfinden, was ich tun soll.

Jeder Zeiger wird sehr geschätzt.

    
Sidmeister 13.10.2015, 19:26
quelle

3 Antworten

17

Dieser Fehler ist auf Inkompatibilitätsprobleme mit BlueZ 5 und SDP mit bluetoothd

zurückzuführen

Fix für 15.10 und BlueZ 5

Stellen Sie sicher, dass sdptool browse local den folgenden Fehler anzeigt:

%Vor%

Wie sich herausstellt, ist der Schuldige bluetoothd , der Bluetooth-Daemon. Die Verwendung von SDP mit bluetoothd erfordert veraltete Funktionen aus irgendeinem Grund. Um dies zu beheben, muss der Daemon im Kompatibilitätsmodus mit bluetoothd -C (oder bluetooth --compat ) gestartet werden.

Sucht den Speicherort von bluetooth.service nach:

%Vor%

Bearbeiten Sie dann bluetooth.service und suchen Sie nach

%Vor%

Fügen Sie --compat am Ende dieser Zeile hinzu, speichern Sie und führen Sie dann

aus %Vor%

Wenn alles gut geht, sollten Sie

erfolgreich ausführen können %Vor%

Setzen Sie den Adapter schließlich zurück:

%Vor%

Die Dinge sollten jetzt gut funktionieren

Alte Antwort

Nur um die Leute wissen zu lassen, glaube ich, dass der letzte BlueZ Build in meinem System irgendwie kaputt war. Ich habe die 5.35 Version heruntergeladen, kompiliert und installiert, und nichts hat funktioniert. Ich wählte 5.34 , immer noch dasselbe. Ich habe auch bemerkt, dass der Bluetooth-Adapter automatisch 3-4 Minuten nach der Aktivierung mit,

ging %Vor%

Ich habe einen USB-Bluetooth-Dongle zum Testen verwendet. Es ging nicht wie der eingebaute Adapter automatisch runter, aber die Probleme blieben bestehen. Dann habe ich apt-get verwendet, um bluez ,

neu zu installieren %Vor%

und plötzlich war alles wieder normal.

    
Sidmeister 15.10.2015, 06:06
quelle
0

Wieder, wie Sidmeister sagte, Stellen Sie sicher, dass das Ausführen von sdptool browse local folgenden Fehler enthält:

Verbindung zum SDP-Server konnte nicht hergestellt werden unter FF:FF:FF:00:00:00: Keine solche Datei oder Verzeichnis

Aber für diejenigen, die den initd-Systemmanager verwenden, ist es schwierig, eine Lösung zu finden, wenn Sie sdp_rfcomm_server/client model ausführen wollen, und das Terminal zeigt immer wieder denselben Fehler an. Gehen Sie für init.d folgendermaßen vor:

  1. Stoppen Sie Bluetooth zuerst

    $ /etc/init.d/bluetooth stop

  2. Statusprüfung

    $ /etc/init.d/bluetooth status

  3. Führen Sie Bluetooth im Kompatibilitätsmodus aus (nicht zu vergessen, kaufmännisches Zeichen, sonst wird die Eingabeaufforderung nicht angezeigt)

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

  4. starte Bluetooth erneut

    $ /etc/init.d/bluetooth starten

  5. versuchen Sie erneut sdpbrowse

    $ sdptool browse local

Die Dinge sollten jetzt für Sie arbeiten.

    
Gaurav Kumar 02.02.2017 10:12
quelle
0

Um zu beheben:

  

bluetooth.btcommon.BluetoothError: (2, 'Keine solche Datei oder kein Verzeichnis')

Sie müssen:

  1. sudo nano /lib/systemd/system/bluetooth.service
  2. Änderung von: ExecStart=/usr/lib/bluetooth/bluetoothd
  3. An: ExecStart=/usr/lib/bluetooth/bluetoothd --compat
  4. sudo systemctl daemon-reload
Pedro Lobito 11.03.2018 14:28
quelle

Tags und Links