Automatic Notification for the Laptop Battery Level
While working from home one of the issue I faced that my laptop battery charger adapter is always remain plugged in almost all the time, due to which I have to replace my laptop battery. To deal with the problem I have now written a script to notify me about the laptop battery charging level if it goes above 85 % and below 20%.
#! /bin/bash
while true
do
battery_level=`acpi -b | grep -o '[0-9]*' | sed -n 2p`
ac_power=`cat /sys/class/power_supply/AC/online`
#If above command raise an error " No such file or directory" try the below command.
#ac_power=`cat /sys/class/power_supply/ACAD/online`
if [ $ac_power -gt 0 ]; then
if [ $battery_level -ge 85 ]; then
notify-send "Battery Full" "Level: ${battery_level}%"
fi
else
if [ $battery_level -le 20 ]; then
notify-send --urgency=CRITICAL "Battery Low" "Level: ${battery_level}%"
fi
fi
sleep 120
done
The important commands which I want to break down to explain actually what they are doing.
- First is acpi which tell us about the battery information and other ACPI information
- grep command is used to extract the integer value from the acpi command
- sed is used to get the second value from the grep result.
>> acpi -b
Battery 0: Discharging, 54%, 02:03:37 remaining
>>acpi -b | grep -o '[0-9]*'
0
54
02
04
41
>>acpi -b | grep -o '[0-9]*' | sed -n 2p
54
- After that, we check that the charger is plugged in or not, based on that we check that the battery level does not exceed the described limit, if so is the case send the notification.
- Then we check for the battery low indication which sends the notification if the battery level less than 20 %.
- These condition is put in a continuous loop to check after a sleep time of 120s.
To make this script run automatically you have to assign the execution permission and specifies the execution command in the ~/.profile and reboot the system.
>> sudo chmod +x /path/to/battery-notification.sh
you can find my notes on shell commands here
thanks shrini for pointing out issue for Ubuntu 20 in lineac_power=`cat /sys/class/power_supply/AC/online`
:)
Cheers!