-- Copyright 2015 Jo-Philipp Wich -- Licensed to the public under the Apache License 2.0. require "luci.sys" local m, s, o local sensor_types = { ["12v"] = "voltage", ["2.0v"] = "voltage", ["2.5v"] = "voltage", ["3.3v"] = "voltage", ["5.0v"] = "voltage", ["5v"] = "voltage", ["ain1"] = "voltage", ["ain2"] = "voltage", ["cpu_temp"] = "temperature", ["fan1"] = "fanspeed", ["fan2"] = "fanspeed", ["fan3"] = "fanspeed", ["fan4"] = "fanspeed", ["fan5"] = "fanspeed", ["fan6"] = "fanspeed", ["fan7"] = "fanspeed", ["in0"] = "voltage", ["in10"] = "voltage", ["in2"] = "voltage", ["in3"] = "voltage", ["in4"] = "voltage", ["in5"] = "voltage", ["in6"] = "voltage", ["in7"] = "voltage", ["in8"] = "voltage", ["in9"] = "voltage", ["power1"] = "power", ["remote_temp"] = "temperature", ["temp1"] = "temperature", ["temp2"] = "temperature", ["temp3"] = "temperature", ["temp4"] = "temperature", ["temp5"] = "temperature", ["temp6"] = "temperature", ["temp7"] = "temperature", ["temp"] = "temperature", ["vccp1"] = "voltage", ["vccp2"] = "voltage", ["vdd"] = "voltage", ["vid1"] = "voltage", ["vid2"] = "voltage", ["vid3"] = "voltage", ["vid4"] = "voltage", ["vid5"] = "voltage", ["vid"] = "voltage", ["vin1"] = "voltage", ["vin2"] = "voltage", ["vin3"] = "voltage", ["vin4"] = "voltage", ["volt12"] = "voltage", ["volt5"] = "voltage", ["voltbatt"] = "voltage", ["vrm"] = "voltage" } m = Map("luci_statistics", translate("Sensors Plugin Configuration"), translate("The sensors plugin uses the Linux Sensors framework to gather environmental statistics.")) s = m:section( NamedSection, "collectd_sensors", "luci_statistics" ) o = s:option( Flag, "enable", translate("Enable this plugin") ) o.default = 0 o = s:option(Flag, "__all", translate("Monitor all sensors")) o:depends("enable", 1) o.default = 1 o.write = function() end o.cfgvalue = function(self, sid) local v = self.map:get(sid, "Sensor") if v == nil or (type(v) == "table" and #v == 0) or (type(v) == "string" and #v == 0) then return "1" end end o = s:option(MultiValue, "Sensor", translate("Sensor list"), translate("Hold Ctrl to select multiple items or to deselect entries.")) o:depends({enable = 1, __all = "" }) o.widget = "select" o.rmempty = true o.size = 0 local sensorcli = io.popen("/usr/sbin/sensors -u -A") if sensorcli then local bus, sensor while true do local ln = sensorcli:read("*ln") if not ln then break elseif ln:match("^[%w-]+$") then bus = ln elseif ln:match("^[%w-]+:$") then sensor = ln:sub(0, -2):lower() if bus and sensor_types[sensor] then o:value("%s/%s-%s" %{ bus, sensor_types[sensor], sensor }) o.size = o.size + 1 end elseif ln == "" then bus = nil sensor = nil end end sensorcli:close() end o = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) o.default = 0 o.rmempty = true o:depends({ enable = 1, __all = "" }) return m