使用 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 是如何解析。不幸的是,广播的数据非常不一致(几个字节偏移量用于不同的字段......)并且解析有点糟糕。抱歉,我的意思是它永远无法正确完成,因为字段重叠。不过祝你好运!
我正在尝试使用 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 是如何解析。不幸的是,广播的数据非常不一致(几个字节偏移量用于不同的字段......)并且解析有点糟糕。抱歉,我的意思是它永远无法正确完成,因为字段重叠。不过祝你好运!