2013-12-23 7 views
6

Недавно мой друг унаследовал старый ноутбук и недавно установил окна 7 и хочет увеличить время автономной работы. Изначально батарея длилась около 20 минут, но, позволяя батарее полностью разряжаться до перезарядки, несколько раз ему удалось увеличить срок службы примерно до часа. Мы подумали, что было бы интересно увидеть, насколько мы могли бы увеличить производительность батареи! и я подумал написать сценарий для зарядки батареи на ночь - и это может быть полезно иногда запускать на любом компьютере для поддержания здоровья батареи? Я могу получить состояние батареи, но не могу понять, как проинструктировать ноутбук игнорировать наличие линии электропитания переменного тока и использовать аккумулятор. У меня есть ощущение, что ответ есть: https://pypi.python.org/pypi/LaptopControlPanel, но я полностью на пределе своего понимания! Любая помощь будет большой.Сценарий Python для зарядки и разрядки аккумулятора для ноутбука

import ctypes 
from ctypes import wintypes 


class SYSTEM_POWER_STATUS(ctypes.Structure): 
    _fields_ = [ 
     ('ExternalPower', wintypes.BYTE), 
     ('BatteryFlag', wintypes.BYTE), 
     ('BatteryLifePercent', wintypes.BYTE), 
     ('Reserved1', wintypes.BYTE), 
     ('BatteryLifeTime', wintypes.DWORD) 
     ] 

SYSTEM_POWER_STATUS_P = ctypes.POINTER(SYSTEM_POWER_STATUS) 
GetSystemPowerStatus = ctypes.windll.kernel32.GetSystemPowerStatus 
GetSystemPowerStatus.argtypes = [SYSTEM_POWER_STATUS_P] 
GetSystemPowerStatus.restype = wintypes.BOOL 

status = SYSTEM_POWER_STATUS() 
if not GetSystemPowerStatus(ctypes.pointer(status)): 
     raise cytpes.WinError() 
print 'ExternalPower', status.ExternalPower 
#print 'BatteryFlag', status.BatteryFlag 
print 'BatteryLifePercent', status.BatteryLifePercent 
print 'BatteryLifeTime', status.BatteryLifeTime 

if status.ExternalPower == True and status.BatteryLifePercent == 100: 
    print 'Connected to mains and at 100% charge: Begining decharge' 
    # This is where I would like to force battery use. Perhaps with a while 
#loop (that ticks every 60 seconds or so) 
    if status.BatteryLifePercent > 10 : 
     status.ExternalPower = 0 

elif status.ExternalPower == True and status.BatteryLifePercent < 100: 
    print 'Connected to mains and charging up to 100%' 
    status.ExternalPower = 1 

elif status.ExternalPower == False: 
    print 'Not connected to mains' 

else: 
    print ' Unknown system status' 

x = raw_input('Press ENTER to close:') 

Первое, если заявление, где я хотел бы, чтобы заставить использовать батареи ... Приведенный выше код в основном украден из In Python, how can I detect whether the computer is on battery power?.

Thank-you.

+0

Какой ноутбук? Lenovo/Thinkpads поставляются с утилитой для этого. Бьюсь об заклад, вы тоже можете найти утилиту. Проблема в том, что вы просто отключите AC, чтобы вы полностью разрядили батарею, и вы пытаетесь избежать этого? Или вы просто пытаетесь повеселиться с Python? – Levon

+0

Я даже не знал, что вы можете использовать Python для такого рода вещей. Мне интересно, если вы когда-нибудь заработаете. –

+0

@ Levon Это тобиша примерно с 2007 года под управлением Windows 7. Нет, проблема не в том, что касается ручного отсоединения, более того, было бы неплохо, если бы ноутбук был подключен (скажем, к ночи), и иметь возможность заряд батареи столько раз, сколько требуется. Но и да, главная причина этого - веселиться с python - как, конечно, ручные работы по отключению (он это делал). – Jonathan

ответ

1

AFAIK, способность реализовать это не имеет ничего общего с Python или другими языками программирования. Это, в основном, возможность аппаратного обеспечения ноутбука, и это может вообще не существовать. Если он существует, то он должен быть выставлен драйверами производителя, и вам, вероятно, понадобится немного низкоуровневого мануала для ОС, чтобы фактически вызвать API-интерфейс драйвера из Python, потому что для него нет абстракции ОС. Учитывая, что у вас есть документация по API, которая может не быть общедоступной ...

Это может быть хороший проект, если вы заинтересованы в взломе и обратном проектировании внутренних компонентов ПК, что, безусловно, весело :)

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^