[Openbox ou autre] Connaître son niveau de batterie

Xorg, Compiz, KDE / Gnome / Xfce / Fluxbox / e17 / fvwm ... GDM/KDM/XDM...
Répondre
Kiljaeden
archer
Messages : 107
Inscription : sam. 19 sept. 2009, 12:31
Localisation : France

[Openbox ou autre] Connaître son niveau de batterie

Message 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 ?
Arch Linux x86_64 sur Dell Latitude 6490
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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.
Avatar de l’utilisateur
Ricard
yeomen
Messages : 255
Inscription : lun. 03 sept. 2007, 20:59

Re: [Openbox ou autre] Connaître son niveau de batterie

Message par Ricard »

Super-B, c'est un raccourcis clavier. (la touche windows + B)
Beau travail en tout cas Kiljaeden. Bonne initiative.
Kiljaeden
archer
Messages : 107
Inscription : sam. 19 sept. 2009, 12:31
Localisation : France

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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 :

Code : Tout sélectionner

etat = "notification-battery-%03d%s" % (vol/20*20, encharge)
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.
Arch Linux x86_64 sur Dell Latitude 6490
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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.
Avatar de l’utilisateur
schaars
Hankyu
Messages : 44
Inscription : mer. 27 août 2008, 19:59

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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)
eeepc 1005ha-h + Archlinux + awesome = 9h30 d'autonomie !
ceci n'est pas un easter egg !
Avatar de l’utilisateur
banditblue
Elfe
Messages : 591
Inscription : dim. 10 janv. 2010, 10:19

Re: [Openbox ou autre] Connaître son niveau de batterie

Message par banditblue »

il y a plusieur facon d'avoir une notification de batterie
pour l'avoir dans fbpanel il suffit de décocher les #

Code : Tout sélectionner

Plugin {
    type = battery
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}
La connaîssance n'a pas de limite.
Mais sa valeur, est d'autant plus grande, une fois partagé


Pc fixe --- MSI MPG Z490 Gaming Edge WiFi, I9-9900Kf, RTX3070Ti, 64Go DDR4, SSD 1Tera nvme gen4 Samsung 980 pro, SSD 1Tera WD Blacksn850X,3HDD 5Tera
Eeepc Asus 1015pem --- Intel Atom N550 Dual-core 1.5Ghz / DD 1Tera 7200rpm / Ram 2Go

Screenshot + Les Conky ===> http://forums.archlinux.fr/post85405.html#p85405
Kiljaeden
archer
Messages : 107
Inscription : sam. 19 sept. 2009, 12:31
Localisation : France

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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 ??
Arch Linux x86_64 sur Dell Latitude 6490
Avatar de l’utilisateur
schaars
Hankyu
Messages : 44
Inscription : mer. 27 août 2008, 19:59

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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.
eeepc 1005ha-h + Archlinux + awesome = 9h30 d'autonomie !
ceci n'est pas un easter egg !
oktoberfest
Maître du Kyudo
Messages : 1855
Inscription : mer. 06 janv. 2010, 13:51
Localisation : Ried - Alsace - France

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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... :humour:

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.
La majorité des bugs se situe entre la chaise et le clavier...
Arrêtez de vous prendre la tête avec les partitions... passez au LVM
Kiljaeden
archer
Messages : 107
Inscription : sam. 19 sept. 2009, 12:31
Localisation : France

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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.
Arch Linux x86_64 sur Dell Latitude 6490
Avatar de l’utilisateur
schaars
Hankyu
Messages : 44
Inscription : mer. 27 août 2008, 19:59

Re: [Openbox ou autre] Connaître son niveau de batterie

Message 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%.
eeepc 1005ha-h + Archlinux + awesome = 9h30 d'autonomie !
ceci n'est pas un easter egg !
Répondre