Package: bluetooth-battery
🔋🎧 Bluetooth Headset Battery LevelThis is a python script to fetch the battery charge level of some Bluetooth headsets.You need python 3.6 or newer to run the script.▶️ How to runThere are four options:Option 1: Install from PyPIPlease ensure you have the BlueZ and python libraries and header files if you are using Ubuntu/Debian based distros:sudoaptinstalllibbluetooth-devpython3-devIf you are usingOpenSUSE, you will need to installbluez,bluez-devel,python3-devel,python3-pybluezThen, install with pip:pip3installbluetooth_battery

bluetooth_batteryBT_MAC_ADDRESS_1...You can input addresses for as many devices as you want separated by space.the dependencypybluezshould be installed automatically, but if not, you may need to install it manuallyOption 2: Download this repositorycdBluetooth_Headset_Battery_Level
chmod+xbluetooth_battery.py

./bluetooth_battery.pyBT_MAC_ADDRESS_1...make sure you havepython-pybluezorpython3-pybluezorpython3-bluezinstalled on your system.Option 3: DockerYou must have docker installed on your system.
Clone the repository usinggit clonecommand. Then run:cdBluetooth_Headset_Battery_Level
dockerbuild-tbluetooth_battery_level.Once the build is complete you can use the below command to run the program:dockerrun--rm-ti--privileged--net=hostbluetooth_battery_level"BT_MAC_ADDRESS"Option 4: AURYou must have AUR access enabled on your Arch or Manjaro machine.
You can install this library usingyay-Sbluetooth-headset-battery-level-gitLibrary usageTo use this as a library, simply install it using pip or AUR (see above) or require it in your Pipfile.You can thenfrombluetooth_batteryimportBatteryStateQuerier,BatteryQueryError,BluetoothError# only for error handlingand query the Battery State as follows:# Autodetects SPP portquery=BatteryStateQuerier("11:22:33:44:55:66")# or with given portquery=BatteryStateQuerier("11:22:33:44:55:66","4")result=int(query)# returns integer between 0 and 100# orresult=str(query)# returns "0%".."100%"As errors can occur in a wireless system, you probably want to handle them:try:query=BatteryStateQuerier("11:22:33:44:55:66")# Can raise BluetoothError when autodetecting portstr(query)# Can raise BluetoothError when device is down or port is wrong# Can raise BatteryQueryError when the device is unsupportedexceptBluetoothErrorase:# Handle device is offline...exceptBatteryQueryErrorase:# Handle device is unsupported...GNOME ExtensionThere is also a GNOME extension for integrating this program with GNOME desktop environment:https://extensions.gnome.org/extension/3991/bluetooth-battery/Finding MAC addressThere are a variety of utilities that can find the MAC address of your bluetooth device.  Here is one, this command is in thebluezpackage, and the given argument gets a list of all devices it knows about, even if not currently available.$ bluetoothctl devices
Device E8:AB:FA:XX:XX:XX iTeknic IK-BH002
Device D0:77:14:XX:XX:XX Barak's Moto X4
Device E8:AB:FA:XX:XX:XX iTeknic IK-BH002The 1st and 3rd would be relevant here, as those are headsets.This shows devices that are actually connected.$ bluetoothctl info
Device E8:AB:FA:XX:XX:XX (public)
	Name: iTeknic IK-BH002
	...So you can usebluetooth_battery.py $(bluetoothctl info | awk '/^Device/ {print $2}')to query the battery of all connected devices.It didn't work?You can set the port number manually by adding a dot at the end of mac address, like this:00:00:00:00:00:00.3Try port numbers1 to 30to find the one that works for your device. (wait a few seconds between each try)If that didn't work,disconnect your device first, and then try again.Still doesn't work?Please consider that this script doesn't guarantee to support every bluetooth device.You can open a new issue for discussion or check the existing ones for more information.Tested onArchLinux (5.6.14)Manjaro (5.14.10)NixOS 20.09 (20.09.2386.ae1b121d9a6)Debian GNU/Linux (bullseye 5.9)Ubuntu/Linux (Focal Fossa 20.04.1)openSUSE (Leap 15.3)🤝 ThanksSpecial thanks to:@clst: For spreading the word!@bhepple: For his research on fixing the important bug@balsoft: For thinking outside the box (finding my big mistake)@martin-beran: For making it easy to set the port number@Bobo1239: For adding support for Samsung galaxy buds@keystroke3: For adding multiple device support to the script@jadia: For docker container support@cheriimoya: For refactoring the code and providing NixOS packages@MichalW: For making the GNOME shell extension@GaLaXy102: For re-writing the code, making it cleaner and usable as a library❤️ And everyone else that pointed out the issues or helped me with writing the code or testing it.📜 LicenseThis project is a free software licensed under GPL-3.0 or newer. For more information seeLICENSE