Деградация батареи в Linux

от автора

Мы все знаем, что батарея не вечна. Это нормально — можно заменить изношенную батарею в сервисе и снова использовать устройство. Но очень полезно видеть текущее состояние батареи. В MacOS это стандартная функция, в Linux мы, конечно, можем сделать то же самое. Давайте разберёмся!

Сначала мы поймём, как найти нужное значение, а затем создадим красивый минималистичный модуль для waybar.

Находим значение деградации батареи

Сначала получим список всех устройств питания:

upower -e

Затем найдём батарею в этом списке:

upower -e | grep BAT  # For example: # /org/freedesktop/UPower/devices/battery_BATT

Затем получим детальную информацию об этом устройстве:

upower -i $(upower -e | grep BAT)

Мы получим что-то вроде этого:

  native-path:          BATT   vendor:               DESAY   model:                BASE-BAT   serial:               1   power supply:         yes   updated:              Fri Jul 11 11:37:00 2025 (7 seconds ago)   has history:          yes   has statistics:       yes   battery     present:             yes     rechargeable:        yes     state:               charging     warning-level:       none     energy:              25.514 Wh     energy-empty:        0 Wh     energy-full:         47.5052 Wh     energy-full-design:  59.4247 Wh     energy-rate:         11.1573 W     voltage:             11.972 V     charge-cycles:       650     time to full:        2.0 hours     percentage:          53%     capacity:            79.9417%     technology:          lithium-ion     charge-start-threshold:        75%     charge-end-threshold:          80%     charge-threshold-supported:    yes     icon-name:          'battery-good-charging-symbolic'   History (charge):     175222292753.000charging   History (rate):     175222302011.157charging     175222299011.123charging     175222298711.192charging     175222295710.822charging     175222292710.857charging

Здесь много интересной информации, например количество циклов зарядки, время до полной зарядки и т.д. Сейчас нас интересуют два параметра:

  • energy-full-design — изначальный полный объём батареи

  • energy-full — текущий объём батареи

Разница между этими параметрами и есть деградация батареи:

\text{Degradation} = \left(1 - \frac{E_{\text{full}}}{E_{\text{design}}}\right) \times 100\%

Теперь посчитаем этот показатель в процентах.

Сначала найдём эти параметры и разделим их:

upower -i $(upower -e | grep BAT) | awk '\ /energy-full:/ {ef=$2}\ /energy-full-design:/ {efd=$2}\ END {print ef/efd}'

Затем посчитаем процентное значение:

echo "(1 - $(upower -i $(upower -e | grep BAT) | awk '\         /energy-full:/ {ef=$2}\         /energy-full-design:/ {efd=$2}\         END {print ef/efd}')) * 100 + 0.5" \ | bc  # Output example: # 20.558200

На последнем шаге нам нужно округлить значение:

echo "(1 - $(upower -i $(upower -e | grep BAT) | awk '\         /energy-full:/ {ef=$2}\         /energy-full-design:/ {efd=$2}\         END {print ef/efd}')) * 100 + 0.5" \ | bc \ | cut -d'.' -f1  # Output example: # 20

Модуль для Waybar

В моём конфиге waybar ~/.config/waybar/config.json я добавил два модуля в правую секцию, но вы можете сделать как вам удобно. В итоге я получил это:

Если вам нравятся мои обои, вы можете найти их и другие классные штуки в моём репозитории dotfiles на GitHub. Не забывайте: я люблю ваши звёзды!

Посмотрим:

{   ...   "modules-left": [...],   "modules-center": [...],   "modules-right": [     "battery",     "custom/battery-degradation", ...   ],   ...

Первый модуль — стандартный battery, у меня он отлично работает на hyprland. Здесь мы определяем уровни хорошего, предупреждающего и критического уровня заряда, задаём nerd-иконки для разных состояний батареи:

"battery": {   "states": {     "good": 90,     "warning": 25,     "critical": 10   },   "format": "{icon} {capacity}%",   "format-charging": " {capacity}%",   "format-plugged": " {capacity}%",   "format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"],   "tooltip": "{time}",   "style": "{capacity < 10 ? 'color: red;' : 'color: normal;'}" }

Второй модуль — тема сегодняшнего разговора:

"custom/battery-degradation": {   "format": " {}%",   "interval": "once",   "exec": "~/scripts/battery-degradation.sh",   "tooltip": false }

Я поместил нашу команду в скрипт — так удобнее. Вы можете сделать так же, не забудьте добавить shebang #!/bin/bash и:

chmod +x ~/scripts/battery-degradation.sh

В модуле мы определяем формат с nerd-иконкой и процентом, отключаем подсказку и устанавливаем однократный запуск при старте waybar.

И завершаем эти модули CSS-стилем:

#battery, #custom-battery-degradation {   background: #1e1e2e;   opacity: 0.7;   padding: 0px 10px;   margin: 3px 0px;   margin-top: 5px;   border: 0px solid #181825; }  #battery {   padding-right: 10px;   border-radius: 10px 0px 0px 10px;   min-width: 50px; }  #custom-battery-degradation {   border-radius: 0px 10px 10px 0px;   margin-right: 5px;   min-width: 35px; }  #battery.critical {   color: red; } 

Готово! В результате:

Если вам понравилось, приходите на блог и подписывайтесь в Telegram!


ссылка на оригинал статьи https://habr.com/ru/articles/938812/