diff options
Diffstat (limited to 'widgets/thermal.lua')
-rw-r--r-- | widgets/thermal.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/widgets/thermal.lua b/widgets/thermal.lua new file mode 100644 index 0000000..9768c57 --- /dev/null +++ b/widgets/thermal.lua @@ -0,0 +1,42 @@ +--------------------------------------------------- +-- Licensed under the GNU General Public License v2 +-- * (c) 2010, Adrian C. <anrxc@sysphere.org> +--------------------------------------------------- + +-- {{{ Grab environment +local type = type +local tonumber = tonumber +local setmetatable = setmetatable +local string = { match = string.match } +local helpers = require("vicious.helpers") +-- }}} + + +-- Thermal: provides temperature levels of ACPI and coretemp thermal zones +module("vicious.widgets.thermal") + + +-- {{{ Thermal widget type +local function worker(format, warg) + local zone = { -- Known temperature data sources + ["sys"] = {"/sys/class/thermal/", file = "temp", div = 1000}, + ["core"] = {"/sys/devices/platform/", file = "temp1_input",div = 1000}, + ["proc"] = {"/proc/acpi/thermal_zone/",file = "temperature"} + } -- Default to /sys/class/thermal + local warg = type(warg) == "table" and warg or {warg, "sys"} + local thermal = helpers.pathtotable(zone[warg[2]][1] .. warg[1]) + + -- Get temperature from thermal zone + if thermal[zone[warg[2]].file] then + if zone[warg[2]].div then + return {thermal[zone[warg[2]].file] / zone[warg[2]].div} + else -- /proc/acpi "temperature: N C" + return {tonumber(string.match(thermal[zone[warg[2]].file], "[%d]+"))} + end + end + + return {0} +end +-- }}} + +setmetatable(_M, { __call = function(_, ...) return worker(...) end }) |