Para mí, ejecutar esto en la terminal funcionó:
upower --dump
No ve el nivel de batería en la lista de características de GATT desde Bluez v5.48 porque esta característica específica de GATT se movió a DBUS org.bluez.Battery1
interfaz.
Desde la línea de comando:
- Conéctese a su dispositivo BLE de destino con
bluetoothctl
- Y luego solicite DBUS ejecutando:
dbus-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"
En mi caso con mi periférico BLE con la siguiente dirección 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
Nota:potencialmente podría escanear y conectarse a su dispositivo usando la API Bluez DBUS.
Esta es una gran pregunta, por delante del desarrollo y las herramientas que están disponibles en este momento.
La respuesta corta (en octubre de 2018)
¡Tienes que escribirlo tú mismo! No será un trazador de líneas en la terminal. Voy a escribir esto por mí mismo en Python, pero C tiene un poco más de documentación, así que si eres hábil con C, hazlo.
La respuesta larga , pero es más un punto de partida recomendado:
- Tony D:https://youtu.be/5fQR2PHMDWE?t=4644 logró usar
bluetoothctl
para leer atributos y enviar datos a un dispositivo bluetooth. Definitivamente revise la información del video, encontrará excelentes enlaces y referencias:https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt - Szymon Janc:https://youtu.be/VMDyebKT5c4 desarrollador y colaborador de LINUX Bluetooth Stack
-
Definitivamente mira cómo se responde esta pregunta en los dispositivos móviles. Para Android es el BAS (servicio de batería):https://android.stackexchange.com/questions/106073/displaying-bluetooth-gadgets-battery-status-on-the-phone
Puede que sea un poco tarde para la fiesta, pero para mí este proyecto de Python ha funcionado bien:
https://github.com/TheWeirdDev/Bluetooth_Headset_Battery_Level
Solo tuve que cambiar el puerto en la línea 57 a 3 para mi auricular X5 sin nombre. Si se bloquea o se produce un error con "conexión rechazada", intente con un puerto diferente.
El programa Python usa comandos AT a través de RFCOMM y debería funcionar mientras Pulseaudio usa el sumidero A2DP (el mío se vuelve a conectar). Se necesita Python 3 ya que 2 no tiene enchufes BT-Serial. Windows probablemente no funcionará ya que carece de bluez. Básicamente hace lo mismo que el truco Pulseaudio aquí:https://stackoverflow.com/a/56390625/920122
Si desea ver los comandos a medida que se intercambian, pruebe mi bifurcación de depuración:https://github.com/clst/Bluetooth_Headset_Battery_Level