端末でこれを実行するとうまくいきました:
upower --dump
この特定の GATT 特性は DBUS org.bluez.Battery1
に移動されたため、Bluez v5.48 以降、GATT 特性のリストにバッテリー レベルは表示されません。
コマンドラインから:
<オール>bluetoothctl
でターゲットの BLE デバイスに接続します 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"
を実行して DBUS をリクエストします。
私の場合、次の MAC アドレス C3:41:A6:C8:93:42
を持つ BLE 周辺機器を使用しています :
$ 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
注:Bluez DBUS API を使用して、デバイスをスキャンして接続できる可能性があります。
これは、現時点で利用可能な開発とツールに先立って、非常に重要な質問です。
短い答え (2018 年 10 月)
<ブロック引用>あなたはそれを自分で書かなければなりません!ターミナルでワンライナーにはなりません。これは Python で自分用に書くつもりですが、C にはもう少しドキュメントがありますので、C に熟練している場合はそちらを使用してください。
長い答え 、しかし、より推奨される出発点です:
<オール>bluetoothctl
を使用できました 属性を読み取り、Bluetooth デバイスにデータを送信します。ビデオ情報を必ず確認してください。すばらしいリンクとリファレンスが見つかります: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
パーティーには少し遅れているかもしれませんが、私にとっては、この Python プロジェクトはうまくいきました:
https://github.com/TheWeirdDev/Bluetooth_Headset_Battery_Level
名前のない X5 ヘッドセットの 57 行目のポートを 3 に変更するだけで済みました。ハングするか、「接続が拒否されました」というエラーが表示される場合は、別のポートを試してください。
Python プログラムは RFCOMM を介して AT コマンドを使用し、Pulseaudio が A2DP シンクを使用している間は動作するはずです (鉱山は再接続します)。 2 には BT-Serial ソケットがないため、Python 3 が必要です。 bluez がないため、Windows はおそらく動作しません。基本的には、ここでの Pulseaudio ハックと同じことを行います:https://stackoverflow.com/a/56390625/920122
交換されるコマンドを確認したい場合は、私のデバッグ フォークを試してください:https://github.com/clst/Bluetooth_Headset_Battery_Level