Small remake of Acpitool based power widget for Awesome3
Frist you need to have acpitool installed which is basically a Linux ACPI client, allowing you to query or set ACPI values and display them. Basically said it parses /proc/acpi or /sys/class entries and presents the output in a well formatted text. Acpitool is available in most of the Linux distros and the requirement is that your kernel has the support for ACPI, which it probably does.
Here is the code, also don't forget to register mybattmon to the widget list in rc.lua
and I must say Lua is really good scripting language.
The original code works with multiple batteries and can be found here
Here is the code, also don't forget to register mybattmon to the widget list in rc.lua
mybattmon = widget({ type = "textbox",
name = "mybattmon",
align = "right" })
function battery_status ()
--output buffer
local output={}
-- read data from battery
local fd=io.popen("acpitool -b", "r")
local line=fd:read()
-- we match the output from acpitool
local battery_load = string.match(line,
" (%d*\.%d+)%%")
local time_rem = string.match(line,
"(%d+\:%d+)\:%d+")
local discharging -- temp var for opening tag
if string.match(line,
"discharging")=="discharging" then
-- discharging: set the color to red
discharging="< span color=\"#CC7777\">"
elseif tonumber(battery_load)>85 then --almost charged
discharging="< span color=\"#77CC77\">"
else --charging
discharging="< span color=\"#CCCC77\">"
end
if battery_num and battery_load and time_rem then
table.insert(output,
discharging.."B "..battery_load.."%% "..time_rem..
"</span >")
elseif battery_num and battery_load then
--remaining time unavailable so the battery is loading
table.insert(output,discharging.."B "..battery_load..
"%%</span >")
end
-- even more data unavailable:
-- we might be getting an unexpected output format
-- so let's just skip this line.
return table.concat(output," ")
end
mybattmon.text = " " .. battery_status() .. " "
-- every 30 sec call the fucntion battery_status()
my_battmon_timer=timer({timeout=30})
my_battmon_timer:add_signal("timeout", function()
mybattmon.text = " " .. battery_status() .. " "
end)
my_battmon_timer:start()
and I must say Lua is really good scripting language.
The original code works with multiple batteries and can be found here