Seite 1 von 1
Bluetooth-Daten eines Sensors auswerten
Verfasst: Freitag 10. Mai 2019, 12:56
von Taha
Hallo,
Wie schreibe ich ein Skript der Bluetooth-Daten eines Sensors, in meinem Fall:
https://www.bosch-connectivity.com/medi ... otocol.pdf
empfängt und aus diesen Datenpaketen z.B. die Beschleunigungswerte liest. Würde mich über eine Antwort freuen.
Re: Bluetooth-Daten eines Sensors auswerten
Verfasst: Freitag 10. Mai 2019, 19:30
von __deets__
Mit so etwas hier & dann der Dokuementation deines Sensors folgen.
https://github.com/adafruit/Adafruit_Python_BluefruitLE
Re: Bluetooth-Daten eines Sensors auswerten
Verfasst: Montag 13. Mai 2019, 10:02
von Taha
Mein Gerät wird nicht als UART device erkannt. Das Skript findet den Sensor nicht. Obwohl ich z.B. in Windows in den Bluetooth-Geräten den Sensor finde.
Re: Bluetooth-Daten eines Sensors auswerten
Verfasst: Montag 13. Mai 2019, 10:14
von __deets__
Es ist ja auch kein UART. Du musst dich zu den custom characteristics auf Seite 7 verbinden, und deren Daten wie im Datenblatt angegeben interpretieren.
Re: Bluetooth-Daten eines Sensors auswerten
Verfasst: Montag 13. Mai 2019, 11:59
von Taha
ich weiß gerade nicht was du mit custom characteristics auf Seite 7 meinst, aber probiere das Beispielskript low_level.py umzuprogrammieren, so dass es "normale" BLE findet und nicht UART. Muss ich da die UUID meines Sensors definieren?
Re: Bluetooth-Daten eines Sensors auswerten
Verfasst: Montag 13. Mai 2019, 12:38
von __deets__
Ich kenne das Beispielskripts das du meinst nicht. Und Seite 7 bezieht sich auf das von dir verlinkte Datenblatt.
Du musst erstmal deinen Sensor entdecken, dich dann verbinden, dann die Services aufzählen, dann den nehmen der dich interessiert, dann dessen characteristics aufzählen, und dann die Notifikationen anmelden für due Daten die dich interessieren.
Re: Bluetooth-Daten eines Sensors auswerten
Verfasst: Montag 13. Mai 2019, 12:46
von __deets__
Ich hab das Skript gefunden. Prinzipiell sollte das tun. Du musst halt die UUIDs des Sensors benutzen.
Ich arbeite unterm mac und iOS mit BLE und für ersteres gibt es einen Bluetooth Explorer mit dem man sich sowas auch zusammen sammeln kann. Wobei die Werte ja auch dokumentiert sind.
Re: Bluetooth-Daten eines Sensors auswerten
Verfasst: Montag 13. Mai 2019, 16:38
von Taha
Ich habe nun über den folgenden Code versucht, Daten des Sensors zu erhalten.
btlib = find_library("bluetooth")
if not btlib:
raise Exception("Can't find required bluetooth libraries")
bluez = CDLL(btlib, use_errno=True)
dev_id = bluez.hci_get_route(None)
sock = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI)
sock.bind((dev_id,))
err = bluez.hci_le_set_scan_parameters(sock.fileno(), 0, 0x10, 0x10, 0, 0, 1000);
if err > 0:
raise Exception("Set scan parameters failed")
# occurs when scanning is still enabled from previous call
## allows LE advertising events
hci_filter = struct.pack("<IQH",0x00000010, 0x4000000000000000,0)
sock.setsockopt(SOL_HCI, HCI_FILTER, hci_filter)
err = bluez.hci_le_set_scan_enable(sock.fileno(),
1, # 1: turn on; 0:turn off
0, # 0: filtering disabled; 1: filter out duplicates
1000) # timeout
if err > 0:
errnum = get_errno()
raise Exception("{} {}".format(errno.errorcode[errnum], os.strerror(errnum)))
while True:
data = sock.recv(2048)
print(data)
mit print(data) erhalte ich dann folgendes (ausschnitssweise)
b'\x04>:\x02\x02\x00\x00\x1b\x82\x0eT\x07+\x16\x02\x01\x06\x12\tCISS-Datastreamer\xa8\x00\x01\x7f_,\xb4 q\x0e\x02\x01\x1a\n\xffL\x00\x10\x05\x03\x18o\x17]\xa6'
b'\x04>"\x02\x01\x00\x00\x1b\x82\x0eT\x07+\x16\x02\x01\x06\x12\tCISS-Datastreamer\xb2'
b'\x04>K\x02\x02\x00\x00\x1b\x82\x0eT\x07+\x16\x02\x01\x06\x12\tCISS-Datastreamer\xac\x03\x01\xfe\xc9:\xefG\x02\x1f\x1e\xff\x06\x00\x01\t \x00\x11\x04\xe6\xc5\x95v\x97Q\x95\xbazK\xe6\xa87\xd7\n\xdc&t\x7f9^\xa8'
b'\x04>"\x02\x01\x00\x00\x1b\x82\x0eT\x07+\x16\x02\x01\x06\x12\tCISS-Datastreamer\xac'
Laut der Protokoll-Beschreibung sollte die Information bezüglich der Beschleunigung im ersten Byte stecken. Allerdings bleibt b'\x04> unverändert, egal wie ich den Sensor zum Beispiel bewege.
Erhalte ich die falschen Datenpakete, oder liegt es an etwas anderem?
Re: Bluetooth-Daten eines Sensors auswerten
Verfasst: Montag 13. Mai 2019, 16:44
von __deets__
Ich sehe nicht, das du dich zu der von mir beschriebenen characteristic anmeldest. Was du da siehst ist einfach nur die Advertisement Information. Das andere Skript war da geeigneter.
Such dir mal eine Einführung in BLE. Das ist leider nicht alles so simpel wie ein Socket oder UART. Kann halt mehr. Dann verstehst du auch, was da in dem Datenblatt alles besprochen wird.
Und in Zukunft bitte Code Tags verwenden. So ist der Code kaum entzifferbar.