diff options
author | zachir <zachir@librem.one> | 2025-07-30 13:55:49 -0500 |
---|---|---|
committer | zachir <zachir@librem.one> | 2025-07-30 13:55:49 -0500 |
commit | 31860e9bf13ad942b82627dfd77be4c4d8bab6fb (patch) | |
tree | ce4d63d71bbffba92f978cbe181b4688cc0f28b4 | |
parent | eeb54dc363b89436945ece5e7b43a0ff12cc8543 (diff) |
Update power_now to be more extensible
-rwxr-xr-x | power_now | 91 |
1 files changed, 81 insertions, 10 deletions
@@ -1,15 +1,86 @@ #!/bin/sh -unset QUIET -BATTERY="BAT0" -while getopts ":mq" o; do case "${o}" in +unset QUIET MILLIWATTS TOTAL +BATTERY="ALL" + +while getopts "b:mqt" o; do case "${o}" in q) QUIET="y" ;; m) MILLIWATTS="y" ;; - *) BATTERY="$OPTARG" ;; + t) + TOTAL="y" + BATTERY="ALL" + ;; + b) BATTERY="$OPTARG" ;; esac done -[ -n "$QUIET" ] || printf "Power now is " -if [ -z "$MILLIWATTS" ]; then - cat /sys/class/power_supply/BAT0/current_now /sys/class/power_supply/BAT0/voltage_now | xargs | awk '{print $1*$2/1e12 " W"}' -else - cat /sys/class/power_supply/BAT0/current_now /sys/class/power_supply/BAT0/voltage_now | xargs | awk '{print $1*$2/1e9 " mW"}' -fi +#TOTALPOWER='0' + +case "$BATTERY" in + "ALL") + for battery in $(ls -1 /sys/class/power_supply | grep 'BAT'); do + DIRNAME="/sys/class/power_supply/${battery}" + if [ -f "${DIRNAME}/power_now" ]; then + if [ -n "${MILLIWATTS}" ]; then + POWER="$(cat "${DIRNAME}/power_now" | awk '{print $1/1e3}' | head -1)" + else + POWER="$(cat "${DIRNAME}/power_now" | awk '{print $1/1e6}' | head -1)" + fi + elif [ -f "${DIRNAME}/current_now" ]; then + if [ -n "${MILLIWATTS}" ]; then + POWER="$(cat "${DIRNAME}/current_now" "${DIRNAME}/voltage_now" | awk '{print $1*$2/1e9}' | head -1)" + else + POWER="$(cat "${DIRNAME}/current_now" "${DIRNAME}/voltage_now" | awk '{print $1*$2/1e12}' | head -1)" + fi + fi + if [ -n "${TOTAL}" ]; then + TOTALPOWER="$(echo "${TOTALPOWER}" "${POWER}" | awk '{print $1+$2}'| head -1)" + else + if [ -z "${QUIET}" ]; then + printf "Power in ${battery} is " + fi + printf "${POWER}" + if [ -n "${MILLIWATTS}" ]; then + echo " mW" + else + echo " W" + fi + fi + done + if [ -n "${TOTAL}" ]; then + if [ -z "${QUIET}" ]; then + printf "Total power is " + fi + printf "${TOTALPOWER}" + if [ -n "${MILLIWATTS}" ]; then + echo " mW" + else + echo " W" + fi + fi + ;; + *) + DIRNAME="/sys/class/power_supply/${BATTERY}" + [ -d "${DIRNAME}" ] || echo "No such battery!" + if [ -f "${DIRNAME}/power_now" ]; then + if [ -n "${MILLIWATTS}" ]; then + POWER="$(cat "${DIRNAME}/power_now" | awk '{print $1/1e3}' | head -1)" + else + POWER="$(cat "${DIRNAME}/power_now" | awk '{print $1/1e6}' | head -1)" + fi + elif [ -f "${DIRNAME}/current_now" ]; then + if [ -n "${MILLIWATTS}" ]; then + POWER="$(cat "${DIRNAME}/current_now" "${DIRNAME}/voltage_now" | awk '{print $1*$2/1e9}' | head -1)" + else + POWER="$(cat "${DIRNAME}/current_now" "${DIRNAME}/voltage_now" | awk '{print $1*$2/1e12}' | head -1)" + fi + fi + if [ -z "${QUIET}" ]; then + printf "Power in ${BATTERY} is " + fi + printf "${POWER}" + if [ -n "${MILLIWATTS}" ]; then + echo " mW" + else + echo " W" + fi + ;; +esac |