2016-04-21 3 views
3

Я пытаюсь разобрать формат пакета Estimote Nearable с помощью Altbeacon:Синтаксический Estimote Nearable с помощью AltBeacon

У меня есть ссылка на IBeacon:

// Apple iBeacon 
beaconManager.getBeaconParsers().add(new BeaconParser() 
      .setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); 

А вот образец гекс с я захватил с моим hci dump tool:

04 3E 2A 02 01 03 01 47 CC 3B D4 23 DF 1E 02 01 04 1A FF 4C 
00 02 15 D0 D3 FA 86 CA 76 45 EC 9B D9 6A F4 49 78 49 E0 E7 
74 4D 13 BF BD 

Вы можете четко видеть 02 15 байт, которые соответствуют этому маяковому формату;

Сейчас я пытаюсь соответствовать Estimote Nearable:

Формат пакета:

04 3E 2B 02 01 03 01 47 50 19 A9 6E DF 1F 02 01 04 03 03 0F 
18 17 FF 5D 01 01 49 78 49 E0 E7 74 4D 13 04 01 90 61 AF FF 
01 41 46 00 57 B9 

Но я не могу получить что-либо с помощью этого кода:

 beaconManager.getBeaconParsers().add(new BeaconParser() 
      .setBeaconLayout("s:4-5=5d01,m:6-6=01,i:7-15,p:25-25,d:15-26")); 

я использовал этот ресурс для понимания формата пакета: https://github.com/sandeepmistry/node-bleacon/blob/master/estimote-sticker/estimote-sticker.js#L53

Может кто-нибудь указать, что не так с моим маяком Лахут?

ответ

1

Попробуйте следующее выражение парсер:

new BeaconParser() 
     .setBeaconLayout("m0-2=5d0101,i=3-11,d=12,d=13,d=14-15,d=16,d=17,d=18,d=19,d=20,p=21") 

EDIT: Основываясь на комментариях ниже, я пересмотрел выражение здесь:

new BeaconParser() 
     .setBeaconLayout("m2-6=02155d0101,i=7-14,d=16-16,d=17-17,d=18-19,d=20-20,d=21-21,d=22-22,d=23-23,d=24-24,p=25-25") 

EDIT 2: На основании этого байта последовательность представлена ​​в комментариях:

02010403030f1817ff5d01018fc81ebfbebb57d30482855135ff00bd580157

Попробуйте это выражение:

new BeaconParser() 
     .setBeaconLayout("m1-2=0101,i=3-11,d=12-12,d=13-13,d=14-15,d=16-16,d=17-17,d=18-18,d=19-19,d=20-20,p=21-21") 

Это может или не может работать. Выше, предполагает формат пакет, определенный в ссылке, подаваемой в вопросе (https://github.com/sandeepmistry/node-bleacon/blob/master/estimote-sticker/estimote-sticker.js#L53) является правильным, который я превращал в таблицу здесь смещений:

0-1: 5d01 (Bluetooth SIG manufacturer id for Estimote) 
2: 01 (nearable protocol version) 
3-11: identifier 
12: firmware version 
15: temperature 
14-15: battery and moving indicator 
16: acceleration x 
17: acceleration y 
18: acceleration z 
19: current motion state duration 
20: previous motion state duration 
21: power and firmware state 

макет определен выше будет возвращать экземпляр радиомаяка с одним идентификатором поля поля и 8 данных, отображающие в:

Data Field # Meaning 
1    firmware version 
2    temperature 
3    battery and moving indicator 
4    acceleration x 
5    acceleration y 
6    acceleration z 
7    current motion state duration 
8    previous motion state duration 

Вы должны декодировать значение полей данных должным образом из исходных значений проанализированных из пакетов.

Вышеуказанный анализатор, вероятно, не будет правильно оценивать расстояния, так как поле калибровки мощности (p = 21) не выглядит в стандартном формате (например, используется AltBeacon, iBeacon и Eddystone), что библиотека будет работать с из коробки.

+0

Здравствуйте, благодарю вас за ответ. Выражение, данное вами, вызывает исключение синтаксического анализа. Вот мой рабочий: («m: 0-2 = 5d0101, i: 3-11, d: 12, d = 13: 20, p: 21-21»); Но если я посмотрю на свалку, я вижу, что у IBeacon есть m: 2-3 = 0215, а Estimotes 5D01 еще более задерживается: m: 4-5. Я что-то пропустил? Меня не волнует правильное декодирование данных, я могу это сделать позже, но я не могу полностью сопоставить пакет ... – Veaceslav

+0

См. Исправленное предложение макета в EDIT для моего ответа. – davidgyoung

+0

Выражение по-прежнему не соответствует никаким маякам ... Я не уверен в этой части: «m2-6 = 02155d0101. Почему вы согласны с началом с iBeacon? Не должно быть m: 4-6 = 5d0101? Кроме того, с m: 4-6 = 5d0101 altbeacon ничего не соответствует ... – Veaceslav

0

Что я сделал для OneBeacon, я должен был декомпилировать Android SDK Estimote и посмотреть в простом исходном коде (который они не удосужились свести к минимуму или запутать), чтобы увидеть, как разбирается синтаксический анализ.К сожалению, широковещательные данные очень несовместимы (несколько байтовых смещений используются для разных полей ...), и синтаксический анализ выглядит довольно ужасно. Извините, я имел в виду, что это никогда не будет сделано правильно, из-за перекрытия полей. Но удачи!

+0

Можете ли вы подтвердить, что разбор в https://github.com/sandeepmistry/node-bleacon/blob/master/estimote-sticker/estimote -sticker.js # L53 является точной? В частности, синтаксический анализ не кажется мне понятным, и в моей реализации я получаю 8 дБм вместо 4 ... – Veaceslav

+0

Мне кажется, что это почти точный аналог кода Java внутри Estimote SDK. Если вы считаете, что у вас есть ошибка в вашей реализации, но приложение Estimote показывает правильную информацию, мой совет будет состоять в том, чтобы тщательно проверить, как вы разбираете биты. Java известен своей битовой обработкой операций (например, арифметические сдвиги против двоичных сдвигов, подписанное преобразование между байтом и int и т. Д.). –

Смежные вопросы