Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AltBeacon解析Estimote Nearable_Altbeacon_Estimote_Beacon - Fatal编程技术网

使用AltBeacon解析Estimote Nearable

使用AltBeacon解析Estimote Nearable,altbeacon,estimote,beacon,Altbeacon,Estimote,Beacon,我正在尝试使用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 0

我正在尝试使用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"));
我使用此资源了解数据包格式:


有人能指出我的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("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")
编辑:根据下面的评论,我修改了这里的表达:

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:基于注释中报告的此字节序列:

020104030F1817FF5D01018FC81EBFBEBB57D30482855135FF00BD580157

尝试以下表达式:

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("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")
这可能有效,也可能无效。以上假设问题()中提供的链接中定义的数据包格式是正确的,我已将其转换为偏移表:

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使用的格式),库将在开箱即用。

我做的是反编译估计的Android SDK并查看普通源代码(他们没有费心去最小化或混淆)来查看Nearable是如何解析的。不幸的是,广播的数据非常不一致(几个字节的偏移量用于不同的字段…)而且解析的正确性有点糟糕。抱歉,我的意思是,由于字段重叠,解析永远不会正确。但是祝你好运!

你好,谢谢你的回答。你给出的表达式抛出了一个无法解析的异常。这是我的工作异常:((“m:0-2=5d0101,I:3-11,d:12,d=13:20,p:21-21”);但如果我查看转储,我可以看到IBeacon的m:2-3=0215,而估计值5D01的延迟更大:m:4-5。我是否遗漏了什么?我不关心数据的正确解码,我可以稍后再做,但我根本无法匹配数据包……请参阅对我答案的编辑中的修订布局建议。表达式仍然与任何信标都不匹配s、 …我不确定这部分:"m2-6=02155d0101。为什么要匹配iBeacon的开头?不应该是m:4-6=5d0101吗?另外,对于m:4-6=5d0101,altbeacon不匹配任何内容…抱歉,我没有任何一个信标,所以我在这里有点盲目。如果你能为我做以下操作,我可能会提供更多帮助。在你的代码中添加一行设置
beaconManager.setDebug(true);
然后在扫描信标时捕获一个LogCat输出。查找如下所示的行:
D/BeaconParser(11355):这不是匹配的信标公告。(应该是ac。我看到的字节是:0201061AFF4C00021507701D2FA844B429C161417DABC159D00010001C20000000000000000000000000000000
,然后在你的问题中粘贴其中一个。所以我收到这样的消息:04-24 12:30:41.467 22170-22449/org.altbeacon.beaconreference D/BeaconParser:这不是matching Beacon广告。在偏移量11处期待5d 01,在偏移量13处期待01。我看到的字节是:020104030F1817FF5D01018FC81EBFBEBB57D30482855135FF00BD5801570000000000000000000000000000000000000000'你能确认中的解析是准确的吗?特别是功率解析,我似乎不理解,并且在我的实现中,我得到的是8 dBm,而不是4 dBm……在我看来,它与Estimote SDK中的Java代码几乎完全对应。如果您认为您的实现中存在错误,但Estimote应用程序显示了正确的信息,我的建议是非常仔细地检查您是如何解析位的。Java以其位方式而臭名昭著操作处理(例如算术移位与二进制移位、字节与整数之间的有符号转换等)。