The script displays alert when the battery falls below 20% or charges up beyond 80% which should be the optimal range of its working.The code is as below. Just copy and paste and save as any file name but preferably battery-notify.sh. The script can independent of what name it is given. Needs to have acpi (default install) and notify-send installed (sudo apt-get install notify-osd).
============================================
#!/bin/bash
# battery-notify v2.5.1 by JOnes
# It is a script to monitor battery and keep it between 20% to 80% the optimal battery working range. If the battery goe beyonds the set limit it gives pop-ups every 10 seconds. No sound warning as sound can easily be muted and ignored.
# Things that could be added : 1> The flexibilty of range. But it is not recommended hence not implemented. 2> Notification in form of email or sms. 3> Sound / beep for critical state of battery.
# The script goes into background. To kill it at any time use : battery-notify.sh kill
# do not have to edit beyond this line
#------------------------------------------
if [ "$1" == "kill" ]
then
# if command line parameter is "kill" then kill all running instances of this script.
nnn=`ps aux | grep $0 | tr -s " " | cut -d" " -f2 `
echo -e $$ "\n====" # prints PID of this instance of script. make sure not to kill itself.
for ii in `echo $nnn`
do
if [ "$ii" -ne "$$" ]
then
echo "Killing PID:" $ii
kill -9 $ii
fi
done
exit
fi
# exit if another instance is running
process=$0
# value of this exp_count depends on the number of cores of CPU. check the process on first run and apply the value here. Need to uncomment the line #echo ${run_count} to chcck no. of cores used by kernel. It maybe different for the physical no. of cores.
exp_count=2
run_count=`ps aux | grep $process | grep -v 'grep' | wc -l`
# uncomment this line to chcck no. of cores used by kernel. It maybe different for the physical no. of cores.
#echo ${run_count}
if [ ${exp_count} -eq ${run_count} ] ; then
# do nothing; just exit the if statement
echo
else
echo "another instance is running"
echo -e "The script goes into background. To kill it at any time use : " `basename $0` "kill"
exit
fi
if [ ! `which acpi` ] ; then
echo -e "Install acpi \nsudo apt-get install acpi"
exit 0
fi
if [ ! `which notify-send` ] ;then
echo -e "Install notify-send \nsudo apt-get install libnotify-bin"
exit 0
fi
v1=`echo $0 | sed 's/\.//' | sed 's|\/||' `
echo -e "The script goes into background. To kill it at any time use : " `basename $0` "kill"
echo "----------------------"
acpi | cut -d" " -f4
echo "----------------------"
sensors | grep "Core"
echo "----------------------"
{
while [ 1 ]
do
# this snippet extracts the battery status as percentage
aa=`acpi | cut -d"," -f2 | tr -d "% "`
# grep -c counts the no. of occurance of the text
bb1=`acpi | grep -c "Discharging"`
bb2=`acpi | grep -c "Charging"`
#echo $bb1 $bb2
# if discharging then
if [[ $bb1 > 0 ]] ; then
if [[ $aa < 20 ]] ; then
notify-send -t 100 "Battery Status: $aa%. Plug charger"
fi
fi
# if charging then
if [[ $bb2 > 0 ]] ; then
if [[ $aa > 80 ]] ; then
notify-send -t 1000 "Battery Status: $aa%. Unplug charger."
fi
fi
sleep 10
done
}&
Comments