#! /usr/bin/env python #-*- coding: utf-8 -*- from cl_taskbaricon import Tray import os,sys import wx import datetime import time # Config PATH=os.path.abspath(os.path.dirname(sys.argv[0])) + '/' TEMPERATURE_FILE = '/sys/class/thermal/thermal_zone0/temp' TEMPERATURE_DIVISOR = 1000 GOUV_FILE='/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor' FREQ_AUTO_TEMP_MAX = [60, 65, 70] FREQ_AUTO_TEMP_MIN = [55, 60, 65] PIC_TIME = [ [ datetime.time(hour=6, minute=30), datetime.time(hour=8, minute=30) ], \ [ datetime.time(hour=11, minute=45), datetime.time(hour=13, minute=0) ], \ [ datetime.time(hour=18, minute=30), datetime.time(hour=20, minute=0) ] ] del sys def DoPowersave(): os.system("sudo cpufreq-set -g powersave") def DoOnDemand(): os.system("sudo cpufreq-set -g ondemand") def GetTemp(): """ Retourne la température du système """ ofi=open(TEMPERATURE_FILE) f=ofi.read() return int(f)/TEMPERATURE_DIVISOR def GetGouv(): """ Retourne le gouverneur processeur actuellement utilisé """ ofi=open(GOUV_FILE) f=ofi.read() return f def DoOnDemand(): """ Positionne le gouverneur processeur sur « À la demande » """ os.system("sudo cpufreq-set -g ondemand") def DoPowerSave(): """ Positionne le gouverneur processeur sur « Powersave » """ os.system("sudo cpufreq-set -g powersave") class Tray_action(Tray): """ Classe dérivée de la gestion de l'icone et du menu qui gère les actions en plus """ def __init__(self, app): Tray.__init__(self, app) self.mode = 'vide' self.prev_gouv = '' self.timer = wx.Timer(self, 1) #print self.timer.GetId() self.timer.Start(3000) self.Bind(wx.EVT_TIMER, self.BoucleRapide, id=1) self.timerlent = wx.Timer(self, 2) self.timerlent.Start(60000) self.Bind(wx.EVT_TIMER, self.BoucleLente, id=2) def OnTaskBarActivate(self, evt): self.CreatePopupMenu() print "clic sur l'icone" def OnTaskBarClose(self, evt): print "Au revoir !" self.Destroy() def OnTaskBarSetPowersave(self, evt): print "appel de OnTaskBarSetPowersave" self.mode = 'MANUEL' DoPowersave() #os.system("sudo cpufreq-set -g powersave") #self.ChangeIcon(PATH + "cpu_powersave.png") def OnTaskBarSetOndemand(self, evt): print "appel de OnTaskBarSetOndemand" self.mode = 'MANUEL' DoOnDemand() #os.system("sudo cpufreq-set -g ondemand") #self.ChangeIcon(PATH + "cpu_ondemand.png") def OnTaskBarSetEco(self, evt): print "appel mode Eco" self.mode = 'ECO' def OnTaskBarSetAutomatic1(self, evt): self.mode = 'AUTO_1' print 'Mode AUTO 1' def OnTaskBarSetAutomatic2(self, evt): self.mode = 'AUTO_2' def OnTaskBarSetAutomatic3(self, evt): self.mode = 'AUTO_3' def OnTaskBarParam(self, evt): if self.mode: self.IconMonitor(1,4) else: self.ChangeIcon(PATH + "cpu.png") self.mode=not(self.mode) def BoucleLente(self, evt): """ Boucle exécutée périodiquement, à une fréquence basse """ if 'ECO' in self.mode: maintenant = time.localtime() maintenant = datetime.time(hour=maintenant.tm_hour, minute=maintenant.tm_min) #Suivant l'heure, on passe en mode Powersave ou Ondemand # Pic du matin if ( maintenant > PIC_TIME[0][0] and maintenant < PIC_TIME[0][1] ) \ or ( maintenant > PIC_TIME[1][0] and maintenant < PIC_TIME[1][1] ) \ or ( maintenant > PIC_TIME[2][0] and maintenant < PIC_TIME[2][1] ): DoPowersave() #os.system("sudo cpufreq-set -g powersave") print "Passage automatique (ECO) en mode « Économie d'énergie »" else: DoOnDemand() #os.system("sudo cpufreq-set -g ondemand") print "Passage automatique (ECO) en mode « À la demande »" def BoucleRapide(self, evt): """ Boucle exécutée périodiquement, à une fréquence haute """ if 'AUTO' in self.mode: mode_auto = int(self.mode[5]) if GetTemp() >= FREQ_AUTO_TEMP_MAX[mode_auto] and GetGouv != 'powersave\n': DoPowersave() #os.system("sudo cpufreq-set -g powersave") #self.ChangeIcon(PATH + "cpu_powersave.png") print "Passage automatique en mode «Économie d'énergie»" if GetTemp() <= FREQ_AUTO_TEMP_MIN[mode_auto] and GetGouv() != 'ondemand\n': DoOnDemand() #os.system("sudo cpufreq-set -g ondemand") #self.ChangeIcon(PATH + "cpu_ondemand.png") print "Passage automatique en mode «À la demande»" # Met à jour l'icône si besoin nouv_gouv = GetGouv() if nouv_gouv != self.prev_gouv: self.prev_gouv = nouv_gouv if nouv_gouv == 'ondemand\n': if 'AUTO' in self.mode: self.ChangeIcon(PATH + "cpu_ondemand_auto.png") else: self.ChangeIcon(PATH + "cpu_ondemand.png") if nouv_gouv == 'powersave\n': if 'AUTO' in self.mode: self.ChangeIcon(PATH + "cpu_powersave_auto.png") else: self.ChangeIcon(PATH + "cpu_powersave.png")