web-dev-qa-db-fra.com

Qu'est-ce que le profil Bluetooth iBeacon?

J'aimerais créer mon propre iBeacon avec des kits de développement Bluetooth basse consommation. Apple n'a pas encore publié de spécification pour les iBeacons, mais quelques développeurs de matériel ont procédé à une ingénierie inverse de l'iBeacon à partir du code AirLocate et ont commencé à vendre des kits de développement iBeacon. 

Alors, quel est le profil Bluetooth iBeacon?

Bluetooth Low Energy utilise le GATT pour la découverte de services de profil LE. Je pense donc que nous devons connaître le descripteur d'attribut, le type d'attribut, la valeur d'attribut et peut-être les autorisations d'attribut de l'attribut iBeacon. Donc, pour un iBeacon avec un UUID de E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 une valeur majeure de 1 et une valeur mineure de 1, quel serait le service de profil Bluetooth GATT?

Voici quelques hypothèses que j'ai tirées de la discussion sur les forums d'Apple et de la documentation.

  1. Il suffit de voir le service de profil (GATT) d’un périphérique Bluetooth pour savoir qu’il s’agit d’un iBeacon.

  2. Les clés majeure et mineure sont codées quelque part dans ce service de profil.

Voici quelques entreprises avec des kits de développement iBeacon qui semblent déjà avoir ce chiffre:

Espérons qu'avec le temps, nous aurons un profil sur Bluetooth.org comme ceci: https://www.bluetooth.org/en-us/specification/adopted-specifications

145
PaulWoodIII

Pour un iBeacon avec ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, major 0, mineur 0 et puissance émise calibrée de -59 RSSI, le paquet de publicité BLE transmis se présente comme suit:

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

Ce paquet peut être décomposé comme suit:

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

La partie clé de ce paquet est la publicité Bluetooth, qui peut être décomposée comme suit:

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

Tout périphérique Bluetooth LE pouvant être configuré pour envoyer une publication spécifique peut générer le paquet ci-dessus. J'ai configuré un ordinateur Linux à l'aide de Bluez pour envoyer cette annonce, et les appareils iOS7 exécutant le code de test AirLocate d'Apple le récupèrent sous la forme d'un iBeacon avec les champs spécifiés ci-dessus. Voir: Utiliser BlueZ Stack en tant que périphérique (annonceur)

Ce blog contient tous les détails sur le processus de reverse engineering.

221
davidgyoung

Il semble reposer sur des données de publicité, en particulier les données du fabricant:

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>
  • Identifiant d'entreprise Apple (Little Endian), 0x004c
  • type de données, 0x02 => iBeacon
  • longueur de données, 0x15 = 21 
  • uuid: 585CDE931B0142CC9A1325009BEDC65E 
  • majeur: 0000
  • mineur: 0000 
  • puissance mesurée à 1 mètre: 0xc5 = -59

J'ai ce script node.js travaillant sur Linux avec l'exemple d'application AirLocate.

45
sandeepmistry

Juste pour réconcilier la différence entre la réponse de sandeepmistry et celle de davidgyoung:

02 01 1a 1a ff 4C 00

Fait partie de la spécification du format de données publicitaires [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

Une définition du service [5] ne figure pas dans l'ANNONCE. Je pense que le protocole iBeacon lui-même n'a aucun rapport avec le GATT et la découverte de service standard. Si vous téléchargez le programme iBeacon de RedBearLab, vous verrez qu'ils utilisent le GATT pour configurer les paramètres de publication, mais cela semble être spécifique à leur implémentation et ne fait pas partie des spécifications. Le programme AirLocate ne semble pas utiliser le GATT pour la configuration, par exemple, selon LightBlue et d'autres programmes similaires que j'ai essayés.

Références:

  1. Spécification Bluetooth de base v4, Vol 3, Partie C, 11
  2. Vol 3, partie C, 18.1
  3. Vol 3, partie C, 18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. Vol 3, partie C, 18.2
20
slackhappy

Si vous posez cette question parce que vous souhaitez utiliser Core Bluetooth pour faire de la publicité en tant que iBeacon plutôt que d'utiliser l'API standard, vous pouvez facilement le faire en publiant un NSDictionary tel que:

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

Voir cette réponse pour plus d'informations.

6
Senseful

C’est très simple, elle annonce simplement une chaîne contenant quelques caractères conformes au standard iBeacon d’Apple. Vous pouvez vous référer au lien http://glimwormbeacons.com/learn/what-makes-an-ibeacon-an-ibeacon/

4
Amit Shelgaonkar

le profil iBeacon contient 31 octets, ce qui inclut les éléments suivants

  1. Préfixe - 9 octets - qui inclut les données adv et les données du fabricant
  2. UUID - 16 octets
  3. Majeur - 2 octets
  4. Mineure - 2 octets
  5. TxPower - 1 octet

 enter image description here

0
Ambi