Apa itu Profil Bluetooth iBeacon

150

Saya ingin membuat iBeacon sendiri dengan beberapa perangkat pengembang energi rendah bluetooth. Apple belum merilis spesifikasi untuk iBeacons, namun beberapa pengembang perangkat keras telah merekayasa balik iBeacon dari kode Sampel AirLocate dan mulai menjual kit dev iBeacon.

Jadi apa Profil Bluetooth iBeacon?

Bluetooth Low Energy menggunakan GATT untuk penemuan layanan profil LE. Jadi saya pikir kita perlu mengetahui Handle Atribut, Jenis Atribut, Nilai Atribut, dan mungkin Izin Atribut dari atribut iBeacon. Jadi untuk iBeacon dengan UUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 nilai utama 1 dan nilai minor 1 seperti apa layanan profil Bluetooth GATT?

Inilah beberapa asumsi yang saya buat dari diskusi di forum Apple dan melalui dokumen.

  1. Anda hanya perlu melihat layanan profil (GATT) perangkat Bluetooth untuk mengetahui itu adalah iBeacon.

  2. Kunci Mayor dan Kecil dikodekan di suatu tempat di layanan profil ini

Inilah beberapa perusahaan dengan iBeacon Dev Kits yang tampaknya sudah mengetahui hal ini:

Semoga pada waktunya nanti kita akan memiliki profil yang diposting di Bluetooth.org seperti ini: https://www.bluetooth.org/en-us/specification/adopted-specifications

PaulWoodIII
sumber
sebenarnya sekarang saya sudah turun ke apa nilai atribut 4
PaulWoodIII
@ Dan1One Saya telah mereplikasi layanan menggunakan Light Blue, kemudian menggunakan kode sampel Apple AirLocate Saya tidak bisa menjangkau layanan duplikat Saya pikir ada sesuatu yang lebih, Juga Light Blue tidak memiliki Attribute Handle terdaftar
PaulWoodIII
Apakah Anda mencari cara untuk membuat iBeacon dengan CBPeripheralManager (yang berjalan di latar belakang), atau perangkat lunak (non-iOS) lain, atau perangkat keras? Ini akan mengarah pada detail yang diperlukan.
Wain
@ Butir saya mencoba untuk memakai perangkat keras saya sendiri sebagai catatan paragraf pertama. Tetapi seperti yang saya catat dalam pertanyaan terkait, ini berpotensi berguna untuk menjawab pertanyaan terkait menggunakan CBPeripheralManager yang mengiklankan iBeacon di latar belakang
PaulWoodIII
1
Bagus! dapatkah Anda membagikan dokumentasi itu di sini untuk programmer masa depan, ketika saya mengajukan pertanyaan pada tahun 2013 itu pasti belum ada
PaulWoodIII

Jawaban:

228

Untuk iBeacon dengan ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, mayor 0, minor 0, dan Tx Power -59RSSI, paket iklan BLE yang ditransmisikan terlihat seperti ini:

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

Paket ini dapat dirinci sebagai berikut:

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

Bagian penting dari paket itu adalah Iklan Bluetooth, yang dapat dipecah seperti ini:

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

Perangkat Bluetooth LE yang dapat dikonfigurasi untuk mengirim iklan tertentu dapat menghasilkan paket di atas. Saya telah mengonfigurasi komputer Linux menggunakan Bluez untuk mengirim iklan ini, dan perangkat iOS7 yang menjalankan kode uji AirLocate Apple mengambilnya sebagai iBeacon dengan bidang yang ditentukan di atas. Lihat: Gunakan BlueZ Stack Sebagai Periferal (Pengiklan)

Blog ini memiliki detail lengkap tentang proses rekayasa terbalik.

davidgyoung
sumber
Ini bagus! Persis apa yang saya cari. Tetapi adakah yang bisa menjelaskan bagaimana saya bisa menghitung checksum?
Benjamin Groener
Saya punya pertanyaan lain bagi Anda untuk membantu kami menyelesaikan spesifikasi sedikit lebih banyak. Apa yang tampaknya menjadi interval siaran yang benar dalam ms? Saya memperhatikan menggunakan kode instrumen texas yang saya gunakan sebagai dasar untuk iBeacon saya membuat tindakan aplikasi Airlocate apel tidak konsisten saat menampilkan daftar iBeacons terdekat.
PaulWoodIII
Apakah UUID / proximityUUID profil BLE khusus untuk iBeacon atau apakah sesuai dengan produsen perangkat? Apa metode yang disukai untuk membedakan antara perangkat iBeacon: Alamat BT MAC, UUID atau nilai-nilai utama / minor?
nickaknudson
David, apakah Anda dapat mengonfigurasi perangkat iOS dengan paket iklan tertentu saat menggunakan Core Bluetooth GATT APIs? Saya tidak dapat menemukan opsi. Anda dapat menentukan UUID khusus untuk Layanan dan Karakteristik tetapi tidak untuk iklan.
miguel
1
@ReinaldoJunior AD = Data Iklan. Lihat referensi dalam jawaban oleh slackhappy.
RenniePet
47

Tampaknya didasarkan pada data iklan, khususnya data pabrikan:

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>
  • Pengenal Perusahaan Apple (Little Endian), 0x004c
  • tipe data, 0x02 => iBeacon
  • panjang data, 0x15 = 21
  • uuid: 585CDE931B0142CC9A1325009BEDC65E
  • utama: 0000
  • minor: 0000
  • kekuatan terukur pada 1 meter: 0xc5 = -59

Saya memiliki skrip node.js ini bekerja di Linux dengan contoh aplikasi AirLocate contoh.

sandeepmistry
sumber
Sayangnya skrip tidak tersedia lagi. Maukah Anda berbagi lagi?
Thomaschaaf
@Thomaschaaf maaf saya dihapus di sini adalah tautan ke versi lama di Github. Saya juga memperbarui bleacon untuk tidak memerlukan pemijahan hcitool / hciconfig.
sandeepmistry
"mengukur daya pada 1 meter: 0xc5 = -59" bagaimana Anda menghitung dari 0xc5 hingga -59?
andreasbecker.de
@ andreasbecker.de Anda mengambil pelengkap
keduanya
@simpan tetap terhubung ke skrip node.js sekarang rusak.
tedyyu
20

Hanya untuk mendamaikan perbedaan antara jawaban sandeepmistry dan jawaban davidgyoung:

02 01 1a 1a ff 4C 00

Merupakan bagian dari spesifikasi format data periklanan [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

Hilang dari AD adalah definisi Layanan [5]. Saya pikir protokol iBeacon itu sendiri tidak memiliki hubungan dengan GATT dan penemuan layanan standar. Jika Anda mengunduh program iBeacon RedBearLab, Anda akan melihat bahwa mereka menggunakan GATT untuk mengonfigurasi parameter iklan, tetapi ini tampaknya khusus untuk implementasinya, dan bukan bagian dari spesifikasi. Program AirLocate tampaknya tidak menggunakan GATT untuk konfigurasi, misalnya, menurut LightBlue dan atau program serupa lainnya yang saya coba.

Referensi:

  1. Core Bluetooth Spec v4, Vol 3, Bagian C, 11
  2. Vol 3, Bagian C, 18.1
  3. Vol 3, Bagian C, 18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. Vol 3, Bagian C, 18.2
malas
sumber
Terima kasih @slackhappy, saya telah memperbarui jawaban saya. Header 2 byte adalah tipe data 0x02, 0x15 = 21 panjang data.
sandeepmistry
terima kasih @slackhappy ini bagus, tetapi bisakah saya mengajukan pertanyaan bodoh? Jika saya ingin mengirimkan beberapa pesan seperti "Datang untuk minum kopi gratis" atau sesuatu seperti itu, apakah saya hanya akan mengganti FFdalam contoh Anda dengan nilai HEX dari string saya? (dan juga memperbarui panjang struktur AD ke suite?)
Mark
6

Jika alasan Anda mengajukan pertanyaan ini adalah karena Anda ingin menggunakan Core Bluetooth untuk beriklan sebagai iBeacon daripada menggunakan API standar, Anda dapat dengan mudah melakukannya dengan mengiklankan NSDictionary seperti:

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

Lihat jawaban ini untuk informasi lebih lanjut.

Masuk akal
sumber
0

Profil iBeacon berisi 31 Bytes yang mencakup yang berikut

  1. Awalan - 9 Bytes - yang meliputi data adv dan data Produsen
  2. UUID - 16 Bytes
  3. Mayor - 2 Bytes
  4. Kecil - 2 Bytes
  5. TxPower - 1 Byte

masukkan deskripsi gambar di sini

Ambi
sumber