BatteryMonitor

1. Receita: BatteryMonitor

Esta receita apesar de muito simples aborda alguns pontos uteis aos iniciantes na linguagem Python (como eu por exemplo) :) Acesso a arquivos texto, orientacao a objetos, Tkinter, agendamento de execucao de uma funcao, entre outras coisas. O BatteryMonitor foi escrito com o intuito de monitorar a bateria de um notebook utilizando para isso os recursos APM (Advanced Power Managment) existentes no kernel Linux, se olharem o codigo verao que realmente eh muito facil acessar estas informacoes, independente da linguagem utilizada.

E em Windows, que pasta fica as informações da bateria? --LeonardoGregianin O rwindows nao tem um acesso a este tipo de informacão com facilidade, normalmente eh necessario o acesso atraves da API do proprio sistema (uma deelieli), porem o BatteryMonitor eh um software uniplataforma, rodando apenas em Linux (ou outro sistema que utilize o procfs, mas nao tenho informacoes sobre isso) - HenriqueMayer

1.1. Código

   1 #!/usr/bin/env python
   2 import Tkinter, sys
   3 class window:
   4         def __init__(self): #constructor
   5                 self.window = Tkinter.Tk()
   6                 self.window.title("APM Monitor")
   7                 self.frame  = Tkinter.Frame(self.window)
   8                 self.label  = Tkinter.Label(self.frame)
   9                 self.button = Tkinter.Button(self.frame, text="Exit", command=sys.exit)
  10 
  11         def read_apm(self): #le o arquivo /proc/apm onde ficam as informacoes
  12                 apm = file('/proc/apm').readline().split(' ') # da um split junto da leitura
  13                 return( { 'ac': apm[3], 'charge': apm[6] } )  # retorna um dicionario com as informacoes
  14 
  15         def set_params(self):
  16                 params = self.read_apm()
  17                 ac = params['ac']
  18                 charge = params['charge'] # guarda o valor da carga da bateria
  19                 if ac == "0x01" : ac = "on-line"  # verifica a bateria e diz se esta on-line
  20                 else: ac = "off-line"             # off-line (ninguem ia querer ver 0x01 ou 0x00 :)
  21                 self.label.configure(text="AC: " + ac + " | Charge: " + charge)
  22 
  23         def loop_apm(self):
  24                 self.set_params()
  25                 self.window.after(2000, self.loop_apm) #esta parte eu gostei, ele agenda a execucao
  26                                                        # dele mesmo para daqui 2 segundos :)
  27 
  28         def packs(self):
  29                 self.label.pack()
  30                 self.button.pack()     # packeia tudo :)
  31                 self.frame.pack(expand="true")
  32 
  33 if __name__=="__main__":
  34          monitor = window()
  35          monitor.packs()
  36          monitor.loop_apm()
  37          monitor.frame.mainloop()

Volta para CookBook.


HenriqueMayer

BatteryMonitor (editada pela última vez em 2008-09-26 14:07:36 por localhost)