Bonjour,
est-il possible de savoir si un ordinateur portable est branché sur secteur ?
Bonjour,
est-il possible de savoir si un ordinateur portable est branché sur secteur ?
J'y avais pensé.
En fait, je voulais à la base utiliser le framework ATTU (Ask To The User) mais la programmation de ce dernier m'a paru un peu compliqué.
Plus sérieusement, quelqu'un sait-il si cela est faisable en Python ?
Salut,
Techniquement il faut parler à la bestiole et ce genre d'informations relève plutôt du "BIOS" et de fait, Python est un peu trop "high level" pour pouvoir le faire directement.
"Normalement", la plupart des bestiaux implémentent plus ou moins correctement un standard appelé "Advanced Configuration and Power Interface" qui permettra à l'OS de connaître le "statut" des différents matériels connectés ou contenus dans la "boîte" et de générer des transitions en fonction de l'activité et de l'état.
Note: ACPI est réalisé par le BIOS.
=> Dans le cas ou le PC dispose d'un BIOS "ACPI", l'OS sait sur quelle API se reposer pour récupérer les informations sur la configuration et la gestion du Power.
Maintenant si un développeur veut accéder à... il faut trouver le pilote/driver qui lui fournira une API "pour"....
Et comme en général cette API est compatible C, il n'est pas impossible d'espérer de l'attaquer en Python.
Sur U*X, la partie visible de l'iceberg est /proc/acpi...
=> Tu sais quoi demander à Google pour trouver ton bonheur...
Note: Le BIOS (et donc ACPI) étant sous la responsabilité de l'assembleur des composants de la boîte, la partie cachée de l'iceberg risque d'être pleine de surprises côté homogénéïté des interfaces entre différents modèles, assembleurs,... Ce que nous permettra d'en voir/utiliser l'OS est une autre histoire.
Bon courage,
- W
Salut à toi ô illustre wiztricks. Ça va, je n'en fais pas trop..
Tout à fait. Ceci m'a amené ici. Il va falloir que je creuse un peu plus pour mon Mac O$ et pour Windaube.
Sous Ubuntu, j'ai essayé :
Ma batterie étant juste chargée à 6%, le code renvoie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 # -*- coding: utf-8 -*- # Source # http://groups.google.com/group/comp.lang.python/browse_thread/thread/ca37fae5aaabeb70/c52b7b6d2e8cfdbd?lnk=raot&pli=1 from glob import glob for fname in glob('/proc/acpi/battery/BAT*/*'): f = file(fname) for line in f: print(line) f.close()
Ma portable branché sur secteur, le code renvoie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 alarm: unsupported present: yes capacity state: ok charging state: discharging present rate: 717 mA remaining capacity: 230 mAh present voltage: 10512 mV present: yes design capacity: 4400 mAh last full capacity: 3820 mAh battery technology: rechargeable design voltage: 10800 mV design capacity warning: 220 mAh design capacity low: 132 mAh capacity granularity 1: 264 mAh capacity granularity 2: 3780 mAh model number: UM09H31 serial number: battery type: Lion OEM info: SANYO
La valeur de "charging state" répond à ma question sous Ubuntu au moins, et sûrement sous la majorité des distributions Linux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 alarm: unsupported present: yes capacity state: ok charging state: charging present rate: 0 mA remaining capacity: 230 mAh present voltage: 10834 mV present: yes design capacity: 4400 mAh last full capacity: 3820 mAh battery technology: rechargeable design voltage: 10800 mV design capacity warning: 220 mAh design capacity low: 132 mAh capacity granularity 1: 264 mAh capacity granularity 2: 3780 mAh model number: UM09H31 serial number: battery type: Lion OEM info: SANYO
Pour MacBook, il y a ce snippet. Ceci donne le code "mal fait" suivant :
Ceci m'affiche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #! /usr/bin/env python3 # Source # http://www.python-forum.org/pythonforum/viewtopic.php?f=18&t=20406&start=0 import subprocess process = subprocess.Popen(['pmset', '-g', 'pslog'], shell=False, stdout=subprocess.PIPE) for i in range(5): line = process.stdout.readline() line = line.decode('utf8') print(line)
Plus que le cas de Windaube à gérer...
Code : Sélectionner tout - Visualiser dans une fenêtre à part -InternalBattery-0 99%; charged; 0:00 remaining
Partager