BM2蓝牙汽车电池电压监控协议

逆向工程 蓝牙
2021-06-26 20:24:59

我打开这个问题,因为为这个 BLE 电压监视器创建一个开源应用程序会很好:

https://www.aliexpress.com/item/32794632957.html

http://www.quicklynks.com/pro_show.php?id=159

我认为协议很容易理解,但我在数据中找不到任何类似的模式。我用 gatttool 收集了 BLE 数据:

[LE]> connect F8:30:02:2D:4D:9C
Attempting to connect to F8:30:02:2D:4D:9C
Connection successful
Notification handle = 0x002e value: b4 db ec df bc dc 19 b5 d6 0f fa e1 cf 9b 79 44
Notification handle = 0x002e value: c0 fc fd 6f c3 ad 32 9a 56 43 39 57 91 16 ad 90
Notification handle = 0x002e value: 09 90 cf 1d 17 59 17 6e 8a 40 ca 8f ea 6b e8 69
Notification handle = 0x002e value: 8a b3 b1 26 3d 82 8c 56 6e 9e 55 0b fd c7 e4 a2
Notification handle = 0x002e value: 56 f4 19 a3 d2 ff 96 de a0 93 0b d7 78 d9 8a d8
Notification handle = 0x002e value: 77 88 82 c5 85 4d 75 0b bb ed 68 22 45 b3 99 3f
Notification handle = 0x002e value: 9c c9 37 d7 0c f9 34 db ca cd 80 db 23 ed d7 eb
Notification handle = 0x002e value: 33 22 c8 59 be 5a 2e cb 0f 88 6b 6d d5 09 fe a6
Notification handle = 0x002e value: 90 8e 97 ce be 46 f0 be 0a 60 d3 44 a6 3a 06 7e
Notification handle = 0x002e value: d7 6f d8 81 71 a0 2f 1e 86 ad a4 f1 a6 07 57 37
Notification handle = 0x002e value: b9 61 70 6e 4a a0 c2 ba 56 ad 64 ef e1 8b 32 bc
Notification handle = 0x002e value: f0 09 9a cd ba 03 98 5c c4 14 bd 60 50 07 67 a2
Notification handle = 0x002e value: 12 5c a7 99 b9 0d 8d 55 1c a7 42 d6 48 21 92 50
Notification handle = 0x002e value: 2e 16 c9 b1 60 ca c7 a2 0f 20 b0 85 77 e2 31 b0

电压设置为 18.00V(有时读数为 18.01V)。十六进制中的 18 是 12,搜索 12 我只找到了一次。也许数据已编码?在这种情况下,我认为解码协议几乎是不可能的。

1个回答

看起来该工具能够测量 6 到 20v。

所以我们必须以某种方式将浮点数编码到数据中。

每条消息 16 字节。

我将做一个稍微明智的猜测,我们有一个 4 字节的字段,然后是 6 个 2 字节的字段。半精度(16 位)IEEE 浮点数?它可以多次采样电压并允许应用程序求平均值。

既然你有这个应用程序,除了他们应用程序显示的电压之外,还有其他可能来自设备的值吗?这将帮助我们限制我们正在寻找的字段数量。

您能否从设备上发布一堆读数,理想情况下,它与电池断开连接,读数为零,然后连接到电池,然后再次断开连接。那是我们可以理解当电压为 0 时读数的样子。100 条消息会很棒。