无法从 ble beacon 读取温度读数.. 现在我无能为力了。我想这需要一个超级英雄
Can't get temperature reading out of ble beacon .. at my wits end now. This needs a super-hero I guess
我有一个任务需要从 BLE 信标读取 2 个参数。文档严重缺乏,经过相当多的努力,我设法获得了一些关于从 BLE Beacon 读取数据的基本信息。
要读取的参数是
1) 传感器电池电压
2) 温度信标有一个内置的温度传感器。
我想我已经尝试了几乎所有流行的 Python BLE 库,但我似乎无法从信标读取温度。 "I think" 我可以读取电压。我之所以说 "I think" 是因为该值似乎与 minimal 文档中提供的值匹配。而且当我将信标放入充电器时,我可以看到该值上升 - 这表明它是电压读数。由于我无法读取温度(因为文档中提到的 UUID,该值似乎没有改变)。我已经尝试以描述的所有可能方式和方法启用传感器 - 通过编写 01:00 等。我花了相当多的时间来逆向工程这个东西。我 运行 一个数据包嗅探器并设法捕获了在信标和移动应用程序(他们有一个移动应用程序)之间传输的数据。但话又说回来,我无法弄清楚温度读数是如何在信标和应用程序之间传递的。让我把整个东西分成更小的块。
硬件:可以读取电压和温度的 BLE 信标。温度传感器内置于信标中。信标本身来自德州仪器,但温度、电压感应部分由第三方完成。他们为我们提供了一些最少的信息,但由于他们用英语交流有困难,所以很难理解一些句子。
获取数据的顺序是这样的
- 扫描信标
- 找到信标后连接到它
- 启用通知
- 设置通知间隔
- 获取电压和温度读数。
我已经能够快速完成前 4 个,"half" 第 5 个,即获取电压部分。当我说真正快时,我的意思是我当时几乎没有可用的文档就得到了那些东西。
根据我掌握的信息,数据位于这些 characteristics/UUIDs 中。另请注意,UUID 不是标准的 128 位,这导致我在使用某些库时出现问题。但经过一些尝试后,我使用句柄等 read/write 找到了它们。我打印的句柄和其他内容是我使用 PYGATT (A Python wrapper for gatttool 阅读的。
UUID 被标记为第 1、2、3、4 个参数,关于参数有以下说明
- A: 1 byte (2nd Param)
- B: Maj + Min values, 4 bytes (4th Param)
- C: 4 bytes (3rd Param)
- D: Enable/disable notification ( I have been able to turn this on )
- E: Set notification interval ( I have been able to set this and can notice the change in notification interval )
这是最小的文件,不会有大文件。它所做的就是这个——移动应用程序连接到信标,然后通知开始,移动应用程序检索温度读数。就像我提到的那样,我读取电压似乎没有问题,只是我卡在了温度上。我已经做了一个星期了。我想我已经尝试了几乎所有我能想到的方法。我什至列举了所有可写的特征并尝试写像 1 这样的数字(启用传感器?)。如果可能的话,我本可以立即为此提供赏金。我很少会因为一个问题而卡那么久。这让我有点发疯。我快要穷途末路了——我想是时候找一个超级英雄了——有人在吗? :) 如果有人能指出问题所在,我可以提供所需的每一点信息。我什至写了一个 cordova 应用程序……并尝试了我的 Android phone 中的一堆东西。我可以连接...写入特征,读取内容等,但温度准备就绪,不!它只是不会让步。我得到的只是同一组值(我使用 JSON.stringify 来显示 A、B 和 C)。我可以稍后再考虑字节顺序。我想这是一个较小的问题。
beacon与第三方手机APP通讯正常,可以正常读取温度信息。
我一直在查看 wireshark 数据,我相当确定在这个阶段正在传送温度数据。但是当我解码 "value" 时,它看起来像是电压。它提到了 l2cap,但我不确定这里是如何使用它来发送温度读数的(如果它首先使用它)。
更新:写入每个可写特征。在每个可写特性上写入 1、0100、2、7 等值。同时,我正在读取每个可读特征(在循环中)并与前一组值进行比较(只是 true/false)。这似乎是了解情况是否发生变化的一种快速简便的方法。不想冒险将十六进制转换为浮点数。我稍后可以弄清楚字节顺序。
从嗅探数据 (wireshark) 中,我只能看到信标上发生了 3 次写入。
我不完全确定,即使经过长时间的讨论,但通知的四个字节似乎用于电压和温度,因为温度很可能来自电压。
从这些值来看,这四个字节似乎代表浮点电压(如果您忽略 10^-38 的荒谬因素,因为只使用了 4 个字节而不是 8 个字节)。
由于通常温度 T 来自电阻率测量,其中电阻率 R 与电压 U 成正比(如果电流恒定),原则上您可以根据电压 U 计算温度 T。
问题在于 T(R) 是相对线性的,但并不完美(与假设为 U=RI 的 U(R) 相反)。因此,您可能需要绘制 T(U) 的值以找出他们正在使用的曲线。
更令人困惑的是,我只使用第三个字节的前五位和第四个字节的八位时得到了最好的结果。我不知道为什么会这样,可能还是有问题。
最好的选择是询问他们正在使用的函数 T(U)。如果他们可以并且会为您提供...
我有一个任务需要从 BLE 信标读取 2 个参数。文档严重缺乏,经过相当多的努力,我设法获得了一些关于从 BLE Beacon 读取数据的基本信息。
要读取的参数是
1) 传感器电池电压
2) 温度信标有一个内置的温度传感器。
我想我已经尝试了几乎所有流行的 Python BLE 库,但我似乎无法从信标读取温度。 "I think" 我可以读取电压。我之所以说 "I think" 是因为该值似乎与 minimal 文档中提供的值匹配。而且当我将信标放入充电器时,我可以看到该值上升 - 这表明它是电压读数。由于我无法读取温度(因为文档中提到的 UUID,该值似乎没有改变)。我已经尝试以描述的所有可能方式和方法启用传感器 - 通过编写 01:00 等。我花了相当多的时间来逆向工程这个东西。我 运行 一个数据包嗅探器并设法捕获了在信标和移动应用程序(他们有一个移动应用程序)之间传输的数据。但话又说回来,我无法弄清楚温度读数是如何在信标和应用程序之间传递的。让我把整个东西分成更小的块。
硬件:可以读取电压和温度的 BLE 信标。温度传感器内置于信标中。信标本身来自德州仪器,但温度、电压感应部分由第三方完成。他们为我们提供了一些最少的信息,但由于他们用英语交流有困难,所以很难理解一些句子。
获取数据的顺序是这样的
- 扫描信标
- 找到信标后连接到它
- 启用通知
- 设置通知间隔
- 获取电压和温度读数。
我已经能够快速完成前 4 个,"half" 第 5 个,即获取电压部分。当我说真正快时,我的意思是我当时几乎没有可用的文档就得到了那些东西。
根据我掌握的信息,数据位于这些 characteristics/UUIDs 中。另请注意,UUID 不是标准的 128 位,这导致我在使用某些库时出现问题。但经过一些尝试后,我使用句柄等 read/write 找到了它们。我打印的句柄和其他内容是我使用 PYGATT (A Python wrapper for gatttool 阅读的。
UUID 被标记为第 1、2、3、4 个参数,关于参数有以下说明
- A: 1 byte (2nd Param)
- B: Maj + Min values, 4 bytes (4th Param)
- C: 4 bytes (3rd Param)
- D: Enable/disable notification ( I have been able to turn this on )
- E: Set notification interval ( I have been able to set this and can notice the change in notification interval )
这是最小的文件,不会有大文件。它所做的就是这个——移动应用程序连接到信标,然后通知开始,移动应用程序检索温度读数。就像我提到的那样,我读取电压似乎没有问题,只是我卡在了温度上。我已经做了一个星期了。我想我已经尝试了几乎所有我能想到的方法。我什至列举了所有可写的特征并尝试写像 1 这样的数字(启用传感器?)。如果可能的话,我本可以立即为此提供赏金。我很少会因为一个问题而卡那么久。这让我有点发疯。我快要穷途末路了——我想是时候找一个超级英雄了——有人在吗? :) 如果有人能指出问题所在,我可以提供所需的每一点信息。我什至写了一个 cordova 应用程序……并尝试了我的 Android phone 中的一堆东西。我可以连接...写入特征,读取内容等,但温度准备就绪,不!它只是不会让步。我得到的只是同一组值(我使用 JSON.stringify 来显示 A、B 和 C)。我可以稍后再考虑字节顺序。我想这是一个较小的问题。
beacon与第三方手机APP通讯正常,可以正常读取温度信息。
我一直在查看 wireshark 数据,我相当确定在这个阶段正在传送温度数据。但是当我解码 "value" 时,它看起来像是电压。它提到了 l2cap,但我不确定这里是如何使用它来发送温度读数的(如果它首先使用它)。
更新:写入每个可写特征。在每个可写特性上写入 1、0100、2、7 等值。同时,我正在读取每个可读特征(在循环中)并与前一组值进行比较(只是 true/false)。这似乎是了解情况是否发生变化的一种快速简便的方法。不想冒险将十六进制转换为浮点数。我稍后可以弄清楚字节顺序。
从嗅探数据 (wireshark) 中,我只能看到信标上发生了 3 次写入。
我不完全确定,即使经过长时间的讨论,但通知的四个字节似乎用于电压和温度,因为温度很可能来自电压。
从这些值来看,这四个字节似乎代表浮点电压(如果您忽略 10^-38 的荒谬因素,因为只使用了 4 个字节而不是 8 个字节)。
由于通常温度 T 来自电阻率测量,其中电阻率 R 与电压 U 成正比(如果电流恒定),原则上您可以根据电压 U 计算温度 T。
问题在于 T(R) 是相对线性的,但并不完美(与假设为 U=RI 的 U(R) 相反)。因此,您可能需要绘制 T(U) 的值以找出他们正在使用的曲线。
更令人困惑的是,我只使用第三个字节的前五位和第四个字节的八位时得到了最好的结果。我不知道为什么会这样,可能还是有问题。
最好的选择是询问他们正在使用的函数 T(U)。如果他们可以并且会为您提供...