diff options
-rw-r--r-- | README | 9 | ||||
-rw-r--r-- | bat.lua | 2 | ||||
-rw-r--r-- | batsys.lua | 84 | ||||
-rw-r--r-- | init.lua | 1 |
4 files changed, 95 insertions, 1 deletions
@@ -165,6 +165,7 @@ vicious.widgets.uptime vicious.widgets.bat - provides state, charge, and remaining time for a requested battery + using procfs - takes battery ID as an argument, i.e. "BAT0" - returns 1st value as state of requested battery, 2nd as charge level in percent and 3rd as remaining (charging or discharging) @@ -177,6 +178,14 @@ vicious.widgets.batat level in percent, 3rd as remaining (charging or discharging) time, 4th as state of the second battery etc. +vicious.widgets.batsys + - provides state, charge, and remaining time for a requested battery + using sysfs + - takes battery ID as an argument, i.e. "BAT0" + - returns 1st value as state of requested battery, 2nd as charge + level in percent and 3rd as remaining (charging or discharging) + time + vicious.widgets.mem - provides RAM and Swap usage statistics - returns 1st value as memory usage in percent, 2nd as memory usage, @@ -19,7 +19,7 @@ local string = { -- }}} --- Bat: provides state, charge, and remaining time for a requested battery +-- Bat: provides state, charge, and remaining time for a requested battery using procfs module("vicious.bat") diff --git a/batsys.lua b/batsys.lua new file mode 100644 index 0000000..654c899 --- /dev/null +++ b/batsys.lua @@ -0,0 +1,84 @@ +--------------------------------------------------- +-- Licensed under the GNU General Public License v2 +-- * (c) 2009, Adrian C. <anrxc@sysphere.org> +-- * (c) 2009, Benedikt Sauer <filmor@gmail.com> +--------------------------------------------------- + +-- {{{ Grab environment +local tonumber = tonumber +local io = { open = io.open } +local setmetatable = setmetatable +local string = { format = string.format } +local math = { + min = math.min, + floor = math.floor +} +-- }}} + + +-- Batsys: provides state, charge, and remaining time for a requested battery using sysfs +module("vicious.batsys") + + +-- {{{ Battery widget type +local function worker(format, batid) + local battery = setmetatable({}, {__index = function(table, name) + local f = io.open("/sys/class/power_supply/"..batid.."/"..name) + if f then + local s = f:read("*all") + f:close() + return s + end + end}) + + local battery_state = { + ["Full\n"] = "↯", + ["Unknown\n"] = "⌁", + ["Charged\n"] = "↯", + ["Charging\n"] = "+", + ["Discharging\n"] = "-" + } + + -- Check if the battery is present + if not battery.present == "1\n" then + return {battery_state["Unknown\n"], 0, "N/A"} + end + + + -- Get state information + local state = battery_state[battery.status] or battery_state["Unknown\n"] + + -- Get capacity information + if battery.charge_now then + remaining, capacity = battery.charge_now, battery.charge_full + elseif battery.energy_now then + remaining, capacity = battery.energy_now, battery.energy_full + else + return {battery_state["Unknown\n"], 0, "N/A"} + end + + -- Get charge information + if battery.current_now then rate = battery.current_now + else return {battery_state["Unknown\n"], 0, "N/A"} end + + + -- Calculate percentage (but work around broken BAT/ACPI implementations) + local percent = math.min(math.floor(remaining / capacity * 100), 100) + + -- Calculate remaining (charging or discharging) time + if state == "+"then + timeleft = (tonumber(capacity) - tonumber(remaining)) / tonumber(rate) + elseif state == "-" then + timeleft = tonumber(remaining) / tonumber(rate) + else + return {state, percent, "N/A"} + end + local hoursleft = math.floor(timeleft) + local minutesleft = math.floor((timeleft - hoursleft) * 60 ) + local time = string.format("%02d:%02d", hoursleft, minutesleft) + + return {state, percent, time} +end +-- }}} + +setmetatable(_M, { __call = function(_, ...) return worker(...) end }) @@ -29,6 +29,7 @@ require("vicious.load") require("vicious.uptime") require("vicious.bat") require("vicious.batat") +require("vicious.batsys") require("vicious.mem") require("vicious.fs") require("vicious.dio") |