cl_actions.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #! /usr/bin/env python
  2. #-*- coding: utf-8 -*-
  3. from cl_taskbaricon import Tray
  4. import os,sys
  5. import wx
  6. import datetime
  7. import time
  8. # Config
  9. PATH=os.path.abspath(os.path.dirname(sys.argv[0])) + '/'
  10. TEMPERATURE_FILE = '/sys/class/thermal/thermal_zone0/temp'
  11. TEMPERATURE_DIVISOR = 1000
  12. GOUV_FILE='/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'
  13. FREQ_AUTO_TEMP_MAX = [60, 65, 70]
  14. FREQ_AUTO_TEMP_MIN = [55, 60, 65]
  15. PIC_TIME = [ [ datetime.time(hour=6, minute=30), datetime.time(hour=8, minute=30) ], \
  16. [ datetime.time(hour=11, minute=45), datetime.time(hour=13, minute=0) ], \
  17. [ datetime.time(hour=18, minute=30), datetime.time(hour=20, minute=0) ] ]
  18. del sys
  19. def DoPowersave():
  20. os.system("sudo cpufreq-set -g powersave")
  21. def DoOnDemand():
  22. os.system("sudo cpufreq-set -g ondemand")
  23. def GetTemp():
  24. """ Retourne la température du système """
  25. ofi=open(TEMPERATURE_FILE)
  26. f=ofi.read()
  27. return int(f)/TEMPERATURE_DIVISOR
  28. def GetGouv():
  29. """ Retourne le gouverneur processeur actuellement utilisé """
  30. ofi=open(GOUV_FILE)
  31. f=ofi.read()
  32. return f
  33. def DoOnDemand():
  34. """ Positionne le gouverneur processeur sur « À la demande » """
  35. os.system("sudo cpufreq-set -g ondemand")
  36. def DoPowerSave():
  37. """ Positionne le gouverneur processeur sur « Powersave » """
  38. os.system("sudo cpufreq-set -g powersave")
  39. class Tray_action(Tray):
  40. """ Classe dérivée de la gestion de l'icone et du menu qui gère les actions en plus """
  41. def __init__(self, app):
  42. Tray.__init__(self, app)
  43. self.mode = 'vide'
  44. self.prev_gouv = ''
  45. self.timer = wx.Timer(self, 1)
  46. #print self.timer.GetId()
  47. self.timer.Start(3000)
  48. self.Bind(wx.EVT_TIMER, self.BoucleRapide, id=1)
  49. self.timerlent = wx.Timer(self, 2)
  50. self.timerlent.Start(60000)
  51. self.Bind(wx.EVT_TIMER, self.BoucleLente, id=2)
  52. def OnTaskBarActivate(self, evt):
  53. self.CreatePopupMenu()
  54. print "clic sur l'icone"
  55. def OnTaskBarClose(self, evt):
  56. print "Au revoir !"
  57. self.Destroy()
  58. def OnTaskBarSetPowersave(self, evt):
  59. print "appel de OnTaskBarSetPowersave"
  60. self.mode = 'MANUEL'
  61. DoPowersave()
  62. #os.system("sudo cpufreq-set -g powersave")
  63. #self.ChangeIcon(PATH + "cpu_powersave.png")
  64. def OnTaskBarSetOndemand(self, evt):
  65. print "appel de OnTaskBarSetOndemand"
  66. self.mode = 'MANUEL'
  67. DoOnDemand()
  68. #os.system("sudo cpufreq-set -g ondemand")
  69. #self.ChangeIcon(PATH + "cpu_ondemand.png")
  70. def OnTaskBarSetEco(self, evt):
  71. print "appel mode Eco"
  72. self.mode = 'ECO'
  73. def OnTaskBarSetAutomatic1(self, evt):
  74. self.mode = 'AUTO_1'
  75. print 'Mode AUTO 1'
  76. def OnTaskBarSetAutomatic2(self, evt):
  77. self.mode = 'AUTO_2'
  78. def OnTaskBarSetAutomatic3(self, evt):
  79. self.mode = 'AUTO_3'
  80. def OnTaskBarParam(self, evt):
  81. if self.mode:
  82. self.IconMonitor(1,4)
  83. else:
  84. self.ChangeIcon(PATH + "cpu.png")
  85. self.mode=not(self.mode)
  86. def BoucleLente(self, evt):
  87. """ Boucle exécutée périodiquement, à une fréquence basse """
  88. if 'ECO' in self.mode:
  89. maintenant = time.localtime()
  90. maintenant = datetime.time(hour=maintenant.tm_hour, minute=maintenant.tm_min)
  91. #Suivant l'heure, on passe en mode Powersave ou Ondemand
  92. # Pic du matin
  93. if ( maintenant > PIC_TIME[0][0] and maintenant < PIC_TIME[0][1] ) \
  94. or ( maintenant > PIC_TIME[1][0] and maintenant < PIC_TIME[1][1] ) \
  95. or ( maintenant > PIC_TIME[2][0] and maintenant < PIC_TIME[2][1] ):
  96. DoPowersave() #os.system("sudo cpufreq-set -g powersave")
  97. print "Passage automatique (ECO) en mode « Économie d'énergie »"
  98. else:
  99. DoOnDemand() #os.system("sudo cpufreq-set -g ondemand")
  100. print "Passage automatique (ECO) en mode « À la demande »"
  101. def BoucleRapide(self, evt):
  102. """ Boucle exécutée périodiquement, à une fréquence haute """
  103. if 'AUTO' in self.mode:
  104. mode_auto = int(self.mode[5])
  105. if GetTemp() >= FREQ_AUTO_TEMP_MAX[mode_auto] and GetGouv != 'powersave\n':
  106. DoPowersave() #os.system("sudo cpufreq-set -g powersave")
  107. #self.ChangeIcon(PATH + "cpu_powersave.png")
  108. print "Passage automatique en mode «Économie d'énergie»"
  109. if GetTemp() <= FREQ_AUTO_TEMP_MIN[mode_auto] and GetGouv() != 'ondemand\n':
  110. DoOnDemand() #os.system("sudo cpufreq-set -g ondemand")
  111. #self.ChangeIcon(PATH + "cpu_ondemand.png")
  112. print "Passage automatique en mode «À la demande»"
  113. # Met à jour l'icône si besoin
  114. nouv_gouv = GetGouv()
  115. if nouv_gouv != self.prev_gouv:
  116. self.prev_gouv = nouv_gouv
  117. if nouv_gouv == 'ondemand\n':
  118. if 'AUTO' in self.mode:
  119. self.ChangeIcon(PATH + "cpu_ondemand_auto.png")
  120. else:
  121. self.ChangeIcon(PATH + "cpu_ondemand.png")
  122. if nouv_gouv == 'powersave\n':
  123. if 'AUTO' in self.mode:
  124. self.ChangeIcon(PATH + "cpu_powersave_auto.png")
  125. else:
  126. self.ChangeIcon(PATH + "cpu_powersave.png")