it-swarm.com.de

Was ist das iBeacon Bluetooth-Profil?

Ich möchte mein eigenes iBeacon mit einigen Bluetooth-Entwicklern für niedrige Energien entwickeln. Apple hat noch keine Spezifikation für iBeacons veröffentlicht, jedoch haben einige Hardware-Entwickler den iBeacon aus dem AirLocate-Beispielcode zurückentwickelt und mit dem Verkauf von iBeacon-Entwicklungskits begonnen. 

Was ist das iBeacon Bluetooth-Profil?

Bluetooth Low Energy verwendet GATT für die Erkennung von LE-Profildiensten. Ich denke, wir müssen das Attributhandle, den Attributtyp, den Attributwert und möglicherweise die Attributberechtigungen des iBeacon-Attributs kennen. Für einen iBeacon mit einer UUID von E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 ein Hauptwert von 1 und ein Nebenwert von 1, was wäre der Bluetooth-GATT-Profildienst?

Hier einige Annahmen, die ich aus der Diskussion in den Foren von Apple und durch die Dokumente getroffen habe.

  1. Sie müssen nur den Profildienst (GATT) eines Bluetooth-Peripheriegeräts anzeigen, um zu wissen, dass es sich um einen iBeacon handelt.

  2. Die Dur- und Minor-Schlüssel werden irgendwo in diesem Profildienst codiert

Hier sind einige Unternehmen mit iBeacon Dev Kits, bei denen es scheint, dass sie diese Zahlen bereits kennen:

Hoffentlich werden wir rechtzeitig ein Profil wie folgt auf Bluetooth.org gepostet: https://www.bluetooth.org/en-us/specification/adopted-specifications

145
PaulWoodIII

Bei einem iBeacon mit ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, major 0, minor 0 und kalibriertem Tx Power von -59 RSSI sieht das übertragene BLE-Werbepaket folgendermaßen aus:

d6 be 89 8e 40 24 05 a2 17 6e 3d 71 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 52 ab 8d 38 a5

Dieses Paket kann wie folgt aufgeteilt werden:

d6 be 89 8e # Access address for advertising data (this is always the same fixed value)
40 # Advertising Channel PDU Header byte 0.  Contains: (type = 0), (tx add = 1), (rx add = 0)
24 # Advertising Channel PDU Header byte 1.  Contains:  (length = total bytes of the advertising payload + 6 bytes for the BLE mac address.)
05 a2 17 6e 3d 71 # Bluetooth Mac address (note this is a spoofed address)
02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 # Bluetooth advertisement
52 ab 8d 38 a5 # checksum

Der Schlüssel dieses Pakets ist die Bluetooth-Werbung, die wie folgt aufgeteilt werden kann:

02 # Number of bytes that follow in first AD structure
01 # Flags AD type
1A # Flags value 0x1A = 000011010  
   bit 0 (OFF) LE Limited Discoverable Mode
   bit 1 (ON) LE General Discoverable Mode
   bit 2 (OFF) BR/EDR Not Supported
   bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller)
   bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)
1A # Number of bytes that follow in second (and last) AD structure
FF # Manufacturer specific data AD type
4C 00 # Company identifier code (0x004C == Apple)
02 # Byte 0 of iBeacon advertisement indicator
15 # Byte 1 of iBeacon advertisement indicator
e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon proximity uuid
00 00 # major 
00 00 # minor 
c5 # The 2's complement of the calibrated Tx Power

Jedes Bluetooth LE-Gerät, das zum Senden einer bestimmten Ankündigung konfiguriert werden kann, kann das obige Paket generieren. Ich habe einen Linux-Computer mit Bluez konfiguriert, um diese Ankündigung zu senden, und iOS7-Geräte, auf denen Apples AirLocate-Testcode ausgeführt wird, nehmen ihn als iBeacon mit den oben angegebenen Feldern auf. Siehe: BlueZ Stack als Peripheriegerät verwenden (Werbetreibender)

Dieses Blog enthält alle Details zum Reverse Engineering-Prozess.

221
davidgyoung

Es scheint auf Werbedaten zu basieren, insbesondere auf den Herstellerangaben:

4C00 02 15 585CDE931B0142CC9A1325009BEDC65E 0000 0000 C5

<company identifier (2 bytes)> <type (1 byte)> <data length (1 byte)>
    <uuid (16 bytes)> <major (2 bytes)> <minor (2 bytes)> <RSSI @ 1m>
  • Apple Company Identifier (Little Endian), 0x004c
  • datentyp 0x02 => iBeacon
  • datenlänge: 0x15 = 21 
  • uuid: 585CDE931B0142CC9A1325009BEDC65E 
  • hauptfach: 0000
  • moll: 0000 
  • gemessene Leistung bei 1 Meter: 0xc5 = -59

Ich habe dieses Skript node.js , das unter Linux mit dem Beispiel der AirLocate-App arbeitet.

45
sandeepmistry

Nur um den Unterschied zwischen der Antwort von Sandeepmistry und der Antwort von Davidgyoung auszugleichen:

02 01 1a 1a ff 4C 00

Ist Teil der Spezifikation des Werbedatenformats [1]

  02 # length of following AD structure
  01 # <<Flags>> AD Structure [2]
  1a # read as b00011010. 
     # In this case, LE General Discoverable,
     # and simultaneous BR/EDR but this may vary by device!

  1a # length of following AD structure
  FF # Manufacturer specific data [3]
4C00 # Apple Inc [4]
0215 # ?? some 2-byte header

Vom AD fehlt eine Definition von Service [5]. Ich denke, das iBeacon-Protokoll selbst hat keine Beziehung zum GATT und zur Erkennung von Standarddiensten. Wenn Sie das iBeacon-Programm von RedBearLab herunterladen, werden Sie feststellen, dass das GATT zur Konfiguration der Ankündigungsparameter verwendet wird. Dies scheint jedoch spezifisch für die Implementierung zu sein und ist nicht Teil der Spezifikation. Das AirLocate-Programm scheint das GATT nicht für die Konfiguration zu verwenden, z. B. gemäß LightBlue oder ähnlichen Programmen, die ich ausprobiert habe.

Verweise:

  1. Core Bluetooth Spec v4, Band 3, Teil C, 11
  2. Band 3, Teil C, 18.1
  3. Band 3, Teil C, 18.11
  4. https://www.bluetooth.org/de-de/specification/assigned-numbers/company-identifiers
  5. Band 3, Teil C, 18.2
20
slackhappy

Wenn Sie sich diese Frage stellen, weil Sie Core Bluetooth verwenden möchten, um als iBeacon zu werben , anstatt die Standard-API zu verwenden, können Sie dies leicht tun, indem Sie ein NSDictionary wie das folgende verwenden:

{
    kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>;
}

Siehe diese Antwort für weitere Informationen.

6
Senseful

Es ist sehr einfach, es wird nur eine Zeichenfolge angekündigt, die einige Zeichen enthält, die dem iBeacon-Standard von Apple entsprechen http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/

4

das iBeacon-Profil enthält 31 Bytes, darunter die folgenden

  1. Präfix - 9 Bytes - enthält die Adv-Daten und die Herstellerdaten
  2. UUID - 16 Bytes
  3. Major - 2 Bytes
  4. Minor - 2 Bytes
  5. TxPower - 1 Byte

 enter image description here

0
Ambi