#!/bin/bash # Copyright 2018 Denes Matetelki # This file is part of battery_status_led. # battery_status_led is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License v3 as published by the Free # Software Foundation. # battery_status_led 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 v3 for # more details. # You should have received a copy of the GNU General Public License v3 along # with battery_status_led. If not, see # https://www.gnu.org/licenses/gpl-3.0.html. # limits in percentages LOW=10 # flip LED every 2s CRIT=5 # flip led every 0.5s BAT_FULL_DEV=/sys/class/power_supply/BAT0/energy_full_design BAT_STATUS_DEV=/sys/class/power_supply/BAT0/status BAT_NOW_DEV=/sys/class/power_supply/BAT0/energy_now CAPSLOCK_LED_DEV=/sys/class/leds/input4\:\:capslock/brightness # If not set by the systemd service file LED_DEV=${BATTERY_STATUS_LED_DEV:-$CAPSLOCK_LED_DEV} LED=0 while : do # If charging, sleep 1m, then restart the cycle STATUS=cat $BAT_STATUS_DEV if [ $STATUS == "Charging" ] ; then echo 0 > $LED_DEV sleep 1m continue fi BAT_NOW=cat $BAT_NOW_DEV BAT_PCT=$(($BAT_NOW * 100 / $BAT_FULL)) # If battery has more than >10% left, sleep 1m then restart the cycle if (($BAT_PCT >= $LOW )) ; then sleep 1m continue fi # If battery is on low, but not crytical, flip LED every 2s if (( $BAT_PCT < $LOW )) && (( $BAT_PCT >= $CRIT)) ; then LED=$((1 ^ $LED)) echo $LED > $LED_DEV sleep 2s continue fi # If battery is on crytical flip capslock LED every 0.5s if (( $BAT_PCT < $CRIT )) ; then LED=$((1 ^ $LED)) echo $LED > $LED_DEV sleep 0.5s continue fi done