wie das Zeug funktioniert

Heute: Wie aconno BLE-Advertisements zum Senden von Daten nutzt

Vorwort:

Wir bei aconno nutzen BLE-Advertisements, um Sensordaten und andere Informationen an interessierte Zuhörer wie mobile Apps, Gateways und andere Empfänger zu senden.

Bevor Sie mit dem Lesen dieses Dokuments fortfahren, stellen Sie bitte sicher, dass Sie die Grundlagen der BLE-Werbung verstehen, indem Sie einige der verfügbaren Literatur lesen oder den Inhalt dieser Seiten studieren:
BLE-Werbefibel
BLE-Werbung – ein Einsteiger-Tutorial

Besorgen Sie sich außerdem einige BLE-Tools, die Ihnen die Rohdaten und die interpretierten Daten anzeigen.

Unsere Sensorics App ist ein guter Einstieg in dieses Thema: Google Play Link
Quellen: GitHub repository
Auch unser BLE Sniffer ist eine große Hilfe, um diese Daten zu lesen und zu verstehen.
Quellen: GitHub repository

Oder Sie verwenden einfach das gute alte NRF connect


Wie wir die BLE-Anzeige verwenden:

Die BLE-Anzeige hat 37 Bytes, von denen einige fest/reserviert sind und andere für uns frei nutzbar sind.

So kann eine Beispielanzeige aussehen.

0xA0 0xB1 0x55 0x21 0x45 0x09 0x07 0x09 H E L L O

Die ersten 6 Bytes sind für die MAC-Adresse reserviert (hier im Beispiel A0:B1:55:21:45:09). Dieser Teil der Anzeige ist der einzige Teil, der immer an der gleichen Stelle bleibt und die gleiche Größe hat. Nach dem MAC können Felder unterschiedlicher Art folgen. Jedes Feld beginnt mit einem Längenbyte und einem Typ.
Im obigen Beispiel sagt uns das 0x07, dass die nächsten 7 Bytes, einschließlich dieses einen Längenbytes, zusammengehören. Nach dem Längenbyte wird der Feldtyp angekündigt, in unserem Fall 0x09, der für den vollständigen Namen der Bake steht.

Beispiel für eine typische AcnSensa-Anzeige (nicht vollständig):

0xA0 0xB1 0x55 0x21 0x45 0x09 0x1F 0xff 0X59 0X00 0X69 0X08 0x80 0X00 0X01 0X10 0X01 0X21 0X22 0X11

Bei aconno verwenden wir das Feld namens Herstellerdaten (0xFF). Dies ist ein freier Block, bei dem die ersten beiden Bytes nach 0XFF für den HW-Hersteller, in diesem Fall Nordic, reserviert sind. Die folgenden Bytes beschreiben, um welches aconno-Produkt es sich handelt und welche Version der Firmware es hat.

Siehe die Tabelle für weitere Informationen:

Feldname Größe Beschreibung
MSD Größe 1B Größe
MSD-ID 1B 0xFF
Nordische ID 2B 0x5900
Aconno ID 1B 0x69
Produkt-ID 1B 0x08
Einstellungsunterstützung 1b 0b1
Versionsnummer 7b 0x0
Daten Bis zu 24B Daten

 


Datenfeld:

Diese Anzeige enthält alle Daten für 3D-Werte (Kreisel, Beschleunigungsmesser und Magnetometer). Zusätzlich enthält diese Anzeige auch den Skalierungsfaktor für den Beschleunigungsmesser.

Feldname Größe Beschreibung
Werbung ID 1B 0x00
Gyroskop (X-Achse) 2B int16 Daten
Gyroskop (Y-Achse) 2B int16 Daten
Gyroskop (Z-Achse) 2B int16 Daten
Beschleunigungsmesser (X-Achse) 2B int16 Daten
Beschleunigungsmesser (Y-Achse) 2B int16 Daten
Beschleunigungsmesser (Z-Achse) 2B int16 Daten
Magnetometer (X-Achse) 2B int16 Daten
Magnetometer (Y-Achse) 2B int16 Daten
Magnetometer (Z-Achse) 2B int16 Daten
Beschleunigungsmesser LSB-Wert 2B uint16 Daten

Um das Anzeigenformat zwischen verschiedenen Geräten zu vereinheitlichen, haben wir ein Beschreibungsformat für diese Daten mit JSON definiert, das von Apps, Gateways und anderen gelesen und in sinnvolle Zahlen und Zeichen umgewandelt werden kann. Die sogenannten Deserializer definieren die Position, Länge und Reihenfolge der zu interpretierenden Bytes als Datentyp und den Namen dafür. Klingt kompliziert, oder?

Keine Sorge, hier ist ein Beispiel:

In diesem Ausschnitt einer aktuellen Deserialisierung sieht man, dass z.B. Gyroscope X ein SINT16 ist, ein zwei Byte signierter Integer, an der Position 6 und 7 (die 8 ist exklusiv) und umgekehrt (little endian->die 2 Bytes werden vertauscht). Außerdem ist eine Formel enthalten, die beschreibt, wie der Wert vor der Anzeige zu berechnen ist.

Hier ist eine Liste der verfügbaren Deserialisierer:

 acnBEACON acnALERT acnACT acnACT acnTEMP acnLIGHT acnSENSA acnSENSA acnSENSA acnSENSA acnRANGE acnSWITCH acnANGLE acnFREIGHT