BatInfo, une lib Python pour vos batteries

Je souhaitais ajouter dans Glances un plugin permettant de superviser l'état des batteries. J'ai donc commencé à chercher une librairie Python permettant de s'acquiter le plus simplement possible de cette tache qui sous un système GNU/Linux consiste à analyser le répertoire /sys/class/power_supply maintenu à jour par le noyau Linux.

Comme je n'ai pas trouvé mon bonheur, j'ai donc décidé de développer un librairie Python: BatInfo.

Les sources de cette librairie sont disponibles sur Github en licence LGPL.

Installation

L'installation sur votre système peut se faire simplement via la librairie Pypi:

sudo pip install batinfo

L'utilisation de la librairie dans vos développement Python est la suivante, on commence par inclure la librairie:

import batinfo

Puis on créé une instance (bat) de la classe principale (batteries):

bat = batinfo.batteries()

On peut récupérer les données brutes (format JSON) en utilisant:

bat.stat
[{"status": "Full", "capacity": 50, "name": "CMB1", "uevent": "POWER_SUPPLY_NAME=CMB1\\nPOWER_SUPPLY_STATUS=Full\\nPOWER_SUPPLY_PRESENT=1\\nPOWER_SUPPLY_TECHNOLOGY=Li-ion\\nPOWER_SUPPLY_CYCLE_COUNT=0\\nPOWER_SUPPLY_VOLTAGE_MIN_DESIGN=10800000\\nPOWER_SUPPLY_VOLTAGE_NOW=12496000\\nPOWER_SUPPLY_CURRENT_NOW=0\\nPOWER_SUPPLY_CHARGE_FULL_DESIGN=5800000\\nPOWER_SUPPLY_CHARGE_FULL=5800000\\nPOWER_SUPPLY_CHARGE_NOW=3900000\\nPOWER_SUPPLY_CAPACITY=100\\nPOWER_SUPPLY_MODEL_NAME=CP293550-01\\nPOWER_SUPPLY_MANUFACTURER=Fujitsu\\nPOWER_SUPPLY_SERIAL_NUMBER=01A-Z100320001158Z", "alarm": 0, "charge_full": 5800000, "voltage_now": 12496000, "serial_number": "01A-Z100320001158Z", "cycle_count": 0, "current_now": 0, "charge_now": 3900000, "voltage_min_design": 10800000, "path": "/sys/class/power_supply/CMB1", "technology": "Li-ion", "manufacturer": "Fujitsu", "type": "Battery", "model_name": "CP293550-01", "present": 1, "charge_full_design":5800000}]

Les données brutes se présentent sous la forme d'une liste de dictionnaire (un dictionnaire par batterie présente sur votre système). Comme la plupart du temps les machines (portable) ont une seule batterie, on peut avoir le dictionnaire associé à cette première batterie avec:

bat.stat[0]
{"status": "Full", "capacity": 100, "name": "CMB1", "uevent": "POWER_SUPPLY_NAME=CMB1\\nPOWER_SUPPLY_STATUS=Full\\nPOWER_SUPPLY_PRESENT=1\\nPOWER_SUPPLY_TECHNOLOGY=Li-ion\\nPOWER_SUPPLY_CYCLE_COUNT=0\\nPOWER_SUPPLY_VOLTAGE_MIN_DESIGN=10800000\\nPOWER_SUPPLY_VOLTAGE_NOW=12496000\\nPOWER_SUPPLY_CURRENT_NOW=0\\nPOWER_SUPPLY_CHARGE_FULL_DESIGN=5800000\\nPOWER_SUPPLY_CHARGE_FULL=5800000\\nPOWER_SUPPLY_CHARGE_NOW=3900000\\nPOWER_SUPPLY_CAPACITY=100\\nPOWER_SUPPLY_MODEL_NAME=CP293550-01\\nPOWER_SUPPLY_MANUFACTURER=Fujitsu\\nPOWER_SUPPLY_SERIAL_NUMBER=01A-Z100320001158Z", "alarm": 0, "charge_full": 5800000, "voltage_now": 12496000, "serial_number": "01A-Z100320001158Z", "cycle_count": 0, "current_now": 0, "charge_now": 3900000, "voltage_min_design": 10800000, "path": "/sys/class/power_supply/CMB1", "technology": "Li-ion", "manufacturer": "Fujitsu", "type": "Battery", "model_name": "CP293550-01", "present": 1, "charge_full_design":5800000}

Les statistiques présentes dans le dictionnaire dépende de votre batterie. Mais on retrouve un certain nombre d'informations génériques comme par exemple la capacité restante (en %):

bat.stat[0].capacity
50

la capacité maximale:

bat.stat[0].charge_full
5800000

ou encore la capacité courante:

bat.stat[0].charge_now
3900000

On peut aussi avoir des informations constructeurs:

bat.stat[0].manufacturer
'Fujitsu'
bat.stat[0].technology
'Li-ion'

En espérant que cette librairie soit utile à certains. Si vous avez des remarques/rapports de bug à faire, merci d'utiliser le Github: https://github.com/nicolargo/batinfo/issues

Il ne me reste plus, pour ma part, qu'à intégrer cela dans Glances.

Cet article BatInfo, une lib Python pour vos batteries est apparu en premier sur Le blog de NicoLargo.

Vus : 1187
Publié par Nicolargo : 402