- /lib/systemd/system-sleep/batenergy.sh
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#!/usr/bin/env bash FILE=/tmp/batenergy.dat ADP=(/sys/class/power_supply/A*) BAT=(/sys/class/power_supply/BAT*) [[ -e $BAT ]] || exit state=$1 sleep_type=$2 now=`date +'%s'` # Read an energy in mWh from /sys/class/power_supply. # Some firmware only reports charge (in µAh), in which case we convert using voltage. read_energy() { local when=$1 local -n var=energy_$when if [[ -e $BAT/energy_$when ]]; then (( var = $(< "$BAT"/energy_$when) / 1000 )) # mWh else if (( ! voltage_now )); then (( voltage_now = $(< "$BAT"/voltage_now) )) # µV fi (( var = $(< "$BAT"/charge_$when) * voltage_now / 1000000000 )) # mWh fi } read_energy now read_energy full if [[ -f $ADP/online ]]; then read online < "$ADP"/online if (( online )); then echo "Currently on mains." else echo "Currently on battery." fi fi case $state in "pre") echo "Saving time and battery energy before sleeping ($sleep_type)." echo $now > $FILE echo $energy_now >> $FILE ;; "post") exec 3<>$FILE read prev <&3 read energy_prev <&3 rm $FILE time_diff=$(($now - $prev)) # seconds hours=$(($time_diff / 3600)) minutes=$(($time_diff % 3600 / 60)) echo "Duration of $hours hours $minutes minutes sleeping ($sleep_type)." (( energy_diff = energy_now - energy_prev )) # mWh (( avg_rate = energy_diff * 3600 / time_diff )) # mW energy_diff_pct=$(bc <<< "scale=1;$energy_diff * 100 / $energy_full") # % avg_rate_pct=$(bc <<< "scale=2;$avg_rate * 100 / $energy_full") # %/h echo "Battery energy change of $energy_diff_pct % ($energy_diff mWh) at an average rate of $avg_rate_pct %/h ($avg_rate mW)." printf "Sleep %02dh:%02dm, %.2f%% (%d mWh), %.2f%%/h (%d mW)" $hours $minutes $energy_diff_pct $energy_diff $avg_rate_pct $avg_rate > /tmp/batenergy.txt printf "[$(date +"%Y%m%d %H:%M")] Sleep %02dh:%02dm, %.2f%% (%d mWh), %.2f%%/h (%d mW)\n" $hours $minutes $energy_diff_pct $energy_diff $avg_rate_pct $avg_rate >> /var/log/batenergy.txt ;; esac |
- notify_bat_usage.sh
[crayon-6a43f67d24c6f796[……]