Как продлить жизнь батарее ноутбука?

Продляем жизнь батарее ноутбука

После года эксплуатации, емкость моей батареи ноутбука прилично уменьшилась. Почему? Батарею ноутбука то разряжают в ноль, то забывают на зарядке на несколько дней. Мало кто следит за зарядом батареи. Но и перезаряд, и сильный разряд ведет к быстрой деградации батареи, поэтому она теряет емкость и перестает выполнять свои функции.

Как обеспечить батарее в ноутбуке долгую жизнь и сохранить ее емкость? Ответ казалось бы простой — надо не допускать ни перезаряда, ни излишнего разряда батареи. Но как это сделать? Я для себя решил этот вопрос так — написал небольшую программу на Python, которая включает или выключает зарядное устройство батареи в определенном диапазоне. Т.е. ноутбук сам управляет своей розеткой, сам бережет свою батарею от деградации. А я перестал об думать.

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

Привожу код программы, проверено на Python 3.11.4

import psutil
import requests
import time
from datetime import datetime

def send_web_request(url):
try:
response = requests.get(url)
response.raise_for_status()
return response.status_code
except requests.exceptions.RequestException as e:
return str(e)

def load_config():
config = {}
with open(«config.txt») as config_file:
lines = config_file.readlines()
for line in lines:
key, value = line.strip().split(«:»)
config[key] = value
return config

def main():
config = load_config()
device_ip = config[«device_ip»]

while True:
battery = psutil.sensors_battery()
percent = battery.percent

if percent > int(config[«turn_off_percent»]):
response = send_web_request(f»http://{device_ip}/cm?cmnd=Power%20off»)
current_time = datetime.now().strftime(«%d.%m.%y | %H:%M»)
status = f»{current_time} | %:{percent} | ret: {response}»
print(status)
elif percent < int(config[«turn_on_percent»]):
response = send_web_request(f»http://{device_ip}/cm?cmnd=Power%20On»)
current_time = datetime.now().strftime(«%d.%m.%y | %H:%M»)
status = f»{current_time} | %:{percent} | ret: {response}»
print(status)

time.sleep(int(config[«check_interval»]))

if __name__ == «__main__»:
main()

Для корректной работы программы, я установил в среде Python 2 библиотеки:

pip install psutil
pip install requests

А также сделал себе exe-файл по Windows, для этого установил

pip install auto-py-to-exe

А для того, чтобы можно было один раз настроить и больше в код не лазить, основные параметры вынес в конфиг config.txt:
Т.е. задаем ip адрес розетки, при 40% включаем, при 97% выключаем, и проверяем каждые 60 секунд.

device_ip:192.168.1.99
turn_on_percent:40
turn_off_percent:97
check_interval:60

Розетки для разных устройств имеют статические ip адреса, и управляются командами:

http://192.168.1.99/cm?cmnd=Power%20off

http://192.168.1.99/cm?cmnd=Power%20On

Дополнительные комментарии по тасмоте и компиляции в exe-файл, чтобы использовать без установки Python:

# Проект умная розетка управляемая ноутбуком v@c0d.su

# Сначала подключаем розетку с прошивкой Тасмота. В принципе подойдет любая умная розетка, которая умеет управляться по веб-хуку. Если не тасмота, то возможно придется модифицировать запрос в программе для включения/выключения розетки.
# Подключаем новую розетку. Если она через минуту не подключилась к Wifi, она открыта как точка доступа. Вводим туда правильную сеть вайфай и перегружаем.
# Находим розетку в роутере и даем ей статический адрес: 1.99 для Ноубука №1
# Проверяем работу веб-команды: http://192.168.1.99/cm?cmnd=Power%20off — работает как часы

# Делаем скрипт на питоне:

# Ставим питон с командой PATH при инсталляции. 3.11.4
# Добавляем библиотеки:
pip install psutil
pip install requests
# и обновляем что просят.

pip install auto-py-to-exe
# ставится само в эту папку: C:\Users\X\AppData\Local\Programs\Python\Python311\Lib\site-packages\auto_py_to_exe

auto-py-to-exe —version
# auto-py-to-exe 2.36.0

 

# Код 1: D:\Apps\SB6\sb1.py  (самая первая версия программы, окончательная версия выше)

import psutil
import requests
import time

def send_web_request(url):
try:
response = requests.get(url)
response.raise_for_status() # Проверяем успешность запроса
print(«Web request sent successfully:», response.status_code)
except requests.exceptions.RequestException as e:
print(«Error sending web request:», e)

def main():
while True:
battery = psutil.sensors_battery()
percent = battery.percent

if percent > 80:
send_web_request(«http://192.168.1.81/cm?cmnd=Power%20off»)
elif percent < 50:
send_web_request(«http://192.168.1.81/cm?cmnd=Power%20On»)

time.sleep(600) # Подождать 600 секунд (10 минут) перед следующим опросом

if __name__ == «__main__»:
main()

Архив с файлом на Python, конфигом и exe-файлом

BitoNator
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: