-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbattery
executable file
·108 lines (90 loc) · 4.12 KB
/
battery
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/python3
import os
import re
import sys
##### parametres :
## seuil_critiques 1 et 2, à partir desquels déclencher les nagbar warning (orange) et error (rouge).
seuil_critique_33 = 20
seuil_critique_warning=17
seuil_critique_error=13
## adresse du dossier où écrire les checkpoints
checkpoint_file_dir="/tmp/tmp_ram"
##### fonctions
def nagbar_launch_once(seuil=seuil_critique_warning
,checkpoint_file_name="i3blocks_battery_seuil_critique_warning"
,checkpoint_file_dir=checkpoint_file_dir
,type_nagbar = "warning"):
try:
with open(checkpoint_file_dir+"/"+checkpoint_file_name,"r") as fichier: pass
except:
with open(checkpoint_file_dir+"/"+checkpoint_file_name,"w") as fichier: pass
os.popen("i3-msg fullscreen disable")
# os.system("i3-nagbar -t " + type_nagbar + " -m 'batterie < "+str(seuil)+"% : branchez votre chargeur'")
os.popen("i3-nagbar -t " + type_nagbar + " -m 'batterie < "+str(seuil)+"% : branchez votre chargeur' &")
def nagbar_reset_memory( checkpoint_file_name="i3blocks_battery_seuil_critique_warning"
,checkpoint_file_dir=checkpoint_file_dir):
try:
with open(checkpoint_file_dir+"/"+checkpoint_file_name,"r") as fichier: pass
except: pass
else:
os.remove(checkpoint_file_dir+"/"+checkpoint_file_name)
## récupération du bat_number à partir des variables d'environnement, au cas ou on voudrait un numéro de batterie autre que le 0
try:
bat_number=os.environ["BLOCK_INSTANCE"]
except KeyError:
bat_number="0"
## on récupère la sortie de la commande acpi -b, avec os.popen (os.system exécute la commande et ne renvoie pas la string stdout)
output_acpi=os.popen("acpi -b | grep 'Battery "+ bat_number +"'").readlines()[0]
## on ne prend que les infos qui nous intéressent (on aurait pu faire un str.split également)
res_acpi=re.search(r".*:\s?(?P<state>\w+),\s?(?P<percent>\d+)%,\s?(?P<remaining>\d+:\d+).*",output_acpi)
if not res_acpi is None:
if res_acpi.group('state') == "Discharging":
state = "DIS"
elif res_acpi.group('state') == "Charging":
state = "CHR"
else:
state = "??"
percent = res_acpi.group('percent')
remaining = res_acpi.group('remaining')
else:
raise Exception("format de la sortie acpi non reconnu")
## on prépare les version longues et courtes du texte à afficher
short_text = percent + "%" + " " + state
full_text = short_text + " (" + remaining + ")"
## on prépare la couleur à afficher
if float(percent) < 20:
color="#FF0000"
elif float(percent) < 40:
color="#FFAE00"
elif float(percent) < 60:
color="#FFF600"
elif float(percent) < 85:
color="#A8FF00"
else:
color="#ffffff"
## on imprime les sorties, dans l'ordre full_text, short_text, color
print (full_text)
print (short_text)
print (color)
## si batterie sous un certain seuil, affichage de la popup en nagbar.
## on affiche la nagbar uniquement une fois par passage de seuil, et non à chaque lancement du programme.
## pour ce faire, on créé un fichier lorsqu'on affiche pour la première fois la nagbar, et on check ensuite sa présence.
## ce fichier est créé en ram sur /tmp/tmp_ram (un tmpfs, voir fstab), et est détruit sitôt que la batterie est remise en charge ou dépasse les seuils paramétrés en début de programme
if state=="DIS" and float(percent) < seuil_critique_error:
nagbar_launch_once( seuil = seuil_critique_error
,checkpoint_file_name="i3blocks_battery_seuil_critique_error"
,checkpoint_file_dir=checkpoint_file_dir
,type_nagbar = "error")
elif state=="DIS" and float(percent) < seuil_critique_warning:
nagbar_launch_once( seuil = seuil_critique_warning
,checkpoint_file_name="i3blocks_battery_seuil_critique_warning"
,checkpoint_file_dir=checkpoint_file_dir
,type_nagbar = "warning")
elif state=="CHR" or float(percent) >= seuil_critique_error:
nagbar_reset_memory( checkpoint_file_name="i3blocks_battery_seuil_critique_error"
,checkpoint_file_dir=checkpoint_file_dir)
nagbar_reset_memory( checkpoint_file_name="i3blocks_battery_seuil_critique_warning"
,checkpoint_file_dir=checkpoint_file_dir)
## urgent flag (33)
if state == 'DIS' and float(percent) < seuil_critique_33:
sys.exit(33)