Skip to content

Instantly share code, notes, and snippets.

@dukechem
Created January 16, 2021 05:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dukechem/c6e59c3b6b2b0c86acb426fd27d0510e to your computer and use it in GitHub Desktop.
Save dukechem/c6e59c3b6b2b0c86acb426fd27d0510e to your computer and use it in GitHub Desktop.
Low battery warning by audio and notification for macos laptops
#! /usr/bin/env sh
# When battery has less than 25%, pops up notifier counting down integer % of battery left 24, 23, 22, 21 ...
# When battery is less than 15% also announces "Low Battery" verbal warning.
# INSTALL: Put this powerchange.sh file in /Users/Shared/ folder on your mac laptop, then chmod a+x *.sh
# And put com.me.powerchange.plist (below) in ~/Library/LaunchAgents/ (or /Library/LaunchAgents/ for every user).
# This file is run by com.me.powerchange.plist whenever charger is disconnected
# When charger is unplugged, the date of this file changes: Library/Preferences/com.apple.powerlogd.plist
## https://stackoverflow.com/questions/14108471/launchd-watchpaths-will-not-trigger-simple-hello-world-script-os-x-10-8
## See also https://github.com/Goles/Battery/
export PWRINFO=$(ioreg -l | grep ExternalConnected)
export BATT_PCT=$(pmset -g batt | grep -o '[0-9]*%' | tr -d %)
echo -e $PWRINFO ' \t' " % " $BATT_PCT | logger -i -t batmom -s 2>> /var/log/batmon.log
if [[ $BATT_PCT -lt 25 ]]; then
echo $PWRINFO $BATT_PCT "%" | /usr/local/bin/terminal-notifier
if [[ $BATT_PCT -lt 15 ]]; then
echo "Low Battery " $BATT_PCT "%" | say
fi
fi
#echo $PWRINFO $BATT_PCT "%"
exit 0
@dukechem
Copy link
Author

Copy code below line to com.me.powerchange.plist file. Put file in ~/Library/LaunchAgents/ folder

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.me.powerchange</string>
        <key>ProgramArguments</key>
        <array>
                <string>/Users/Shared/maintlog/powerchange.sh</string>
        </array>
        <key>WatchPaths</key>
        <array>
                <string>/Library/Preferences/com.apple.powerlogd.plist</string>
        </array>
</dict>
</plist>

@dukechem
Copy link
Author

It's just a quick-and-dirty way I used to keep an eye and ear on battery state when I was having problems with zoom eating up battery.
lowbattery

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment