Page 1 sur 1
[Openbox ou autre] Connaître son niveau de batterie
Publié : jeu. 18 nov. 2010, 16:10
par Kiljaeden
Salut !
je cherchais un utilitaire qui m'aurait permis de connaître mon niveau de batterie facilement, sans passer par un système lourd comme des desklets ou gnome-power-manager. Je voulais du KISS.
Donc j'ai fait ça en Python, et j'en suis assez satisfait. Ça affiche une notification standard, comme network-manager par exemple. Perso, j'appelle ce script via un Super-B, mais on peut s'arranger avec cron pour qu'il nous le lance toutes les 20 minutes par exemple.
Donc, voilà le machin :
Code : Tout sélectionner
#!/usr/bin/python2
import sys
import time
import os
import pynotify
import commands
import pyinotify
encharge = commands.getoutput("acpi -a | grep 'on'")
vol = commands.getoutput("acpi -b | grep 'Battery 0' | awk '{ print $4}' | cut -d '%' -f1")
etat2 = "Batterie"
print(encharge)
if encharge == "":
encharge = ""
else:
encharge = "-plugged"
if vol != "":
vol = int(vol)
if vol < 10:
etat = 'notification-battery-000%s' % (encharge)
etat2 = "Batterie faible"
elif vol < 20:
etat = 'notification-battery-010%s' % (encharge)
etat2 = "Batterie faible"
elif vol < 30:
etat = 'notification-battery-020%s' % (encharge)
etat2 = "Batterie faible"
elif vol < 40:
etat = 'notification-battery-030%s' % (encharge)
elif vol < 50:
etat = 'notification-battery-040%s' % (encharge)
elif vol < 60:
etat = 'notification-battery-050%s' % (encharge)
elif vol < 70:
etat = 'notification-battery-060%s' % (encharge)
elif vol < 80:
etat = 'notification-battery-070%s' % (encharge)
elif vol < 90:
etat = 'notification-battery-080%s' % (encharge)
elif vol < 100:
etat = 'notification-battery-090%s' % (encharge)
else:
etat = 'notification-battery-100%s' % (encharge)
vol = str(vol)
vol = vol + "%"
else:
etat = 'notification-power-disconnected'
etat2 = "Pas de batterie"
vol = "Ordinateur sur secteur"
commande = "notify-send -i %s '%s' '%s'" % (etat, etat2, vol)
print(commande)
os.popen(commande)
C'est peut être codé salement, mais ça marche. En espérant que ça puisse servir à quelqu'un !
Je vais peut être améliorer le système pour afficher le temps restant avant la charge/décharge complète.
Qu'en pensez-vous ?
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : jeu. 18 nov. 2010, 17:25
par tuxce
salut,
Kiljaeden a écrit :Perso, j'appelle ce script via un Super-B
c'est quoi ?
Pour ce qui est du code, quand on utilise aussi souvent les appels au shell, autant faire un script shell :p
Sinon, les imports, tu t'en sers pas, autant ne pas les importer.
l'ensemble des "if" peut largement être amélioré:
Code : Tout sélectionner
etat2="Batterie"
vol = int(vol)
etat = "notification-battery-%03d%s" % (vol/20*20, encharge)
if vol < 30 :
etat2 += " faible"
EDIT: j'oubliais, je voulais poster au départ pour te dire qu'il existe
uevt si tu veux pas gnome-manager, il utilise upower et affiche une icone de notification.
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : ven. 19 nov. 2010, 20:40
par Ricard
Super-B, c'est un raccourcis clavier. (la touche windows + B)
Beau travail en tout cas Kiljaeden. Bonne initiative.
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : sam. 20 nov. 2010, 15:42
par Kiljaeden
Je me doutais bien que j'aurais pu améliorer le truc des des if, mais je trouvais pas comment. Effectivement, Super-B, c'est un raccourcis clavier.
Quant à faire un script shell, c'est ce que je voulais faire au début, mais je suis plus à l'aise avec Python, c'est tout.
Si vous avez d'autres suggestions, je suis preneur.
J'ai amélioré le truc pour y intégrer le temps restants. C'était pas bien compliqué. Le code devient :
Code : Tout sélectionner
#!/usr/bin/python2
import sys
import time
import os
import commands
encharge = commands.getoutput("acpi -a | grep 'on'")
vol = commands.getoutput("acpi -b | grep 'Battery 0' | awk '{ print $4}' | cut -d '%' -f1")
temps = str(commands.getoutput("acpi -b | grep 'Battery 0' | awk '{ print $5}'"))
etat2 = "Batterie"
print(encharge)
if encharge == "":
encharge = ""
else:
encharge = "-plugged"
if vol != "":
vol = int(vol)
if vol < 10:
etat = 'notification-battery-000%s' % (encharge)
etat2 = "Batterie faible"
elif vol < 20:
etat = 'notification-battery-010%s' % (encharge)
etat2 = "Batterie faible"
elif vol < 30:
etat = 'notification-battery-020%s' % (encharge)
etat2 = "Batterie faible"
elif vol < 40:
etat = 'notification-battery-030%s' % (encharge)
elif vol < 50:
etat = 'notification-battery-040%s' % (encharge)
elif vol < 60:
etat = 'notification-battery-050%s' % (encharge)
elif vol < 70:
etat = 'notification-battery-060%s' % (encharge)
elif vol < 80:
etat = 'notification-battery-070%s' % (encharge)
elif vol < 90:
etat = 'notification-battery-080%s' % (encharge)
elif vol < 100:
etat = 'notification-battery-090%s' % (encharge)
else:
etat = 'notification-battery-100%s' % (encharge)
vol = str(vol)
vol = vol + "% - " + temps + " restants"
else:
etat = 'notification-power-disconnected'
etat2 = "Pas de batterie"
vol = "Ordinateur sur secteur"
commande = "notify-send -i %s '%s' '%s'" % (etat, etat2, vol)
print(commande)
os.popen(commande)
J'ai enlevé quelques imports qui ne sont pas utiles. Je pense que tous ceux qui restent ne le sont pas forcément non plus, mais je me souviens plus à quoi ils correspondent en fait

Pour changer les if, je ne l'ai pas encore fait, car je ne comprends pas bien comment fonctionne la ligne :
Et en général, j'évite d'utiliser ce que je ne comprends pas. Mais si quelqu'un pouvait me l'expliquer, ce serait géant.
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : sam. 20 nov. 2010, 18:24
par tuxce
Les icônes de la batterie vont par pas de 20, le vol/20*20, c'est pour avoir un arrondi.
Le %03d c'est pour avoir le 0 devant.
Et la construction "..." % (..,...) est typique de python.
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : sam. 20 nov. 2010, 20:03
par schaars
Bonsoir
Ce script m'intéresse : avec awesome je n'ai pas de notification lorsque la batterie est presque vide, et ça m'arrive d'oublier de brancher l'ordinateur
J'ai enlevé 2 imports inutiles, et ai rajouté un niveau d'urgence dans l'appel à notify-send afin que le message soit bien lisible lorsque la batterie est faible.
Et j'ai nettoyé le code à ma façon
Également, il y a des cas où ce qui est affiché n'est pas bon. Par exemple, je suis actuellement sur secteur et avec la batterie chargée à 100% mais le script ne m'affiche pas "ordinateur sur secteur".
Code : Tout sélectionner
#!/usr/bin/python2
import os
import commands
# initialisation
etat2 = "Batterie"
urgence="normal"
# est-ce que la batterie est en charge ?
encharge = commands.getoutput("acpi -a | grep 'on'")
if encharge != "":
encharge = "-plugged"
# Quel est le niveau de la batterie ?
vol = commands.getoutput("acpi -b | grep 'Battery 0' | awk '{ print $4}' | cut -d '%' -f1")
if vol != "":
vol = int(vol)
etat = "notification-battery-%03d%s" % (vol/20*20, encharge)
if vol < 10:
etat2 = "Batterie faible"
urgence="critical"
# Lorsque l'ordi est sur secteur et la batterie
# est pleine, temps vaut ""
temps = str(commands.getoutput("acpi -b | grep 'Battery 0' | awk '{ print $5}'"))
if temps == "":
temps = "100%"
vol = str(vol) + "% - " + temps + " restants"
else:
etat = 'notification-power-disconnected'
etat2 = "Pas de batterie"
vol = "Ordinateur sur secteur"
commande = "notify-send -u %s -i %s '%s' '%s'" % (urgence, etat, etat2, vol)
print(commande)
os.popen(commande)
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : sam. 20 nov. 2010, 21:11
par banditblue
il y a plusieur facon d'avoir une notification de batterie
pour l'avoir dans fbpanel il suffit de décocher les #
sinon on peux l'intégrer dans le conkyrc
Code : Tout sélectionner
${font SF Square Head:size=10}Batterie${font} ${hr 2}
Batterie
${voffset -12}${offset 50}:${offset 55}${battery_time BAT0}
Charge
${voffset -12}${offset 50}:${offset 5}${battery_percent BAT0}%
${offset 95}${voffset -12}${battery_bar 5,80 BAT0}
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : dim. 21 nov. 2010, 14:34
par Kiljaeden
En fait, le message "ordinateur sur secteur" s'affiche quand l'ordi est branché sans batterie, pas quand il est branché alors que la batterie se recharge. It's not a bug, it's a feature.
Sinon, question : que change le niveau d'urgence de la notification ?
Autre question : "eeepc 1005ha-h + Archlinux + awesome = 9h30 d'autonomie !"
Comment tu fais ça ??
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : dim. 21 nov. 2010, 15:56
par schaars
If it's a feature, then ok

Disons que ça me perturbe de voir le message "100% - 100% restants" lorsque je suis sur secteur.
Avec le niveau d'urgence critical, la notification s'affiche sur fond rouge et ne disparaît pas tant qu'on a pas cliqué dessus.
Il existe également les niveaux medium et low, mais je ne vois pas de différence entre les deux.
Avec mon eeepc, j'ai désactivé tout ce dont je ne me sers pas (bluetooth + webcam), ai installé juste ce dont j'ai besoin, et en plus je lance powertop, qui m'aide à réduire la consommation d'énergie en désactivant les choses non essentielles.
J'ai également remplacé le disque dur par un ssd.
Cela fait longtemps que je n'ai pas mesuré l'autonomie. Je pense que si je le laisse allumé, sans le mettre en veille, alors je doit arriver vers 10h. Mais bien évidemment cela dépend de l'utilisation, et en utilisation de tous les jours je dois tourner autour de 7h.
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : lun. 22 nov. 2010, 08:17
par oktoberfest
Kiljaeden a écrit :
J'ai enlevé quelques imports qui ne sont pas utiles. Je pense que tous ceux qui restent ne le sont pas forcément non plus, mais je me souviens plus à quoi ils correspondent en fait

...
Et en général, j'évite d'utiliser ce que je ne comprends pas. Mais si quelqu'un pouvait me l'expliquer, ce serait géant.
Tu trouves pas que ces deux phrases sont un peu contradictoires...
Je ne connais pas grand chose à python, mais j'imagine que si tu commentes les imports, python va râler. Il te suffit ensuite de les incorporer un à un pour voir si cela a un effet.
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : lun. 22 nov. 2010, 12:47
par Kiljaeden
Pour l'histoire du 100% - 100% restants, je verrais ce que je peux faire dès que j'ai un moment. Comment fais-tu pour désactiver certains périphériques ? Peut-on le faire "à la volée", c'est à dire seulement quand on veut ?
@oktoberfest : oui, c'est contradictoire, c'est que j'avais récupéré un bout de code d'un autre script python que j'avais fait, et j'avais pas cherché à voir à quoi correspondaient les imports.
Re: [Openbox ou autre] Connaître son niveau de batterie
Publié : lun. 22 nov. 2010, 13:03
par schaars
Pour désactiver la webcam je ne charge pas le pilote. Pour le bluetooth il y a un raccourci clavier permettant de l'éteindre/l'allumer. Et je ne charge pas le pilote.
De manière générale décharger les pilotes non utilisés économise l'énergie.
Après, powertop me donne des conseils et me dit quoi faire, par exemple rajouter usb.autosuspend=1 dans les options de démarrage du noyau.
Concernant le script, je le lance avec cron toutes les 10 minutes et lui ai dit de n'afficher une notification que lorsque le niveau de la batterie est en dessous de 5%.