Skip to content

Instantly share code, notes, and snippets.

@elimence
Created May 23, 2013 18:15
Show Gist options
  • Save elimence/5638192 to your computer and use it in GitHub Desktop.
Save elimence/5638192 to your computer and use it in GitHub Desktop.
This code runs as a daemon process and sounds an alarm when the battery isn't charging This is version 1.0 The next version would include alerts for battery levels and so on
#!/usr/bin/python
import sys
import time
import shlex
import subprocess
from daemon import runner
class Misc():
@staticmethod
def read_file(filename):
file_object = open(filename)
file_dat = file_object.read()
file_object.close()
return file_dat.strip()
@staticmethod
def run_in_terminal(command):
handle = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
if handle:
return handle
else:
return None
@staticmethod
def terminate(pid):
command = 'sudo kill -1 %d' %(int(pid))
run_in_terminal(command)
class Battery_Manager(Misc):
def __init__(self):
self.handle = ''
self.alert_stat = False
self.MEDIA_ROOT = '/home/elimence/batmon/sounds'
self.SYS_ROOT = '/sys/class/power_supply'
self.audio = {'RedAlert': '%s/redalert.mp3' %(self.MEDIA_ROOT),
'Missile': '%s/missile.mp3' %(self.MEDIA_ROOT)}
self.stat_loc = {'BATTERY_CHARGING': '/sys/class/power_supply/AC/online',
'BATTERY_LEVEL': '/sys/class/power_supply/BAT0/capacity'}
#@classmethod
def check_ac (self):
# add code to check if battery is charging
charging_status = Misc.read_file(self.stat_loc['BATTERY_CHARGING'])
if charging_status == '1':
return True
else:
return False
#@classmethod
def check_level (self):
# add code to check battery level
battery_level = Misc.read_file(self.stat_loc['BATTERY_LEVEL'])
return battery_level
#@classmethod
def start_alert (self):
# add code to sound an alarm
if not self.alert_stat:
command = 'cvlc --loop %s' % self.audio['RedAlert']
self.handle = Misc.run_in_terminal(command)
self.alert_stat = True
#@classmethod
def stop_alert(self):
if self.alert_stat:
self.handle.kill()
self.alert_stat = False
class Daemon_Mode():
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = '/dev/tty'
self.stderr_path = '/dev/tty'
self.pidfile_path = '/home/elimence/batmon/gen/dae.pid'
self.pidfile_timeout = 5
self.battery_man = Battery_Manager()
def run(self):
while True:
status = self.battery_man.check_ac()
if not status:
self.battery_man.start_alert()
else:
self.battery_man.stop_alert()
time.sleep(2)
app = Daemon_Mode()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment