thinkpad bat widget integrated

This commit is contained in:
luke bonham 2013-09-26 11:35:59 +02:00
parent 356705836a
commit 22fa9400bc
3 changed files with 79 additions and 70 deletions

View File

@ -4,7 +4,7 @@
Lain Lain
Layouts, widgets and utilities for Awesome WM Layouts, widgets and utilities for Awesome WM
User contributed widgets section Users contributed widgets section
Licensed under GNU General Public License v2 Licensed under GNU General Public License v2
* (c) 2013, Luke Bonham * (c) 2013, Luke Bonham

View File

@ -1,36 +1,41 @@
--[[ --[[
tpbat.lua
Battery status widget for ThinkPad laptops that use SMAPI tpbat.lua
lain.widgets.contrib.tpbat Battery status widget for ThinkPad laptops that use SMAPI
lain.widgets.contrib.tpbat
More on tp_smapi: http://www.thinkwiki.org/wiki/Tp_smapi
More on tp_smapi: http://www.thinkwiki.org/wiki/Tp_smapi
Licensed under GNU General Public License v2
* (c) 2013, Conor Heine Licensed under GNU General Public License v2
* (c) 2013, Luke Bonham * (c) 2013, Conor Heine
* (c) 2010-2012, Peter Hofmann * (c) 2013, Luke Bonham
* (c) 2010-2012, Peter Hofmann
--]] --]]
local debug = { getinfo = debug.getinfo }
local newtimer = require("lain.helpers").newtimer local newtimer = require("lain.helpers").newtimer
local first_line = require("lain.helpers").first_line local first_line = require("lain.helpers").first_line
local beautiful = require("beautiful") local beautiful = require("beautiful")
local naughty = require("naughty") local naughty = require("naughty")
local wibox = require("wibox") local wibox = require("wibox")
local smapi = require("lain.widgets.contrib.tpbat.smapi") -- Ugly :(
local string = { format = string.format } local string = { format = string.format }
local math = { floor = math.floor } local math = { floor = math.floor }
local tostring = tostring local tostring = tostring
local setmetatable = setmetatable local setmetatable = setmetatable
-- ThinkPad SMAPI-enabled battery info widget package.path = debug.getinfo(1,"S").source:match[[^@?(.*[\/])[^\/]-$]] .. "?.lua;" .. package.path
local tpbat = { } local smapi = require("smapi")
-- ThinkPad SMAPI-enabled battery info widget
-- lain.widgets.contrib.tpbat
local tpbat = { }
local tpbat_notification = nil local tpbat_notification = nil
function tpbat:hide() function tpbat:hide()
if tpbat_notification ~= nil if tpbat_notification ~= nil
then then
naughty.destroy(tpbat_notification) naughty.destroy(tpbat_notification)
tpbat_notification = nil tpbat_notification = nil
@ -39,8 +44,10 @@ end
function tpbat:show(t_out) function tpbat:show(t_out)
tpbat:hide() tpbat:hide()
local bat = self.bat local bat = self.bat
local t_out = t_out or 0
if bat == nil or not bat:installed() then return end if bat == nil or not bat:installed() then return end
local mfgr = bat:get('manufacturer') or "no_mfgr" local mfgr = bat:get('manufacturer') or "no_mfgr"
@ -50,9 +57,9 @@ function tpbat:show(t_out)
local time = bat:remaining_time() local time = bat:remaining_time()
local msg = "\t" local msg = "\t"
if status ~= "idle" and status ~= "nil" if status ~= "idle" and status ~= "nil"
then then
if time == "N/A" if time == "N/A"
then then
msg = "...Calculating time remaining..." msg = "...Calculating time remaining..."
else else
@ -63,7 +70,7 @@ function tpbat:show(t_out)
end end
local str = string.format("%s : %s %s (%s)\n", bat.name, mfgr, model, chem) local str = string.format("%s : %s %s (%s)\n", bat.name, mfgr, model, chem)
str = str .. string.format("\n%s \t\t\t %s", status:upper(), msg) .. string.format("\n%s \t\t\t %s", status:upper(), msg)
tpbat_notification = naughty.notify({ tpbat_notification = naughty.notify({
preset = { fg = beautiful.fg_normal }, preset = { fg = beautiful.fg_normal },
@ -80,10 +87,10 @@ function tpbat.register(args)
tpbat.bat = smapi:battery(battery) -- Create a new battery tpbat.bat = smapi:battery(battery) -- Create a new battery
local bat = tpbat.bat local bat = tpbat.bat
tpbat.widget = wibox.widget.textbox('') tpbat.widget = wibox.widget.textbox('')
if bat:get('state') == nil if bat:get('state') == nil
then then
local n = naughty.notify({ local n = naughty.notify({
title = "SMAPI Battery Warning: Unable to read battery state!", title = "SMAPI Battery Warning: Unable to read battery state!",
@ -141,13 +148,13 @@ function tpbat.register(args)
bat_now.perc = tostring(bat_now.perc) bat_now.perc = tostring(bat_now.perc)
end end
widget = tpbat.widget -- 'widget' needed in rc.lua (following convention) widget = tpbat.widget
settings() settings()
end end
newtimer("tpbat", timeout, update) newtimer("tpbat", timeout, update)
widget:connect_signal('mouse::enter', function () tpbat:show(0) end) widget:connect_signal('mouse::enter', function () tpbat:show() end)
widget:connect_signal('mouse::leave', function () tpbat:hide() end) widget:connect_signal('mouse::leave', function () tpbat:hide() end)
return tpbat.widget return tpbat.widget

View File

@ -1,9 +1,11 @@
--[[
smapi.lua
Interface with thinkpad battery information
--[[
smapi.lua
Interface with thinkpad battery information
Licensed under GNU General Public License v2 Licensed under GNU General Public License v2
* (c) 2013, Conor Heine * (c) 2013, Conor Heine
--]] --]]
@ -19,42 +21,42 @@ local apipath = "/sys/devices/platform/smapi"
-- Most are readable values, but some can be written to (not implemented, yet?) -- Most are readable values, but some can be written to (not implemented, yet?)
local readable = { local readable = {
barcoding = true, barcoding = true,
charging_max_current = true, charging_max_current = true,
charging_max_voltage = true, charging_max_voltage = true,
chemistry = true, chemistry = true,
current_avg = true, current_avg = true,
current_now = true, current_now = true,
cycle_count = true, cycle_count = true,
design_capacity = true, design_capacity = true,
design_voltage = true, design_voltage = true,
dump = true, dump = true,
first_use_date = true, first_use_date = true,
force_discharge = false, force_discharge = false,
group0_voltage = true, group0_voltage = true,
group1_voltage = true, group1_voltage = true,
group2_voltage = true, group2_voltage = true,
group3_voltage = true, group3_voltage = true,
inhibit_charge_minutes = false, inhibit_charge_minutes = false,
installed = true, installed = true,
last_full_capacity = true, last_full_capacity = true,
manufacture_date = true, manufacture_date = true,
manufacturer = true, manufacturer = true,
model = true, model = true,
power_avg = true, power_avg = true,
power_now = true, power_now = true,
remaining_capacity = true, remaining_capacity = true,
remaining_charging_time = true, remaining_charging_time = true,
remaining_percent = true, remaining_percent = true,
remaining_percent_error = true, remaining_percent_error = true,
remaining_running_time = true, remaining_running_time = true,
remaining_running_time_now = true, remaining_running_time_now = true,
serial = true, serial = true,
start_charge_thresh = false, start_charge_thresh = false,
state = true, state = true,
stop_charge_thresh = false, stop_charge_thresh = false,
temperature = true, temperature = true,
voltage = true, voltage = true,
} }
function smapi:battery(name) function smapi:battery(name)
@ -62,7 +64,7 @@ function smapi:battery(name)
bat.name = name bat.name = name
bat.path = apipath .. "/" .. name bat.path = apipath .. "/" .. name
function bat:get(item) function bat:get(item)
return self.path ~= nil and readable[item] and first_line(self.path .. "/" .. item) or nil return self.path ~= nil and readable[item] and first_line(self.path .. "/" .. item) or nil
end end
@ -80,11 +82,11 @@ function smapi:battery(name)
local time_val = bat_now.status == 'discharging' and 'remaining_running_time' or 'remaining_charging_time' local time_val = bat_now.status == 'discharging' and 'remaining_running_time' or 'remaining_charging_time'
local mins_left = self:get(time_val) local mins_left = self:get(time_val)
if mins_left:find("^%d+") == nil if mins_left:find("^%d+") == nil
then then
return "N/A" return "N/A"
end end
local hrs = mins_left / 60 local hrs = mins_left / 60
local min = mins_left % 60 local min = mins_left % 60
return string.format("%02d:%02d", hrs, min) return string.format("%02d:%02d", hrs, min)
@ -97,4 +99,4 @@ function smapi:battery(name)
return setmetatable(bat, {__metatable = false, __newindex = false}) return setmetatable(bat, {__metatable = false, __newindex = false})
end end
return smapi return smapi