Работа с батареей в ноутбуках ThinkPad

Работа с батареей в ноутбуках ThinkPadЕстественно, речь о работе с батареей в ноутбуках ThinkPad (тех самых, которые раньше были IBM, а сейчас Lenovo) в операционных системах на базе ядра Linux, в частности в Debian’е. Под Windows обычно идет куча всяких программ от производителя ноутбука, которые часто не очень-то и нужны. А вот в Linux’е в этом плане не скажу, что хуже, просто немного по-другому. И можно не только мониторить батарею, но и управлять ее контроллером.

Установка

Естественно, нужно для начала работы установить пакет. Он называется tp-smapi-dkms.

apt-get install tp-smapi-dkms

После этого нужно подключить модуль ядра, если он не подключился автоматически.

modprobe tp_smapi

И после этого можно приступать непосредственно к работе с контроллером батареи.

Что появляется в системе

После установки модуля ядра в системе появляется интерфейс для работы с батареями в виде директории /sys/devices/platform/smapi, в которой находятся различные поддиректории. Нас в первую очередь интересует наличие там директорий с названием BAT0 и BAT1 (Если вы используете дополнительную батарею). В каждой директории содержится некоторое количество псевдо-файлов, которые можно использовать для получения информации и взаимодействия с батареями.

Как взаимодействовать с контроллером батареи

Именно с контроллером батареи, а не с самой батареей. Сама батарея — это просто набор повербанков. Всю информацию обрабатывает контроллер, с которым мы работаем через SMAPI интерфейс.

Работать с псевдо-файлами очень просто. Мы либо выводим их содержимое, получая статус батареи, либо записываем в них что-то, изменяя настройки контроллера батареи таким образом. То есть, считываем настройку:

cat /sys/devices/platform/smapi/BAT0/<файл>

И изменяем ее:

echo "значение" > /sys/devices/platform/smapi/BAT0/<файл>

Что мы можем делать

Проверка наличия батареи

Самое первое, с чего начнем — это проверим, есть ли батарея

cat /sys/devices/platform/smapi/BAT0/installed

Содержимое — 0 или 1 в зависимости от того, установлена батарея или нет.

Получение информации о батарее

Производитель:

cat /sys/devices/platform/smapi/BAT0/manufacturer

Производитель на самом деле SANYO

Модель батареи:

cat /sys/devices/platform/smapi/BAT0/model

В моем случае это 42T4791

Тип батареи:

cat /sys/devices/platform/smapi/BAT0/chemistry

У меня это LION, литий-ионная батарея, для которой, например, очень вреден перегрев, он приводит к деградации батареи.

Следующая характеристика — серийный номер.

cat /sys/devices/platform/smapi/BAT0/serial

Эта характеристика нужна, возможно, если вы будете обращаться с батареей в официальный сервис по гарантии. Больше вариантов использования серийного номера батареи сложно предложить. Разве что мониторить факт замены батареи.

Еще один идентификационный параметр — штрихкод

cat /sys/devices/platform/smapi/BAT0/barcoding

Следующие две характеристики более интересны. Это дата производства батареи и дата ее первого использования.

cat /sys/devices/platform/smapi/BAT0/manufacture_date
cat /sys/devices/platform/smapi/BAT0/first_use_date

У меня это 2011-05-30 и 2011-10-17 соответственно. То есть, с момента производства батарея первый раз использовалась через 4,5 месяца. Кроме того, используется она уже без двух недель 4 года, и это объясняет деградацию емкости.

И, естественно, присутствуют параметры, указывающие на запланированные емкость и силу тока.

cat /sys/devices/platform/smapi/BAT0/design_capacity
cat /sys/devices/platform/smapi/BAT0/design_voltage

Эти характеристики помогут вам сориентироваться при замене батареи. У меня это 47520 и 10800 соответственно. То есть, 47520 mWh и 10,8 V.

Функциональные характеристики

Статус батареи

cat /sys/devices/platform/smapi/BAT0/state

Возможны 3 состояния: idle (не заряжается), discharging (разряжается) и charging (заряжается)

Температура

cat /sys/devices/platform/smapi/BAT0/temperature

Температура выражается в милли-Цельсиях, то есть в тысячных долях градусов по Цельсию. 32600 — это 32,6 градуса по Цельсию

Количество циклов разрядки-зарядки

cat /sys/devices/platform/smapi/BAT0/cycle_count

Текущая сила тока

cat /sys/devices/platform/smapi/BAT0/voltage

На сколько процентов заряжена батарея

cat /sys/devices/platform/smapi/BAT0/remaining_percent

Текущая емкость (mWh)

cat /sys/devices/platform/smapi/BAT0/remaining_capacity

Сколько времени работы осталось (минут)

cat /sys/devices/platform/smapi/BAT0/remaining_running_time

 

Управление контроллером батареи

Для управления есть следующие возможности:

Отсрочить зарядку на указанное количество минут (не заряжать в течение указанного количества минут):

echo КОЛИЧЕСТВО > /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes

Для отмены отсрочки записывается значение 0

Форсированная разрядка, даже если ноутбук подключен к сети:

echo 1 > /sys/devices/platform/smapi/BAT0/force_discharge

Для отмены форсированной разрядки, соответственно,

echo 0 > /sys/devices/platform/smapi/BAT0/force_discharge

Установка минимального значения, при котором начинается зарядка

echo 40 > /sys/devices/platform/smapi/BAT0/start_charge_thresh

Установка максимального значения, до которого будет заряжаться батарея

echo 80 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh

Но эти ограничения можно выставлять не на всех устройствах. Поэтому предварительно можно попробовать вывести командой cat соответствующее значение. Если возникает ошибка, значит это ограничение на вашем устройстве не поддерживается. У меня, например, уровень минимального значения не поддерживается, а вот максимальный уровень заряда поддерживается.

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

Сохранение настроек

Для сохранения настроек между перезагрузками нужно установить пакет sysfsutils

apt-get install sysfsutils

И после установки пакета можно записать необходимые параметры в файл /etc/sysfs.conf в следующем виде:

devices/platform/smapi/BAT0/stop_charge_thresh = 80

Вот, собственно, и всё. Плюс к этому рекомендую, если вы пользуетесь ThinkPad’ом, посмотреть пакеты thinkfan и tpb.