Скрипт для управления циклами зарядки и разрядки аккумулятора ноутбука

Те, кто знает, говорят, что для того, чтобы литиевая батарея ноутбука оставалась в хорошем состоянии, ее нужно подключать к источнику тока, когда она разряжена на 40%, и отключать, когда она заряжена на 80%.

Многие производители включают в BIOS возможность «деактивировать» прохождение тока к батарее, когда он достигает определенного процента, и что оборудование использует ток только с этого момента, однако в моем конкретном случае мой Lenovo IdeaPad U510 не имеет такой возможности.

Я не знаю в Linux ни одного приложения, которое делает это на уровне программного обеспечения или уведомляет нас только тогда, когда батарея достигает определенного%, поэтому я решил создать небольшой скрипт, который уведомляет меня, когда мне нужно подключить и отключить ток.

Требования к скрипту для управления циклами зарядки и разрядки аккумулятора ноутбука

Первое, что нам нужно, это установить пакет ACPI на нашем компьютере. В моем случае, когда я использую ArchLinux, мне просто нужно выполнить:

$ sudo pacman -S acpi

Зачем нам нужен ACPI? Хорошо, чтобы узнать состояние нашей батареи. Если мы его выполним, он вернет примерно следующее:

leni :: ~ »acpi Батарея 0: разряжается, 76%, осталось 02:20:07

Следующее, что нужно сделать, это создать файл, который будет выполнять уведомление, в моем случае я помещаю его в папку ~ /. аккумулятор, и я назвал это bat_notification.sh. Внутрь положил следующее:

#!/bin/bash # # -*- КОДИРОВАНИЕ: UTF-8 -*- # Эта программа является свободным программным обеспечением. Вы можете распространять его и/или # изменять его в соответствии с условиями Стандартной общественной лицензии GNU #, опубликованной Фондом свободного программного обеспечения, # либо версии 2 этой лицензии, либо (по вашему # выбору) любой более поздней версии. # # Если вы вносите какие-либо изменения в это приложение, # вы всегда должны указывать первоначального автора. # # DesdeLinux.net CC-BY-SA 2015 # Автор: ELAVdesdelinux.net> # Получаем состояние батареи, но только проценты: BATTERY=`acpi | awk '{print $4}'` # Передаем состояние в текстовый файл: echo $BATERIA > tmp_bateria.txt # Удаляем ненужную информацию из текстового файла: RESULT=`cut -c 1-2 tmp_bateria.txt` if [ $РЕЗУЛЬТАТ -ge 80]; then notify-send --urgency=critical --expire-time=5000 --app-name=Battery --icon=battery "Уведомление о заряде батареи" "Отключите питание, пожалуйста" elif [ $RESULT -le 40 ]; then notify-send --urgency=critical --expire-time=5000 --app-name=Battery --icon=battery «Уведомление о заряде батареи» «Пожалуйста, подключите питание» else $BATTERY > /dev/null fi

Как работает скрипт для управления циклами зарядки и разрядки аккумулятора вашего ноутбука

Объяснение того, как это работает, находится внутри, но я кратко объясню.

Во-первых, используя AWK Я извлекаю только процентное значение из батареи, которое возвращает что-то вроде 76%,. Этот результат переносится в текстовый файл, чтобы впоследствии удалить ненужные символы, оставив только числовое значение.

Даем необходимые разрешения файлу:

$ chmod a+x ~/.bateria/bat_notificacion.sh

Как ArchLinux использует СистемаD и не имеет старого кронтабЯ я устанавливаю cronie. Теперь редактируем crontab, чтобы скрипт все время проверял состояние батареи.

$ crontab -e

И добавляю внутрь:

# Проверка батареи * * * * * cd /home/elav/.battery/ && ./bat_notification.sh

И вуаля, когда процент заряда батареи равен или меньше 40%, или равен или больше 80%, я получаю такое уведомление:

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

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


32 комментариев, оставьте свой

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   Дерпи сказал

    Очень хорошо, хотелось бы попробовать, но я использую не только настольный компьютер: /
    вопрос, где хранится временный файл ?. Если это, например, дома, не могли бы вы поставить точку, чтобы вам не приходилось его видеть? 😛

    1.    Elav сказал

      Что ж, в моем случае, поскольку я запускаю скрипт в скрытой папке дома, у меня нет этой проблемы. Временный файл размещается вместе со скриптом .. 😀

  2.   НАМ3ЛЕСС сказал

    Скрипт хорош, но я читал о проблеме с батареей в ноутбуках, и мне до сих пор не ясно, отключать или нет батарею, когда она заряжена до 100%.
    Ну вот с Леново уже больше 2-х лет и проблем нет (стучите по дереву): v
    В любом случае, было бы хорошо, если бы кто-нибудь объяснил, правда ли вопрос о барабанах или это просто миф.
    Привет!

    1.    Черная Сеть сказал

      У меня есть ноутбук Dell Inspiron, которому уже четыре года, я стараюсь, чтобы он всегда был подключен, а батарея все еще работает около часа без подключения (в зависимости от работы, конечно). Думаю отличный совет, попробую установить ... Приветствую

  3.   Персонал сказал

    Если у вас есть systemd (без заглавных букв, ошибка, которую я тоже сделал), вы можете использовать таймеры, и нет необходимости устанавливать сторонние приложения.

    https://wiki.archlinux.org/index.php/Systemd/Timers#As_a_cron_replacement

    Что касается батареи, я понимаю, что собственная схема литиевой батареи отключает нагрузку, когда она достигает предела, независимо от SO, в противном случае безопасный взрыв 🙂
    И, если для продления срока службы батареи мне придется постоянно использовать только 40% ее емкости, это будет все равно, что иметь поврежденную батарею.
    Зарядное устройство следует отключать при достижении 100% или незадолго до этого, но только для того, чтобы избежать так называемой «нагрузки» на аккумулятор (быстрое и постоянное начало и завершение процесса зарядки между 99% и 100%).

    1.    Elav сказал

      Ну, правда, не знаю, есть много разных мнений, и я не знаю, к кому слушать.

      1.    дождь сказал

        Что ж, это ваш компьютер, используйте то, что вам нравится, но всегда полезно знать разные способы сделать это 🙂

      2.    дождь сказал

        Что ж, это ваш компьютер, используйте то, что вам больше нравится, всегда найдутся люди, которые скажут, что лучше использовать x вещь вместо y, бла-бла-бла.

        а в linux есть много способов сделать то же самое xD

        цель альтернатив
        альтернативный acpi из ядра 2.6, чтобы узнать, что нагрузка:
        cat / sys / class / power_supply / BAT1 / емкость

  4.   дождь сказал

    Есть те, кто любит объединять все запланированные задачи в один файл. Вместо создания файла для каждого из них.

    Мне это кажется немного излишним xD

    1.    Elav сказал

      Если вы имеете в виду systemd cron a и мне это не кажется чрезмерным, то это дерьмо на палке. Какой способ усложнить себе жизнь.

  5.   копротк сказал

    Я не эксперт, но вот очень хорошая документация по этому поводу:

    http://batteryuniversity.com/learn/article/how_to_prolong_lithium_based_batteries

    http://batteryuniversity.com/learn/article/charging_lithium_ion_batteries

    привет

  6.   ThecaTony сказал

    Идея очень хорошая, ее оценили.

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

    #! / Bin / ш
    BATLVL = $ (cat / sys / class / power_supply / BAT0 / емкость)
    если [$ BATLVL -ge 80]; тогда
    если [! -a / tmp / batwarn]; тогда
    notify-send –urgency = critical –expire-time = 5000 –app-name = Battery –icon = battery «Уведомление о батарее» «Пожалуйста, отключите электрический ток»;
    touch / tmp / batwarn;
    fi
    elif [$ BATLVL -le 40]; тогда
    если [! -a / tmp / batwarn]; тогда
    notify-send –urgency = critical –expire-time = 5000 –app-name = Battery –icon = battery «Уведомление о батарее» «Пожалуйста, включите питание»
    touch / tmp / batwarn;
    fi
    еще
    если [-a / tmp / batwarn]; тогда
    rm -f / tmp / batwarn;
    fi
    fi

    (Вышеупомянутое не тестировалось, хотя я думаю, что он работает нормально)

    Ура! "

    1.    Elav сказал

      Спасибо за вклад, я пробую прямо сейчас и говорю вам.

  7.   образование сказал

    Кто-нибудь знает, как контролировать и смягчать температуру ноутбука? Дело в том, что температура поднимается более чем до 40 градусов по Цельсию и потребляет гораздо больше ресурсов у аппарата при просмотре видео на YouTube.

    1.    бодрость духа сказал

      Может помочь очистка вентилятора, например, с помощью пылесоса. Разберите его, чтобы очистить, и это зависит от ваших навыков и уверенности в том, что вы делаете.

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

      Надеюсь, вы сочтете это полезным.

  8.   Гонсало Мартинес сказал

    Очень хороший сценарий!

    То, что я сделал, дал зарядить 100, я вынул и использовал на постоянном токе. Аккумулятор использовал его, когда поблизости не было электричества.

    Теперь с Mac я не могу 🙁

  9.   Лучано Лагасса сказал

    Здравствуйте, ваша идея очень хороша, я говорю вам, что у меня была такая же идея, теперь я начал видеть ваш сценарий и адаптировать и изменять его так, чтобы он предупреждал вас только тогда, когда он соответствует. Передаю вам результат.

    СТАТУС = acpi | awk '{print $ 3}' НОМЕР = acpi | awk '{print $ 4}' | cut -c 1-2 echo $ STATUS $ NUMBER% if ["$ STATUS" == "Discharging,"], то если [$ NUMBER -le 40], то notify-send --urgency = critical --expire-time = 5000 --app-name = Battery --icon = battery "Уведомление о заряде батареи" "Подключите питание" fi elif ["$ STATUS" == "Зарядка,"] затем, если [$ NUMBER -ge 80], то уведомить -send --urgency = critical --expire-time = 5000 --app-name = Battery --icon = battery "Уведомление о батарее" "Пожалуйста, выключите питание" fi fi
    1.    Elav сказал

      Отлично, хотя по предложению некоторых комментариев и других, сейчас у меня это так:

      #!/bin/bash # # -*- КОДИРОВАНИЕ: UTF-8 -*- # Эта программа является свободным программным обеспечением. Вы можете распространять его и/или # изменять его в соответствии с условиями Стандартной общественной лицензии GNU #, опубликованной Фондом свободного программного обеспечения, # либо версии 2 этой лицензии, либо (по вашему # выбору) любой более поздней версии. # # Если вы вносите какие-либо изменения в это приложение, # вы всегда должны указывать первоначального автора. # # DesdeLinux.net CC-BY-SA 2015 # Автор: ELAV  
      
      BATLVL = $ (cat / sys / class / power_supply / BAT1 / capacity) если [$ BATLVL -ge 80]; тогда если [! -a / tmp / batwarn]; затем notify-send --urgency = critical --expire-time = 5000 --app-name = Battery --icon = battery «Уведомление о батарее» «Пожалуйста, отключите питание»; touch / tmp / batwarn; elif [$ BATLVL -le 40]; тогда если [! -a / tmp / batwarn]; затем notify-send --urgency = critical --expire-time = 5000 --app-name = Battery --icon = battery «Уведомление о батарее» «Пожалуйста, подключите питание» touch / tmp / batwarn; fi else if [-a / tmp / batwarn]; затем rm -f / tmp / batwarn; фи фи фи
      1.    xxxtonixxx сказал

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

    2.    Лучано Лагасса сказал

      Здравствуйте, в источнике, который произошел, были некоторые ошибки, и у меня он чище, он работает очень хорошо.

      СТАТУС = acpi | awk '{print $ 3}' НОМЕР = acpi | awk '{print $ 4}' | cut -c 1-2, если expr соответствует "$ STATUS" "Разрядка", затем эхо "Загрузка $ NUMBER%", если [$ NUMBER -le 40], то эхо "Пожалуйста, подключите питание" notify-send --urgency = critical --expire-time = 5000 --app-name = Battery --icon = battery "Уведомление о батарее" "Подключите электрический ток" fi elif expr match "$ STATUS" "Зарядка", затем эхо "Загрузка $ NUMBER% "if [$ NUMBER -ge 80] then echo" Пожалуйста, выключите питание "notify-send --urgency = critical --expire-time = 5000 --app-name = Battery --icon = battery" Уведомление об уровне заряда батареи «Пожалуйста, отключите электричество» fi fi
  10.   jony127 сказал

    Привет, то, что вы комментируете, больше похоже на городскую легенду, чем на что-либо еще. Купил недавно ноутбук и начал искать информацию по этой теме, вывод: всегда заряжайте аккумулятор до 100%, а также максимально разряжайте его перед повторной зарядкой.

    Аккумулятор имеет x полезных циклов зарядки, поэтому чем больше вы его заряжаете, тем больше вы сокращаете срок его службы.

    Я связался со службой технической поддержки Fujitsu и Motorola, и они оба сказали мне то, что я сказал выше. Ни один производитель не будет рекомендовать вам заряжать аккумулятор только до 80% или не позволять ему разряжаться ниже x процентов, потому что это неправильно, повторяю, лучше всего использовать полную емкость аккумулятора как при зарядке, так и при разрядке.

    Кроме того, использование предлагаемых вами ограничений заставит нас периодически заряжать аккумулятор, и это тоже не имеет большого смысла, я говорю?

    Удалите этот сценарий, поскольку батарея используется, как описано выше.

    привет

  11.   Armando Leisure сказал

    Очень интересная тема, мне уведомление кажется очень полезным, это функция, которая может быть реализована в любом дистрибутиве.
    Кто-нибудь реализовал это в Linux MInt? было бы интересно посмотреть, как это работает.

    1.    Команда Slimbook сказал

      хорошо,
      Для Linux Mint вы можете использовать Ubuntu, он у вас здесь:
      https://slimbook.es/tutoriales/linux/45-script-linux-para-avisar-de-batearia-cargada
      С уважением,
      Команда Slimbook

  12.   Тоно сказал

    Чувак, какой это хороший блог, я только что открыл его, я тестировал Ubuntu около 15 дней, и все кажется очень интересным, быстрым и ... ну, мне действительно нравится этот мир, и этот блог тех, что я посетил, кажется для меня, я думаю, лучший.

  13.   ФредерикЛинукс сказал

    Ну, pss, я создал JBattery несколько месяцев назад, это java-приложение, которое графически позволяет вам делать то же самое, а также в его последней версии оно позволяет вам знать даже состояние здоровья батареи. они могут узнать проект в

    http://niconsystem.zz.mu/proyectos/jbattery

    1.    Elav сказал

      Интересный

  14.   Давид сказал

    С вашим сценарием я узнал несколько вещей. Что касается аккумуляторов, вы уже прокомментировали несколько интересных моментов, но я запишу несколько аспектов, которые я считаю важными для аккумуляторов. Мне нравится радиоуправление, липо-батареи, которые мы используем, более хрупкие, но очень похожи на литиевые, используемые в ноутбуках, в нашей среде мы и должны быть намного осторожнее с батареями, они несколько более опасны (LiPo) и они стоили нам глаза, поэтому мы заинтересованы в их поддержании в хорошем состоянии.

    1.- Он никогда не должен быть перегружен или перегружен. Это хорошо контролируется схемой вашего ноутбука, в противном случае это было бы небезопасно, и производители могли бы напугать и отозвать несколько раз. Поэтому любое устройство с литиевыми батареями отключается только при низком заряде батареи (например, мобильные телефоны). Когда нагрузка достигает 100%, они поддерживают минимальный ток обслуживания. (Посмотрите на мобильный телефон, когда он достигает 100%, тепло уменьшается). В современных ноутбуках они получают ток предпочтительно от источника питания, а не от аккумулятора, когда он подключен, поэтому не должно быть проблем, чтобы сохранить его подключенным, даже если он на 100%. Конечно, для поддержания хорошего состояния батареи было бы хорошо предотвратить ее отключение из-за достижения минимума, но 40% было бы чрезмерным. Думаю, что 10-15% будет достаточно.

    2.- Тепло сильно разлагает эти батареи, желательно заряжать и использовать в прохладном месте, вероятно, у вас уйдет меньше времени на зарядку в прохладном месте, чем в горячем, не говоря уже о разряде. Проблема в том, что ноутбуки сильно нагреваются, если вам удастся снизить температуру, этого хватит еще на несколько минут.

    3.- Чем больше мы сократим количество зарядок аккумулятора, тем лучше. Срок службы качественных аккумуляторов составляет примерно 1000 циклов зарядки и более. Если вы хорошо с ним обращались, он прослужит дольше, если с ним жестоко обращались, срок его службы сократится раньше. Обратите внимание, как через несколько лет батарея мобильных телефонов или ноутбуков разряжается все меньше и меньше. Если мы заряжаем от 20% до 100%, он прослужит намного дольше, чем от 40 до 80%.

    4.- Внутренняя схема современных ноутбуков позволяет настроить профиль использования аккумулятора, если он в основном подключен к розетке или в режиме ноутбука. Если вы собираетесь подключиться к текущему, настройте этот метод (к сожалению, программное обеспечение производителя, которое делает это, доступно только для Windows, но оно может быть установлено в BIOS), дело в том, что в режиме с подключением он отключает нагрузки, когда она достигает 80%, потому что именно так она лучше всего поддерживается и сохраняется, когда батарея не используется. Зарядка начинается, когда уровень заряда аккумулятора падает ниже 40%. Это моя предпочтительная конфигурация, я просто должен иметь в виду, что если в какой-то момент вам понадобится использовать его отключенным от сети, начальное количество батареи будет на 80%. Если вы переведете его в портативный режим, он будет заряжать его до 100%, но также, если я правильно помню, он не начнет заряжать его снова, пока он не упадет ниже минимального значения (возможно, между 40 и 60%), поэтому вы можете работать отлично включите этот режим, если вы обычно много перемещаетесь с ним.

    5.- Текущая технология обычно литиевая, поэтому они не страдают от эффекта памяти, те варианты, которые были много лет назад в BIOS, которые выполняли несколько циклов зарядки / разрядки для очистки или попытки восстановить аккумулятор, больше не имеют смысла. Это имело больше смысла для никель-кадмия и в меньшей степени для никель-металлогидрида, но не для лития (Lithium, Life, Lipo).

    6.- Если вы примете во внимание сказанное в пунктах 1 и 3, не оставляйте батареи разряженными надолго, так как они постепенно разряжаются. Этот сценарий будет хорошим способом предупредить, если у вас есть ноутбук с батареей в «режиме ноутбука», и вы собираетесь оставить его неиспользованным в течение длительного времени, поэтому в идеале было бы оставить батарею на уровне 80-85%. зарядить, так как именно так они сохраняют нагрузку в течение долгого времени, а на самом деле именно так она должна прибыть, когда вы купили ее в свое время.

    В качестве примечания имейте в виду, что последние 5% (95-100%) батареи стоят намного дороже для зарядки, поэтому, если вы спешите с ней много раз, не стоит ждать, пока она достигнет 100. % всего за 5%.

    С уважением,
    Давид.

    1.    Elav сказал

      Отличное объяснение .. большое спасибо

  15.   Фабианский сказал

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

    notify-send -h строка: звуковой файл: /usr/share/sounds/KDE-Sys-Error-Printing.ogg «test »« Это тест звукового оповещения »

  16.   Диего сказал

    Хорошо…
    Больше чем разрез

    РЕЗУЛЬТАТ =cut -c 1-2 tmp_bateria.txt

    Разве нельзя сделать попытку?

    РЕЗУЛЬТАТ =tr "%," " " < tmp_bateria.txt

    Но с вырезом, если аккум на 100 возьмет на 10 (-с 1-2) и попросит подключить.
    Ах ... я отвечаю себе. При запуске этого скрипта вы никогда не должны достигнуть 100 🙂 Как в моем случае с подключенным адаптером: p
    Спасибо.

  17.   Марио сказал

    Привет. Отличный сценарий, я думаю сделать что-то подобное, но вместо этого использовать электронный контроллер заряда, который заботится, например, о том, что когда батарея достигает 100%, он перестает посылать ей заряд и забирает энергию непосредственно из источника. Таким образом, например, он выбирается для зарядки до 80℅, и когда я достиг этого уровня, контроллер перестает посылать энергию в аккумулятор и берет только ток от источника, без необходимости подключать и отключать , тратя ненужные циклы и в то же время, что аккумулятор всегда работает в диапазонах, которые предотвращают его преждевременную деградацию

  18.   Хосе Альберто Чавес Альварес сказал

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