Wiederverbinden nach Verbindungsabbruch bei Bluetooth

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Taha
User
Beiträge: 5
Registriert: Freitag 10. Mai 2019, 12:48

Ich habe ein Code der mithilfe der Bibliothek pygatt per BLE sich mit einem Gerät verbindet.

Code: Alles auswählen

import pygatt
import time
adapter = pygatt.GATTToolBackend()
try:
    adapter.start()
    device =adapter.connect(mac-adress)
    device.char_write(uuid,bytearray([0x73, 0x74, 0x61, 0x72, 0x74]))
    while(1):
        value = device.char_read(uuid)
        v = value.decode('utf-8')
        print(v)
        time.sleep(1)
Falls aus irgendeinem Grund die Verbindung unterbrochen wird, möchte ich, dass ein Verbindungsversuch gestartet wird und dies jedes Mal durchgeführt wird, wenn die Verbindung unterbrochen wird. Den Code habe ich deshalb folgendermaßen ergänzt:

Code: Alles auswählen

except pygatt.exceptions.NotConnectedError:
    adapter.reconnect(adapter,30)
Jedoch führt diese exception handling zu einem anderen Error (NotificationTimeOutError), obwohl innerhalb der 30 Sekunden eine Verbindung hergestellt werden kann. Also es reconnected nicht obwohl es möglich ist. Ich bin mir auch nicht sicher, ob ich mit solcher exception handling den code dazubringen kann, jedes Mal einen erneuten Verbindungsversuch zu starten bei Verbindungsabbruch. Braucht es noch eine zusätzliche While-Schleife um alles? Ich würde mich freuen, wenn ihr mir helfen könntet oder Tipps geben könntet.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Code ist komisch formatiert, aber wenn du einfach nur das geschrieben hast, was hier steht, ohne deinen Satz dazwischen - wie soll das dann funktionieren? Eine Exception abzufangen springt nicht magisch wieder an den Anfang eines try-Statements. Fuer so etwas gibt es while Schleifen, die du an anderer Stelle ja auch schon erfolgreich, wenn auch mit ueberfluessigen Klammern und 1 statt dem in Python ueblichen True benutzt.
Antworten