From 1f318a0e23f1ec01095beeff858252f78eeff4c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Pinson?= Date: Wed, 1 Apr 2009 17:45:14 +0200 Subject: [PATCH] Added battery_state to monitor battery state. --- bin/battery_state | 85 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100755 bin/battery_state diff --git a/bin/battery_state b/bin/battery_state new file mode 100755 index 00000000..02652b0c --- /dev/null +++ b/bin/battery_state @@ -0,0 +1,85 @@ +#!/bin/sh -e +# +# battery_state: print the state of the battery +# Copyright (C) 2009 Raphaël Pinson. +# +# Authors: Raphaël Pinson +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + + +search () { + local str expr + str="$1" + expr="$2" + + echo "$str" | sed -n "s/${expr}/\1/p" +} + + +BATS=$(ls /proc/acpi/battery) +NB=$(echo "$BATS" | wc -l) + +for bat in $BATS; do + if [ "$NB" -gt 1 ]; then + echo -n "$bat: " + fi + + # read files once + infofile=$(cat "/proc/acpi/battery/$bat/info") + statefile=$(cat "/proc/acpi/battery/$bat/state") + + present=$(search "$infofile" "present: *\(.*\)") + + if [ "x${present}" = "xno" ]; then + echo "n/a" + break + fi + + full=$(search "$infofile" "last full capacity: *\(.*\) m[AW]h") + warn=$(search "$infofile" "design capacity warning: \(.*\) m[AW]h") + low=$(search "$infofile" "design capacity low: \(.*\) m[AW]h") + + rem=$(search "$statefile" "remaining capacity: *\(.*\) m[AW]h") + if [ "$rem" -lt "$low" ]; then + alert="! " + elif [ "$rem" -lt "$warn" ]; then + alert="/!\ " + else + alert="" + fi + + percent=$(echo "100*$rem/$full" | bc) + state=$(search "$statefile" "charging state: *\(.*\)") + + case $state in + charging) + sign="+" + ;; + discharging) + sign="-" + ;; + charged) + sign="=" + ;; + *) + sign=" $state" + ;; + esac + + echo "${alert}${percent}%${sign}" +done + +