I have a Mi Portable Bluetooth Speaker bluetooth speaker that plays music via MPD installed on Debian. I have Home Assistant installed on Debian 11.6 and I don’t use the Mopidy addon, since I don’t see the point in it, it’s much better to use MPD on Debian. This Mi Portable Bluetooth Speaker can transmit the battery level. If the speaker is connected to Windows or Android, then I can see the battery level of the bluetooth speaker Mi Portable Bluetooth Speaker, but in Debian and Home Assistant I do not visually see the charging level of the bluetooth speaker Mi Portable Bluetooth Speaker. The task was set and I implemented it. I will lay out my implementation option, how I brought out the charge level of the bluetooth speaker Mi Portable Bluetooth Speaker. Thus, you can display the charge level in the Home Assistant of any bluetooth device that can transmit the charge level. This option will work if Home Assistant is installed on Debian
What do I need to do for this?
- Home Assistant should be on Debian
- Install on Debian Bluetooth_Headset_Battery_Level. We use the first installation point.
Installing on Debian
We put packages
sudo apt install libbluetooth-dev python3-dev
Setting the bluetooth_battery via pip
pip3 install bluetooth_battery
Find out the charge level
bluetooth_battery BT_MAC_ADDRESS_1 …
Example
bluetooth_battery G2:2E:FD:22:22:2E
If we got the battery level of the bluetooth device, we can create a sensor in the Home Assistant
First, we check the creation of a file with an entry in the file. The file will be stored in the Home Assistant. I chose /usr/share/hassio/share
Creating a folder in /usr/share/hassio/share
sudo mkdir /usr/share/hassio/share/bluetooth/
Run the command that counts the charge level from the bluetooth device and writes it to a file. We name the file as you like, but for my convenience I specified the name of the device’s mac address so that they could be divided into files.
bluetooth_battery G2:2E:FD:22:22:2E > /usr/share/hassio/share/bluetooth/G2:2E:FD:22:22:2E.log
If the file is G2:2E:FD:22:22:2E.log
appeared in /usr/share/hassio/share/bluetooth/
means everything is done correctly. Now we need to create a script and we will run this script from the crown
Now you need to configure the script to run with root rights without entering a password (useful when you need to do something on a remote system in automatic mode, but you can’t give full root):
Creating a script. We choose any paths
nano /root/scripts/bluetooth_battery.sh
To the bluetooth_battery file.sh insert the following
#!/bin/bash
bluetooth_battery G2:2E:FD:22:22:2E > /usr/share/hassio/share/bluetooth/G2:2E:FD:22:22:2E.log
Editing /etc/sudoers
nano /etc/sudoers
We prescribe permissions for the user user to run the script without entering his password
root ALL= NOPASSWD: /root/scripts/bluetooth_battery.sh
We set the rights to the script. We give root rights
chown root:root /root/scripts/bluetooth_battery.sh
chmod 755 /root/scripts/bluetooth_battery.sh
Add an entry in the crown to run the script as root
crontab -e
In the crown, we add an entry to run the script every hour
0 * * * * sudo sh /root/scripts/bluetooth_battery.sh
or running every 15 minutes
*/15 * * * * sudo sh /root/scripts/bluetooth_battery.sh
For the test, we can add a script run to the crown for every minute. If the script runs and works correctly, then you can comment out or delete this line
* * * * * sudo sh /root/scripts/bluetooth_battery.sh
In the Home Assistant, we create a command line sensor, where we will pull out the charge level from the file. Specify the path to the file G2:2E:FD:22:22:2E.log
. I repeat that G2:2E:FD:22:22:2E.log
is the mac address of the bluetooth device.
To check, you can enter a command through the SSH & Web Terminal addon and it should display the charge level of the bluetooth device
grep -o "[0-9]*%" /share/bluetooth/G2:2E:FD:22:22:2E.log
If the charge level of the bluetooth device is displayed in the SSH & Web Terminal addon, then it is done correctly, then we can create a sensor
sensor:
- platform: command_line
name: Mi Portable Bluetooth Speaker battery level
command: grep -o "[0-9]*%" /share/bluetooth/G2:2E:FD:22:22:2E.log
scan_interval: 60
command_timeout : 30
That’s it, now the Home Assistant has a bluetooth sensor, a Mi Portable Bluetooth Speaker
I would be grateful if you share your options on how you implemented the output of the charge level of a bluetooth device in Home Assistant
Текст на русском (Text in Russian)
У меня есть bluetooth колонка Mi Portable Bluetooth Speaker, которая играет музыку через MPD установленный на Debian. У меня Home Assistant установлен на Debian 11.6 и я не использую аддон Mopidy, так как не вижу в этом смысла, гораздо лучше использовать MPD на Debian. Эта колонка Mi Portable Bluetooth Speaker может передавать уровень заряда аккумулятора. Если колонку подключить к Windows или Android, то я могу видеть уровень заряда аккумулятора bluetooth колонки Mi Portable Bluetooth Speaker, но в Debian и Home Assistant я не вижу визуально уровень зарядки bluetooth колонка Mi Portable Bluetooth Speaker. Задача была поставлена и я ее реализовал. Я выложу свой вариант реализации, как я вывел уровень заряда bluetooth колонки Mi Portable Bluetooth Speaker. Таким образом можно вывести уровень заряда в Home Assistant любого устройства bluetooth, которое умеет передавать уровень заряда. Этот вариант будет работать в том случае, если Home Assistant установлен на Debian
Что нужно для этого сделать?
- Home Assistant должен стоять на Debian
- Установить на Debian Bluetooth_Headset_Battery_Level. Используем первый пункт установки.
Установка в Debian
Ставим пакеты
sudo apt install libbluetooth-dev python3-dev
Ставим bluetooth_battery через pip
pip3 install bluetooth_battery
Узнать уровень заряда
bluetooth_battery BT_MAC_ADDRESS_1 …
Пример
bluetooth_battery G2:2E:FD:22:22:2E
Если получили уровень аккумулятора bluetooth устройства, то можем создать сенсор в Home Assistant
Сперва проверяем создание файла с записью в файл. Файл будем хранить в Home Assistant. Я выбрал /usr/share/hassio/share
Создаем папку в /usr/share/hassio/share
sudo mkdir /usr/share/hassio/share/bluetooth/
Запускаем команду который считает с bluetooth устройства уровень заряда и запишет в файл. Файл именуем как угодно, но я для своего удобства указал имя мак адреса устройства, чтобы можно было их разделить по файлам.
bluetooth_battery G2:2E:FD:22:22:2E > /usr/share/hassio/share/bluetooth/G2:2E:FD:22:22:2E.log
Если файл G2:2E:FD:22:22:2E.log
появился в /usr/share/hassio/share/bluetooth/
значит все сделано верно. Теперь нам нужно создать скрипт и будем этот скрипт запускать из крона
Теперь надо настроить запуск скрипта с правами root без ввода пароля (полезно, когда нужно что-то сделать на удаленной системе в автоматическом режиме, но полный root давать нельзя):
Создаем скрипт. Пути выбираем любые
nano /root/scripts/bluetooth_battery.sh
В файл bluetooth_battery.sh вставляем следующее
#!/bin/bash
bluetooth_battery G2:2E:FD:22:22:2E > /usr/share/hassio/share/bluetooth/G2:2E:FD:22:22:2E.log
Редактируем /etc/sudoers
:
nano /etc/sudoers
Прописываем разрешения для пользователя user запускать скрипт без ввода своего пароля:
root ALL= NOPASSWD: /root/scripts/bluetooth_battery.sh
Устанавливаем права на скрипт:
Даем права root
chown root:root /root/scripts/bluetooth_battery.sh
chmod 755 /root/scripts/bluetooth_battery.sh
Добавим запись в крон на запуск скрипта от имени root
crontab -e
В крон добавляем запись на запуск скрипта каждый час
0 * * * * sudo sh /root/scripts/bluetooth_battery.sh
или запуск каждые 15 минут
*/15 * * * * sudo sh /root/scripts/bluetooth_battery.sh
Для теста в крон можем добавить запуск скрипта на каждую минуту. Если скрипт запускается и отрабатывает корректно, то можно закомментировать или удалить эту строку
* * * * * sudo sh /root/scripts/bluetooth_battery.sh
В Home Assistant создаем сенсор command line, где будем выдергивать из файла уровень заряда. Указываем путь к файлу G2:2E:FD:22:22:2E.log
. Повторюсь, что G2:2E:FD:22:22:2E.log
это мак адрес bluetooth устройства.
Для проверки можно через аддон SSH & Web Terminal ввести команду и должно вывести уровень заряда bluetooth устройства
grep -o "[0-9]*%" /share/bluetooth/G2:2E:FD:22:22:2E.log
Если в аддоне SSH & Web Terminal уровень заряда bluetooth устройства отобразился, значит сделано верно, значит можем создавать сенсор
sensor:
- platform: command_line
name: Mi Portable Bluetooth Speaker battery level
command: grep -o "[0-9]*%" /share/bluetooth/G2:2E:FD:22:22:2E.log
scan_interval: 60
command_timeout : 30
Все, теперь в Home Assistant есть сенсор bluetooth колонка Mi Portable Bluetooth Speaker
Буду благодарен, если вы поделитесь своими вариантами, как вы реализовали вывод уровня заряда bluetooth устройства в Home Assistant