Battery level of the Bluetooth device

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?

  1. Home Assistant should be on Debian
  2. 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.logappeared 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
image

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

Что нужно для этого сделать?

  1. Home Assistant должен стоять на Debian
  2. Установить на 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
image

Буду благодарен, если вы поделитесь своими вариантами, как вы реализовали вывод уровня заряда bluetooth устройства в Home Assistant

1 Like