| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- #! /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")
|