Je souhaite créer un outil qui alerte lorsque la batterie est inférieure à 40% ou supérieure à 60% afin que je puisse démarrer/arrêter la charge en conséquence.
Je sais que certains outils sont en alerte lorsque la batterie est faible, cela ne suffit pas. Y a-t-il un outil qui le fait quand la chauve-souris est haute?
Je voudrais écrire un script - Shell ou python, qui peut le faire. Je connais la commande pour vérifier le statut de la batte:
upower -i /org/freedesktop/UPower/devices/battery_BAT0
Mais je ne sais pas comment "écouter" la batterie afin que, chaque fois que son statut change, je puisse automatiquement exécuter une action. Un lien vers la documentation sera Nice, un tutoriel encore meilleur.
Ok, je pense que je le savais. Vous souhaitez vérifier l'état de la batterie à chaque X intervalle de temps. Il est plus simple de l'exécuter en arrière-plan, dans une boucle while:
while true
do
# Any script or command
sleep [number of seconds]
done
Et si vous voulez exécuter le script au démarrage, puis toutes les 5 minutes, la construction sera la suivante:
/etc/rc.local
pour appeler votre script (votre battery_status.sh
) + "&" pour le faire sortir.battery_status.sh
à exécuter dans une boucle while (à l'intérieur de battery_status.sh).Notez que si vous voulez l'exécuter à partir de cron , vous devez définir le chemin complet, car cron
s'exécute avec un ensemble limité de variables d'environnement.
#!/bin/bash
while true
do
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_level -ge 60 ]; then
notify-send "Battery is above 60%!" "Charging: ${battery_level}%"
Elif [ $battery_level -le 40 ]; then
notify-send "Battery is lower 40%!" "Charging: ${battery_level}%"
fi
sleep 300 # 300 seconds or 5 minutes
done
Enregistrez ce fichier sous le nom battery_status.sh
dans votre emplacement préféré (le mien est le répertoire Home
name__) et ajoutez cette ligne dans le fichier /etc/rc.local
(dans mon exemple, remplacez simplement votre emplacement battery_status.sh par /home/kasiya/
):
sh /home/kasiya/battery_status.sh &
C'est tout. Redémarrez et voyez la magie.
Si vous n'avez pas instell acpi
name__, installez-le simplement en utilisant Sudo apt-get install acpi
Un BONUS
Si vous souhaitez exécuter ce script avec un adaptateur secteur, vous n'avez pas besoin d'une variable supplémentaire pour vérifier cette exécution unique. Si votre adaptateur secteur est branché et que la batterie est chargée à plus de 60%, le message "Débranchez votre adaptateur!" S'affiche. jusqu'à ce que vous ne débranchez pas cela. Si alerte vous le dire
débranchez simplement l’adaptateur secteur pour que le message d’alerte ne s’affiche plus jusqu’à ce que votre batterie soit chargée à 40%. Puis un autre message alerte et vous dit
si vous ne débranchez pas l'adaptateur secteur au-dessus de 60% ou ne branchez pas l'adaptateur au-dessous de 40%, le message d'alerte s'affiche toutes les 5 minutes (vous pouvez le régler vous-même dans le code, voir sleep [seconds]
) s'affiche et vous le rappellera.
#!/bin/bash
while true
do
export DISPLAY=:0.0
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if on_ac_power; then
if [ $battery_level -ge 60 ]; then
notify-send "Battery charging above 60%. Please unplug your AC adapter!" "Charging: ${battery_level}% "
sleep 20
if on_ac_power; then
gnome-screensaver-command -l ## lock the screen if you don't unplug AC adapter after 20 seconds
fi
fi
else
if [ $battery_level -le 40 ]; then
notify-send "Battery is lower 40%. Need to charging! Please plug your AC adapter." "Charging: ${battery_level}%"
sleep 20
if ! on_ac_power; then
gnome-screensaver-command -l ## lock the screen if you don't plug AC adapter after 20 seconds
fi
fi
fi
sleep 300 # 300 seconds or 5 minutes
done
Vous ne pouvez pas écrire de tutoriel pour créer un script . Ce serait semblable à un tutoriel général python, que vous pouvez trouver à de nombreux endroits sur le Web.
Ce que j'ai fait est d'écrire un petit script, avec des commentaires pour expliquer ce que j'ai fait, pour vérifier la charge de la batterie toutes les 10 secondes. Cela pourrait être exagéré. Modifiez la ligne time.sleep(10)
pour définir l'intervalle (en secondes). Les commandes peuvent être changées bien sûr, je lui ai fait envoyer une notification telle quelle.
Je lui ai fait exécuter le message, ou quelle que soit la commande que vous lui donniez, une seule exécution par incident. Ainsi, si la charge dépasse 80%, par exemple, la commande ne s'exécute qu'une fois, jusqu'à la prochaine fois qu'elle dépasse les valeurs définies.
Comment utiliser
Le script doit être exécuté en arrière-plan. copiez-le dans un fichier vide, enregistrez-le sous check_battery.py
rendez-le exécutable et exécutez-le à la connexion: Dash> Applications de démarrage> Ajouter, ajoutez la commande suivante:
/path/to/check_battery.py
Le script
#!/usr/bin/env python3
import subprocess
import time
def read_status():
"""
This function reads the output of your command, finds the line with
'percentage' (line 17, where first line = 0) and reads the figure
"""
command = "upower -i $(upower -e | grep BAT) | grep --color=never -E percentage|xargs|cut -d' ' -f2|sed s/%//"
get_batterydata = subprocess.Popen(["/bin/bash", "-c", command], stdout=subprocess.PIPE)
return get_batterydata.communicate()[0].decode("utf-8").replace("\n", "")
def take_action():
"""
When the charge is over 60% or below 40%, I assume the action does
not have to be repeated every 10 seconds. As it is, it only runs
1 time if charge exceeds the values. Then only if it exceeds the
limit again.
"""
# the two commands to run if charged over 80% or below 60%
command_above = "notify-send 'charged over 80'%"
command_below = "notify-send 'charged below 80%'"
times = 0
while True:
charge = int(read_status())
if charge > 60:
if times == 0:
subprocess.Popen(["/bin/bash", "-c", command_above])
times = 1
Elif charge < 40:
if times == 0:
subprocess.Popen(["/bin/bash", "-c", command_below])
times = 1
else:
times = 0
time.sleep(10)
take_action()