logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 06-01-2024 21:30:38

Anonyme
Invité

Controller charge batterie par script

Bonjour,
j'ai un Lenovo Ideapad et découvert récemment qu'on peut préserver sa batterie (des cycles charge/décharge ou maintient en charge à 100%) en arrêtant la charge même s'il est branché au secteur simplement en écrivant 1 (ou 0 pour recharger) dans le fichier /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode, en root bien sûr.
Testé en script, ça fonctionne très bien. La demande de préservation de la batterie permet de rester connecté au secteur sans charger ni décharger la batterie, le niveau de charge reste égal à celui au moment de la demande.
Je ne trouve rien dans les dépôts qui gère ça, je me dis donc "fais le !".

J'ai donc adapté un petit script qui passe en "préservation" ou "normal" au choix et m'indique mode utilisé et l'état batterie.

#!/bin/bash
if [ "$1" == "?" ]
then
  acpi
elif [ "$1" == "on" ]
then
  sudo echo 1 | sudo tee /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode
elif [ "$1" == "off" ]
then
  sudo echo 0 | sudo tee /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode
fi

mais j'aimerais dire au système "charge jusqu'à 80% et arrête".

Mais passer en mode "préservation" quand la charge est basse n'est pas très malin, puis quand la batterie est chargée j'oublie...
J'aimerais faire un script qui, une fois lancé, attendrait que le niveau de charge demandé soit atteint pour couper la charge.

Bon, j'ai profité du post pour mettre mes idées au clair. Je pense qu'en utilisant le retour d'acpi je peux faire un test.

Battery 0: Not charging, 82%

donc

acpi|awk '{print $5}'

retourne juste les 82%.

#2 07-01-2024 08:31:37

Anonyme
Invité

Re : Controller charge batterie par script

Je me réponds.
Un script bash n'est pas vraiment adapté à la surveillance continue. Il faudrait en plus un lancement régulier par cron.
Python serait mieux adapté, lancement automatique puis une simple interface pour donner la charge maxi et le on/off.

#3 12-01-2024 17:09:13

Anonyme
Invité

Re : Controller charge batterie par script

Finalement, j'ai fait un petit script en bash inspiré du mode "conservation batterie" de mon téléphone.
Il permet la charge jusqu'à 85% si connecté au secteur puis bloque en utilisant le mode préservation d'un Ideapad.
Si déconnecté du secteur il quitte le mode préservation dès que la batterie faibli un peu.
J'ai aussi codé une alarme si la batterie chute sous les 15% mais comme je n'arrive pas à faire sortie un son (beep ou echo ^G) du laptop, elle ne sert à rien.
Ça m'a plus servi à voir ce qui est possible mais le bash (ou mes connaissance de bash !) me semble insuffisant pour coder ça efficacement.


#!/bin/bash
del=300 # attente de 5 mn entre 2 tests
moyen=85 # mise hors service de la préservation si batterie < $moyen et déconnecté du secteur
max=86 # mise en service de la préservation si batterie > $max et connecté au secteur
min=15 # alarme batterie faible
act=$(acpi|grep -Po "[0-9]+(?=%)") # charge actuelle de la batterie
warn="Batterie presque vide. Brancher ?" # assez clair
pm=0 # 1 pour préservation, 0 pour normal

preservation(){
  sudo echo $pm | sudo tee /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode
}

while [ 1 ]
do
  act=$(acpi|grep -Po "[0-9]+(?=%)")
  acpi_str=$(acpi)
  mb=$(echo $acpi_str | cut -d ':' -f 2) # retours possibles Full, Discharging, Charging, Not charging (quand en mode préservation)
  mb=$(echo $mb | cut -d ',' -f 1)
  if [ "$act" -gt "$max" ] && [ "$mb" == "Charging" ] ;
  then
    pm=1
    preservation
  fi
  if [ "$act" -lt "$moyen" ] && [ "$mb" == "Discharging" ]
  then  
    pm=0
    preservation
  fi
  if [ "$min" -gt "$act" ] && [ "$mb" == "Discharging" ]
  then  
           echo $warn
           beep
        fi
  sleep $del # attente
done



Pour les heureux propriétaires d'Idapad, c'est à lancer en root (car besoin d'écrire dans le fichier /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode).
Je poste ici si des curieux sont tentés mais considère que ce code n'est pas abouti, il manque :
- rendre le code opérant sans besoin du terminal ouvert
- un beep si batterie faible
- une sortie automatique du mode préservation à l'arrêt du script. Actuellement un Ctrl C sur le script (ou fermeture du terminal peut laisser en mode "préservation" malgré une batterie qui se vide.

Pour ceux qui n'ont pas d'Ideapad, le code est facilement modifiable pour simplement afficher des rappels pour demander (avec 2 notify-send plutôt qu'avec echo) de brancher ou débrancher l'adaptateur secteur.

#4 13-01-2024 15:59:10

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : Controller charge batterie par script

hello
si tu utilises conky il y a tout un tas de variable qui pourrait assurer le suffit de l'état de la batterie et lancer un script arrivé a un certain %
j'ai vu dans le man conky que on pouvait utiliser des conditions if par exemple
j'ai jamais testé mais ce doit être faisable
voir le man conky

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#5 13-01-2024 18:19:13

Anonyme
Invité

Re : Controller charge batterie par script

Le script doit être exécuté en root pour le mode préservation, pas top avec Conky.
Par contre, ce serait top pour simplement afficher des rappels au sujet de la batterie.

#6 14-01-2024 08:46:37

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : Controller charge batterie par script

hello
je me suis souvenu d'un poste, je crois bien que ça va faire ton affaire
regarde du coté de tlp, il te permet une gestion fine de l’énergie, en regardant vite fais le man on peut paramétrer la charge de la batterie
https://debian-facile.org/viewtopic.php?id=33884

-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#7 14-01-2024 13:45:34

Anonyme
Invité

Re : Controller charge batterie par script

Bonjour Croutons,
d'après mes lectures, Thinkpad et Ideapad diffèrent au niveau de la gestion de charge batterie.
Thinkpad : 2 seuils sont intégrés au firmware de la batterie stop charge et start charge. Tlp permet de les modifier, c'est une action unique. Tlp peut être hors service, la charge se fera comme demandé.
Ideapad : je ne vois qu'un seul paramètre (0 ou 1), le 1 bloquant la charge au niveau actuel.  Mais si on stoppe le script et débranche, laisse décharger très bas et rebranche le secteur la charge reste bloquée au niveau auquel la batterie est descendue. Un redémarrage du script corrige le problème.
Donc d'un coté un vrai automatisme indépendant de tout (Thinkpad) et de l'autre une possibilité qui peut être utilisée par l'OS (Ideapad).

#8 14-01-2024 20:18:25

Croutons
Membre
Distrib. : Debian12
Noyau : Linux 6.1.0-13-amd64
(G)UI : Fluxbox(NakeDeb)
Inscription : 16-12-2016

Re : Controller charge batterie par script

de ce que j'ai vu il y a plusieurs plugin suivant les portables

/usr/share/tlp/bat.d/05-thinkpad
/usr/share/tlp/bat.d/10-thinkpad-legacy
/usr/share/tlp/bat.d/15-asus
/usr/share/tlp/bat.d/20-huawei
/usr/share/tlp/bat.d/25-lenovo
/usr/share/tlp/bat.d/30-samsung
/usr/share/tlp/bat.d/35-lg
/usr/share/tlp/bat.d/40-sony
/usr/share/tlp/bat.d/90-generic
 



https://linrunner.de/tlp/settings/battery.html

tlp-stat -b


affiche les infos sur la batterie

Dernière modification par Croutons (14-01-2024 20:23:20)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<-- 
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#9 14-01-2024 22:06:51

Anonyme
Invité

Re : Controller charge batterie par script

Bien vu Croutons,
effectivement, je vois que le fichier 25-lenovo prend en compte la méthode de préservation des Ideapads.
C'est un gros morceau de script à comprendre !

Edit après lecture du script :
Déception. Quasi toutes les fonctions sont commentées  # function not implemented for Ideapads.
Les plus de 400 lignes de cette partie de script shell (que j'ai déjà du mal à comprendre) ne m'encouragent pas trop à lire les 4 ou 5000 lignes du code principal (perl et shell) et ne me sont pas plus utiles que mon petit bout de code !
C'est quand même plus facile d'écrire du code mono fonction et mono hardware qu'un outil aussi puissant que tlp  big_smile.

Dernière modification par Anonyme (15-01-2024 11:08:00)

Pied de page des forums