Android 信标库 Eddystone 遥测。温度
Android Beacon Library Eddystone Telemetry. Temperature
Android 版本。 > 4.3
标准 Android 信标库
估计信标。
Eddystone-UID包
遥测包。
我正在尝试从 Eddystone-UID 包传输的遥测包中读取温度传感器传输。根据 Android 信标库中的 Eddystone [遥测] 示例,我可以成功读取温度传输的 beacon.getExtraDataFields().get(2) 数据。此数据根据温度打印为 4 位或 5 位数字。
我被告知信标温度传感器传输一个 8:8 定点数...读取 beacon.getExtraDataFields().get(2) 然后除以 256 我得到以摄氏度为单位的温度读数。然而,一旦温度超过 0 degC 变为负值,我就会得到很大的差异。论坛中的研究似乎表明它与带符号的 8:8 固定符号数学和转换为十进制有关。虽然我理解 8:8 定点符号概念,但我似乎无法找到有关如何使用 Android 信标库方法读取负定点并转换为负 degC 的参考。
[注意:Estimote 的 Android SDK 和他们的信标应用程序有同样的问题......他们通过更新他们的 SDK 解决了这个问题......我使用的是 Android 库而不是 Estimote SDK ]
非常感谢指导。
下面的代码用于将编码的 Eddystone 遥测温度场转换为摄氏度。这是取自Locate Android app, which also uses the Android Beacon Library。此代码已使用 Radius Networks 的 Eddystone 信标进行了测试。
long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8);
double temperature = unsignedTemp > 128 ?
unsignedTemp - 256 :
unsignedTemp +(beacon.getExtraDataFields().get(2) & 0xff)/256.0;
你可以用你手头的信标试试这个转换公式。如果您发现它不起作用,也可以尝试使用定位应用程序以确保您看到相同的内容。如果是这种情况,则编码值可能不完全符合 Eddystone 规范。
我将此方法与 davidgyoung 转换公式一起使用,以从信标检索温度,同时转换为带两位小数的浮点数:
public static float getTemperatureFromBeacon(Beacon beacon) {
long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8);
double temperatureDouble = unsignedTemp > 128 ?
unsignedTemp - 256 :
unsignedTemp + (beacon.getExtraDataFields().get(2) & 0xff) / 256.0;
float temperature = (float) Math.round(temperatureDouble * 100) / 100;
return temperature;
}
Android 版本。 > 4.3 标准 Android 信标库 估计信标。 Eddystone-UID包 遥测包。
我正在尝试从 Eddystone-UID 包传输的遥测包中读取温度传感器传输。根据 Android 信标库中的 Eddystone [遥测] 示例,我可以成功读取温度传输的 beacon.getExtraDataFields().get(2) 数据。此数据根据温度打印为 4 位或 5 位数字。
我被告知信标温度传感器传输一个 8:8 定点数...读取 beacon.getExtraDataFields().get(2) 然后除以 256 我得到以摄氏度为单位的温度读数。然而,一旦温度超过 0 degC 变为负值,我就会得到很大的差异。论坛中的研究似乎表明它与带符号的 8:8 固定符号数学和转换为十进制有关。虽然我理解 8:8 定点符号概念,但我似乎无法找到有关如何使用 Android 信标库方法读取负定点并转换为负 degC 的参考。
[注意:Estimote 的 Android SDK 和他们的信标应用程序有同样的问题......他们通过更新他们的 SDK 解决了这个问题......我使用的是 Android 库而不是 Estimote SDK ]
非常感谢指导。
下面的代码用于将编码的 Eddystone 遥测温度场转换为摄氏度。这是取自Locate Android app, which also uses the Android Beacon Library。此代码已使用 Radius Networks 的 Eddystone 信标进行了测试。
long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8);
double temperature = unsignedTemp > 128 ?
unsignedTemp - 256 :
unsignedTemp +(beacon.getExtraDataFields().get(2) & 0xff)/256.0;
你可以用你手头的信标试试这个转换公式。如果您发现它不起作用,也可以尝试使用定位应用程序以确保您看到相同的内容。如果是这种情况,则编码值可能不完全符合 Eddystone 规范。
我将此方法与 davidgyoung 转换公式一起使用,以从信标检索温度,同时转换为带两位小数的浮点数:
public static float getTemperatureFromBeacon(Beacon beacon) {
long unsignedTemp = (beacon.getExtraDataFields().get(2) >> 8);
double temperatureDouble = unsignedTemp > 128 ?
unsignedTemp - 256 :
unsignedTemp + (beacon.getExtraDataFields().get(2) & 0xff) / 256.0;
float temperature = (float) Math.round(temperatureDouble * 100) / 100;
return temperature;
}