Last active
December 24, 2015 06:09
-
-
Save chanux/6754845 to your computer and use it in GitHub Desktop.
Laptop battery status notifier inspired by http://www.wired.com/gadgetlab/2013/09/laptop-battery. Images are Ubuntu specific.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# Inspired by the article http://www.wired.com/gadgetlab/2013/09/laptop-battery | |
# | |
# Info about battery life vary depending on who you ask from. So I'm not sure | |
# what to believe anymore. Anyhow wrote this because the last time I tried at | |
# writing a battery status notifier, I failed. | |
# | |
# I couldn't live with that memory! | |
import pynotify | |
import time | |
F_BAT_CAPACITY = '/sys/class/power_supply/BAT0/capacity' | |
F_BAT_STATUS = '/sys/class/power_supply/BAT0/status' | |
UNPLUG_IMG = '/usr/share/icons/Humanity/status/48/gpm-primary-080-charging.svg' | |
PLUG_IMG = '/usr/share/icons/Humanity/status/48/gpm-primary-040.svg' | |
POLL_INTERVAL = 300 #5 minutes | |
def notify(title, message, image): | |
pynotify.init('BATTERY-HEALTH') | |
notice = pynotify.Notification(title, message, image) | |
notice.show() | |
return | |
def battery_check(): | |
notified_to_plug = False | |
notified_to_unplug = False | |
while True: | |
with open(F_BAT_CAPACITY, 'r') as fcharge: | |
charge = int(fcharge.readline()) | |
with open(F_BAT_STATUS, 'r') as fstatus: | |
if fstatus.readline() == 'Discharging': | |
plugged = False | |
else: | |
plugged = True | |
if charge >= 80 and (plugged and not notified_to_unplug): | |
notify("Unplug me from power", | |
"battery level is %s" % charge, | |
UNPLUG_IMG) | |
notified_to_unplug = True | |
notified_to_plug = False | |
elif charge <= 40 and (not plugged and not notified_to_plug): | |
notify("Plug me back on power", | |
"battery level is %d" % charge, | |
PLUG_IMG) | |
notified_to_plug = True | |
notified_to_unplug = False | |
time.sleep(POLL_INTERVAL) | |
if __name__ == "__main__": | |
battery_check() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment