d91294f010
If the computer runs on AC, display that instead of showing "100%" in the status. Also, if reading the charging status fails for some reason (except the computer being on AC), go into critical state and display "n/a". see #23
75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
# pylint: disable=C0111,R0903
|
|
|
|
"""Displays battery status, remaining percentage and charging information.
|
|
|
|
Parameters:
|
|
* battery.device : The device to read information from (defaults to BAT0)
|
|
* battery.warning : Warning threshold in % of remaining charge (defaults to 20)
|
|
* battery.critical: Critical threshold in % of remaining charge (defaults to 10)
|
|
"""
|
|
|
|
import os
|
|
|
|
import bumblebee.input
|
|
import bumblebee.output
|
|
import bumblebee.engine
|
|
|
|
class Module(bumblebee.engine.Module):
|
|
def __init__(self, engine, config):
|
|
super(Module, self).__init__(engine, config,
|
|
bumblebee.output.Widget(full_text=self.capacity)
|
|
)
|
|
battery = self.parameter("device", "BAT0")
|
|
self._path = "/sys/class/power_supply/{}".format(battery)
|
|
self._capacity = 100
|
|
|
|
def capacity(self):
|
|
if self._ac:
|
|
return "ac"
|
|
if self._capacity == -1:
|
|
return "n/a"
|
|
return "{:03d}%".format(self._capacity)
|
|
|
|
def update(self, widgets):
|
|
widget = widgets[0]
|
|
self._ac = False
|
|
if not os.path.exists(self._path):
|
|
self._ac = True
|
|
self._capacity = 100
|
|
return
|
|
|
|
try:
|
|
with open(self._path + "/capacity") as f:
|
|
self._capacity = int(f.read())
|
|
except IOError:
|
|
self._capacity = -1
|
|
self._capacity = self._capacity if self._capacity < 100 else 100
|
|
|
|
def state(self, widget):
|
|
state = []
|
|
|
|
if self._capacity < 0:
|
|
return ["critical", "unknown"]
|
|
|
|
if self._capacity < int(self.parameter("critical", 10)):
|
|
state.append("critical")
|
|
elif self._capacity < int(self.parameter("warning", 20)):
|
|
state.append("warning")
|
|
|
|
if self._ac:
|
|
state.append("AC")
|
|
else:
|
|
charge = ""
|
|
with open(self._path + "/status") as f:
|
|
charge = f.read().strip()
|
|
if charge == "Discharging":
|
|
state.append("discharging-{}".format(min([10, 25, 50, 80, 100] , key=lambda i:abs(i-self._capacity))))
|
|
else:
|
|
if self._capacity > 95:
|
|
state.append("charged")
|
|
else:
|
|
state.append("charging")
|
|
|
|
return state
|
|
|
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|