【问题标题】:Eddystone, what does getBeaconAdvertisementData(beacon) mean?Eddystone,getBeaconAdvertisementData(beacon) 是什么意思?
【发布时间】:2018-05-31 12:35:11
【问题描述】:

我有一个 Eddystone,我想获取加速度计值,但我不知道如何继续...我看到了,所以我们可以使用

从信标获取数据
beacon.getExtraDataFields()

但在我的情况下,即使我在 Eddistone 中激活了加速器发射,返回的值也是空的 所以我看到了这个帖子,:Getting packet data transferred from iBeacon android

但我的返回值是这样的:c03be53,我不知道这是什么意思...... 你能帮我检索加速器数据吗?

这是我的代码:

 ArrayList<BeaconParser> beaconParsers = new ArrayList<BeaconParser>();

        beaconParsers.add(new BeaconParser().setBeaconLayout(EDDYSTONE_UID_LAYOUT));

        Beacon beacon = null;
        for (BeaconParser parser : beaconParsers) {
            beacon = parser.fromScanData(scanRecord,
                    rssi, device);

            if (beacon != null) {
                if (beacon.getServiceUuid() == 0xfeaa) {
                    // This is Eddystone, which uses a service Uuid of 0xfeaa
                    Identifier eddystoneNamespaceId = beacon.getId1();
                    Identifier eddystoneInstanceId = beacon.getId2();

                    WirelessDevice wirelessDevice = new WirelessDevice(null, beacon.getRssi(), null, eddystoneNamespaceId.toString());
                    mainActivity.addDevice(wirelessDevice);


                    byte[] bytes = parser.getBeaconAdvertisementData(beacon);

谢谢

【问题讨论】:

  • 你有什么样的信标来发送加速器数据?由于这是一项非标准功能,请附上信标文档的 sn-p 或指向它们的链接。
  • @davidgyoung 谢谢你的回答,我有一个来自 BNBeacon 的信标(蓝色网络信标),我有这个模型:bnbeacon.com/Beacon_Full.html 文档是在钱包里提供的,所以我不知道我是否可以给它:/ 在这里,我的 Eddystone 配置为 Eddystone-UID,我应该将其配置为 Eddystone-TLM 吗?我有点迷路了:')

标签: android accelerometer beacon altbeacon eddystone


【解决方案1】:

没有标准方法可以使用包括 Eddystone-TLM 在内的任何 Eddystone 格式传输加速度计数据。 Eddystone-TLM 包含信标温度字段,但不包含加速度计读数。

问题下方评论中链接的 BNBeacon 文档仅在此声明中提到加速度计:“Intègre un accéléromètre, un vibreur et un buzzer 90 dB”没有关于加速度计功能的文档(也许它只是触发信标打开?),或者即使它的传感器输出完全暴露。输出可能会以非标准方式以某种方式编码到标准信标字段中。但如果没有进一步的制造商文件,那只是猜测。 如何访问加速度计数据可能是制造商必须回答的问题。

parser.getBeaconAdvertisementData(beacon); 将简单地返回信标数据包的原始字节这是为信标发射器设计的,而不是用于一般数据访问。 使用解析字段之一可以更轻松地访问相同的信息,例如 beacon.getId1()beacon.getId2()beacon.getDataFields().get(0) 等。后一种访问方法使您可以访问信标的已解析字段布局。

【讨论】:

  • 好的,谢谢,我联系了我的制造商,他告诉我他不了解 AndroidStudio,所以不知道可用的库。于是他让我做一个原生程序……有什么办法可以捕捉到Data,Eddystone的十六进制损失?
  • 是的,如果数据被宣传,您可以访问它。 “可以将信标配置为在信标广告数据包中传输加速度计数据吗?如果可以,它是哪种数据包类型以及数据包出现在哪里?”如果制造商可以提供这两个问题的答案,那么编写代码来访问这些信息将非常容易。
  • 我联系了制造商,他告诉我 Eddystone 的输出数据是十六进制格式。以下是每个值的长度: · 状态值:1 个八位字节 · Mac 地址:6 个八位位组 · 加速度值:6 个八位位组(x:2 八位位组 y:2 八位位组 z:2 八位位组) · 温度值:2 个八位位组 · 功率值:1八位字节·位置数据:1个八位字节
  • 嗯,还有一点要继续,但不多——制​​造商让你很难受。这表明 MAC 地址是在 Eddystone 信标帧之一中编码的。首先,通过 didRangeBeaconsInRegion() 方法中的 beacon.getBluetoothAddress() 方法获取信标的 mac 地址。这将显示一个 6 字节模式。您需要在信标数据包的正文中找到此模式,并查看哪个有它。把parser.getBeaconAdvertisementData(beacon)的输出转换成十六进制字符串,看看能不能找到这6个字节。
  • 您可以使用stackoverflow.com/a/9855338/1461050 之类的代码将parser.getBeaconAdvertisementData(beacon) 的输出转换为十六进制字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2017-06-11
  • 2018-03-05
  • 2023-03-27
  • 1970-01-01
  • 2013-03-09
  • 2020-05-01
相关资源
最近更新 更多