Talk:ACPI sleep power drain test script
Another ACPI testing script
Another ACPI testing script I wrote (/modified the existing one) for more than one battery and integration in current scripts (i.e. the Ubuntu suspend system)
most people will go fine with the original, just for the case someone prefers support for more than one battery. I'm not quite sure if the results will be exact for multiple Batteries, since I experience an extra drain when my Thinkpad is switching.
Part 1 must be executed before suspending, Part 2 afterwards.
Part 1:
#!/bin/sh
# test script for measuring power drain during suspend-to-ram with ACPI
# execute before suspend
# in ubuntu: save in /etc/acpi/suspend.d/
# default settings, change if needed
LOG=/var/log/battery.log
DATEFILE=/tmp/BATTESTDATE
BATFILE=/tmp/BATTESTLOAD
# save system time
hwclock --systohc
# get start values
date >> $LOG
DATE_BEFORE=`date +%s`
echo $DATE_BEFORE >$DATEFILE
#get battery states
BAT_BEFORE=0
BATS_DISCHARGING=0
for b in /proc/acpi/battery/*; do
CBAT=`grep 'remaining capacity' $b/state | awk '{print $3}'`
BAT_BEFORE=`echo "$BAT_BEFORE + $CBAT" |bc`
if grep -q '^charging state:.*discharging' $b/state; then
BATS_DISCHARGING=`echo "$BATS_DISCHARGING + 1" |bc`
fi
done
echo $BAT_BEFORE >$BATFILE
if [ $BATS_DISCHARGING -eq 0 ]; then
echo '!!! Not running on battery power while going to sleep!' >> $LOG
fi
Part 2:
#!/bin/sh
# test script for measuring power drain during suspend-to-ram with ACPI
# execute after suspend
# in ubuntu: save in /etc/acpi/resume.d/
# default settings, change if needed
LOG=/var/log/battery.log
DATEFILE=/tmp/BATTESTDATE
BATFILE=/tmp/BATTESTLOAD
BATTERY=BAT0
THRESHOLD=1000
# restore system time
hwclock --hctosys
DATE_BEFORE=`cat $DATEFILE`
BAT_BEFORE=`cat $BATFILE`
rm -f $BATFILE
rm -f $DATEFILE
# get end values
DATE_AFTER=`date +%s`
#get battery states
BAT_AFTER=0
BATS_DISCHARGING=0
for b in /proc/acpi/battery/*; do
CBAT=`grep 'remaining capacity' $b/state | awk '{print $3}'`
BAT_AFTER=`echo "$BAT_AFTER + $CBAT" |bc`
if grep -q '^charging state:.*discharging' $b/state; then
BATS_DISCHARGING=`echo "$BATS_DISCHARGING + 1" |bc`
fi
done
if [ $BATS_DISCHARGING -eq 0 ]; then
echo '!!! Not running on battery power while waking up!' >> $LOG
fi
# do the calculations
DIFF=`echo "$BAT_AFTER - $BAT_BEFORE" | bc`
SECONDS=`echo "$DATE_AFTER - $DATE_BEFORE" | bc`
USAGE=`echo "($DIFF * 60 * 60) / ($SECONDS)" | bc`
# output the results
echo "before: $BAT_BEFORE mWh" >> $LOG
echo "after: $BAT_AFTER mWh" >> $LOG
echo "diff: $DIFF mWh" >> $LOG
echo "seconds: $SECONDS sec" >> $LOG
echo "result: $USAGE mW" >> $LOG
if [ $USAGE -gt -$THRESHOLD ]
then
echo "Power drain seems ok" >> $LOG
else
echo "Power drain seems a little high" >> $LOG
fi
if [ $SECONDS -lt 1200 ]
then
echo "!!! The notebook was suspended less than 20 minutes." >> $LOG
echo "!!! To get representative values please let the notebook sleep" >> $LOG
echo "!!! for at least 20 minutes." >> $LOG
fi
echo "" >> $LOG