使用 AltBeacon 解析 Estimote Nearable

Parsing Estimote Nearable using AltBeacon

我正在尝试使用 Altbeacon 解析 Estimote Nearable 数据包格式:

我有 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 转储工具捕获的十六进制示例:

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

有人可以指出我的 Beacon Lahyout 有什么问题吗?

尝试以下解析器表达式:

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")

编辑: 根据下面的评论,我修改了这里的表达式:

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")

编辑 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")

这可能有效也可能无效。以上假设问题中提供的 link 中定义的数据包格式 (https://github.com/sandeepmistry/node-bleacon/blob/master/estimote-sticker/estimote-sticker.js#L53) 是正确的,我已将其转换为偏移量 table 此处:

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

上面定义的布局将 return 一个具有单个标识符字段和 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 使用的格式),库可以正常工作开箱即用。

我为 OneBeacon 所做的是反编译 Estimote Android SDK 并查看纯源代码(他们没有费心最小化或混淆)以了解 Nearable 是如何解析。不幸的是,广播的数据非常不一致(几个字节偏移量用于不同的字段......)并且解析有点糟糕。抱歉,我的意思是它永远无法正确完成,因为字段重叠。不过祝你好运!