Page 1 sur 1

[acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 14:43
par djipey
Bonjour.

Je cherche depuis un petit moment à résoudre un tout petit problème. J'aime avoir le temps restant sur ma batterie dans mon conky. Donc bêtement j'utilise une petite commande à base d'acpi. Qui me réponde gentiment :

Code : Tout sélectionner

djipey-laptop:14:40:19:~$ acpi -V
Battery 0: Discharging, 53%, rate information unavailable
Battery 0: design capacity 4400 mAh, last full capacity 4270 mAh = 97%
Adapter 0: off-line
Thermal 0: ok, -273.2 degrees C
Thermal 0: trip point 0 switches to mode critical at temperature 149.8 degrees C
Cooling 0: LCD 7 of 7
Cooling 1: Processor 0 of 3
Cooling 2: Processor 0 of 3
Cooling 3: Processor 0 of 3
Cooling 4: Processor 0 of 3
Donc en gros, rien sur le temps restant. Par contre, mon applet dans la barre des tâches (je suis sous Mate) est lui capable de m'afficher le temps restant. D'où prend il les infos ?

Est-ce que vous auriez une idée quant à cette énigme ?

Cordialement.

Re: [acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 14:51
par vlamy
Salut, j'utilise un widget pour la batterie qui prend les infos dans le répertoire suivant :

Code : Tout sélectionner

/sys/class/power_supply/BAT0/
Je ne connais pas la correspondance de chaque fichier, mais ça semble assez standard (le même widget marche sous ubuntu et debian).
Pour le temps restant, c'est un calcul à faire à partir de des valeurs "charge_now" et "current_now".

Je ne sais pas si ça répond bien à ta question, mais c'est une façon de faire (peut être pas la meilleur) :)

Re: [acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 15:10
par djipey
Bin ça me fait faire un script pour faire le calcul. Ce que je ne comprends pas c'est que acpi ne le fasse pas de lui-même. Est-ce qu'il n'aurait pas un problème avec les chemins des fichiers système ?

Re: [acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 15:13
par vlamy
Je n'utilise pas acpi pour récupérer ces infos, mais c'est possible que tu ais des problèmes de chemin.

Tu as jeté un œil au wiki (vers la fin)?

Re: [acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 15:34
par djipey
Oui, c'est là que j'ai regardé en premier. Toi tu ne te sers que du widget ?

Re: [acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 15:39
par vlamy
Je me sers d'un widget spécifique à awesome (en lua, c'est pour ça que je ne te le propose pas), qui lit et interprète les informations brutes (celles qu'on trouve dans /sys).
Ensuite j'utilise Upower et /sbin/{halt,reboot}, pour ce qui est arrêt, veille et hibernation.

Mais je pense qu'on peut faire la même chose avec acpi, seulement je ne sais pas comment :)

EDIT : mon widget fait ça exactement, si jamais tu veux traduire en bash pour te faire un script :

Code : Tout sélectionner

batime = math.floor((charge_now / current_now) * 60)
batime_h = math.floor(batime / 60)
batime_m = string.format("%02d", batime % 60)
Sachant que "charge_now" et "current_now" sont des valeurs récupérées dans le répertoire "/sys/class/power/BAT0"

Re: [acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 15:59
par djipey
Ouais mais attends, qu'est ce que contiennent charge_now et current_now ? Des secondes ? des mAh ?
Selon ce que tu me mets, c'est des secondes hein ? (pour être sûr).

Parce que afficher le pourcentage restant, ça acpi me le fait. Mais calculer le temps restant sur la batterie, c'est un peu plus compliqué si on a que la charge restante en maA, et c'est ce qu'acpi ne me fait pas (alors qu'il devrait le faire).

Re: [acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 16:22
par vlamy
A priori je dirais des secondes oui, il faudrait demander à Rolinh, le widget en question vient de sa page.
Si tu veux en être sûr, il ne te reste plus qu'à te plonger dans la spec ACPI (bon courage !).

Je suis désolé, mais je ne trouve pas plus d'info sur ces variables.

Re: [acpi] temps restant sur la batterie

Publié : ven. 17 août 2012, 21:53
par Rolinh
Salut,

les unités de charge_now et current_now sont respectivement des micro-ampères (µA) et des micro-ampères/heure (µAh), comme on peut le deviner grâce à ce commentaire dans les sources du noyau:
linux/include/power_supply.h a écrit :/*
* All voltages, currents, charges, energies, time and temperatures in uV,
* µA, µAh, µWh, seconds and tenths of degree Celsius unless otherwise
* stated. It's driver's job to convert its raw values to units in which
* this class operates.
*/
charge_now correspond à ce qu'il reste dans la batterie à l'instant T et current_now ce qui est consommé à l'instant T.
Après, c'est juste mathématique: en divisant des µA par des µAh, il reste des heures.
Après division, on se retrouve donc, à titre d'exemple, avec un résultat comme 5.644828095027298 heures. Seulement voilà, 5 heures ça parle mais 0.644 heure, ça ne parle pas trop d'où l'opération modulo afin de récupérer le reste de la division par 60 (donc des minutes).

Pas plus compliqué que ça en fait.
J'espère que ça répond à ta question et que j'ai été assez clair. ;)

Re: [acpi] temps restant sur la batterie

Publié : sam. 18 août 2012, 09:58
par djipey
Impeccable, c'est exactement ce qu'il me fallait. Bon je ne comprends pas l'intérêt de mettre ça en micrp-ampère, des milli auraient suffit, mais bon.

Par contre, le problème que j'ai n'est en fait pas dû à acpi, mais je pense plus au kernel. Quand je suis dans /sys/class/power_supply/BAT, j'ai bien les fichiers dont on parle. Quand je suis branché sur le secteur, je peux faire un cat sur un current_now, j'ai une réponse. Par contre dés que je suis sur batterie :

Code : Tout sélectionner

djipey-laptop:09:52:48:/sys/class/power_supply/BAT$ cat current_now
cat: current_now: Aucun périphérique de ce type
Et du coup, je ne sais toujours pas comment fait mon applet pour pouvoir afficher le temps restant. D'où peut-il prendre les infos si même les fichiers système sont vides ?

Re: [acpi] temps restant sur la batterie

Publié : sam. 18 août 2012, 10:28
par Rolinh
Tu peux trouver la dernière version de mon widget en lua sur le dépôt git, cela peut t'aider pour ton implémentation en python. ;)
En fait, pour une raison que j'ignore totalement, en fonction du fait d'être sur secteur ou pas, ces fichiers changent parfois (mais cela ne semble pas être toujours le cas chez moi en tout cas!) pour deux autres:
energy_now et power_now. Pourquoi? Je l'ignore. De plus, l'unité de ces fichiers ne semble plus être des µA et µAh mais de µW et µWh... Bref, cela ne change rien au calcul. Donc ce que je fais dans mon widget, c'est que si les fichiers current_now et charge_now ne sont pas présent, je pioche dans energy_now et power_now respectivement:

Code : Tout sélectionner

	f = io.open(path .. "charge_now", "r")
	if not f then
		f = assert(io.open(path .. "energy_now", "r"))
	end
	charge_now = f:read("*number")
	f:close()
et pareil pour l'autre:

Code : Tout sélectionner

		f = io.open(path .. "current_now", "r")
		if not f then
			f = assert(io.open(path .. "power_now", "r"))
		end
		current_now = f:read("*number")
		f:close()
Il faut aussi que tu fasses attention au fait d'être en charge ou pas. En effet, si la batterie n'est pas utilisée, current_now/power_now vaut 0 et on se retrouve donc avec une division par 0...

Re: [acpi] temps restant sur la batterie

Publié : sam. 18 août 2012, 10:42
par djipey
Étrange quand même. Et les fichiers energy_now et power_now sont crées à la volée ? Dans le même répertoire selon ton code. Chez moi, rien ne change si je branche/débranche la batterie. En fait current_now n'est même pas supprimé, il n'est juste plus accessible avec cat.

Re: [acpi] temps restant sur la batterie

Publié : sam. 18 août 2012, 10:54
par Rolinh
djipey a écrit :Et les fichiers energy_now et power_now sont crées à la volée ? Dans le même répertoire selon ton code.
Exactement.

Par contre, j'avoue que je ne vois pas trop pour le fait qu'il ne soit plus accessible quand tu es sur batterie...

Re: [acpi] temps restant sur la batterie

Publié : sam. 18 août 2012, 11:05
par djipey
Je suis coincé alors. energy_now et power_now ne sont pas crées chez moi.

Du coup je suis allé voir sur le github des applets Mate, https://github.com/mate-desktop/mate-ap ... r/battstat.

J'ai essayé de voir où il prenait ses infos, mais je suis très mauvais en C, je ne suis pas arrivé à comprendre comment ils organisent leur projet.

Re: [acpi] temps restant sur la batterie

Publié : dim. 19 août 2012, 13:58
par Rolinh
C'est basé sur la lib upower (=> dbus) (hal aussi mais de toute façon, c'est déprécié maintenant).
Tu devrais pouvoir trouver tout ce qu'il te faut via le module dbus pour python. ;)