Ric*_*rdo 37 linux bluetooth bluez
如何查看连接的蓝牙设备的电池电量?该设备显示Android上的电池电量,因此我假设该设备支持基于GATT的电池服务.但是,通过在bluetoothctl中输入"menu gatt",然后使用"list-attributes [dev]"列出设备的GATT属性,则不显示任何内容.
一个类似的问题被张贴到SO但OP似乎已经发现,不为我工作的解决方案.当我在bluetoothctl中运行"info [dev]"时,我没有看到电池服务的UUID.
我更喜欢在命令行上运行并且与驱动程序无关的解决方案.
如果这个问题应该发布在SuperUser上,请告诉我.
cls*_*lst 28
这可能有点晚了,但对我来说,这个 Python 项目运行良好:
https://github.com/TheWeirdDev/Bluetooth_Headset_Battery_Level
我只需要为我的无名 X5 耳机将第 57 行的端口更改为 3。如果它挂起或出现“连接被拒绝”的错误,请尝试不同的端口。
Python 程序通过 RFCOMM 使用 AT 命令,并且在 Pulseaudio 使用 A2DP 接收器(我的重新连接)时应该可以工作。需要 Python 3,因为 2 没有 BT-Serial 套接字。Windows 可能无法运行,因为它缺少 bluez。它基本上与此处的 Pulseaudio hack 执行相同的操作:https ://stackoverflow.com/a/56390625/920122
如果您想查看交换的命令,请尝试我的调试分支:https : //github.com/clst/Bluetooth_Headset_Battery_Level
小智 16
对我来说,在终端工作中运行它- upower --dump
VeR*_*eRo 13
在开发和目前可用的工具之前,这是一个非常好的问题.
简答(2018年10月)
你必须自己写!它不会是终端中的一个班轮.我将在Python中为自己编写这个,但是C有一些文档,所以如果你熟练使用C,那就去吧.
答案很长,但它更像是一个推荐的起点:
bluetoothctl读取属性并将数据发送到蓝牙设备.绝对检查视频信息,你会发现很棒的链接和参考:https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt请务必查看移动设备上如何回答此问题.对于Android,它是BAS(电池服务):https://android.stackexchange.com/questions/106073/displaying-bluetooth-gadgets-battery-status-on-the-phone
Oli*_*erM 10
您在GATT特性列表中看不到Battery Level的原因是因为从Bluez v5.48开始,他们将特定的GATT特性移入DBUS org.bluez.Battery1接口。
在命令行中:
bluetoothctldbus-send --print-reply=literal --system --dest=org.bluez /org/bluez/hci0/dev_<mac_address_of_your_ble_peripheral> org.freedesktop.DBus.Properties.Get string:"org.bluez.Battery1" string:"Percentage"就我的BLE外设而言,具有以下MAC地址C3:41:A6:C8:93:42:
$ dbus-send --print-reply=literal --system --dest=org.bluez /org/bluez/hci0/dev_C3_41_A6_C8_93_42 org.freedesktop.DBus.Properties.Get string:"org.bluez.Battery1" string:"Percentage
variant byte 94
Run Code Online (Sandbox Code Playgroud)
注意:您可能会使用Bluez DBUS API扫描并连接到设备。
一种可能的方法(虽然很hacky)是在日志中进行 grep 操作:
journalctl -b --user-unit pulseaudio -g "Battery Level" -o cat
Run Code Online (Sandbox Code Playgroud)
(-b仅显示当前启动中的信息。显然以前启动中的信息是不相关的)
在我的机器上,例如输出
Battery Level: 70%
Battery Level: 70%
Battery Level: 70%
Battery Level: 70%
Battery Level: 70%
Battery Level: 60%
Battery Level: 60%
Run Code Online (Sandbox Code Playgroud)
选择最后一行(可以通过附加 来完成|tail -n 1)。
该解决方案不区分蓝牙设备当前是否已连接,或者如果有多个蓝牙设备,则不区分是哪一个。
替代方案包括运行,然后使用接受的答案/sf/answers/4179689601/bluetoothctl disconnect中的脚本来获取电池电量,然后再次运行。如果您当前已连接,这通常是不可接受的,但它是有效的。bluetoothctl connect
另一种选择(如果适合您)是使用 bluez 包的实验性功能。请参阅https://askubuntu.com/a/1420501/996767。
这是一种通过pulseaudio日志通过一些技巧获取电池电量的方法。我的蓝牙耳机使用专有的Apple HFP AT命令,HFP/A2DP协议由pulseaudio直接处理。似乎获得这些值的唯一方法是通过脉冲。
| 归档时间: |
|
| 查看次数: |
14424 次 |
| 最近记录: |