Merge pull request #396 from fanthos/master
[project/luci.git] / applications / luci-app-statistics / luasrc / model / cbi / luci_statistics / sensors.lua
1 -- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
2 -- Licensed to the public under the Apache License 2.0.
3
4 require "luci.sys"
5
6 local m, s, o
7 local sensor_types = {
8         ["12v"] = "voltage",
9         ["2.0v"] = "voltage",
10         ["2.5v"] = "voltage",
11         ["3.3v"] = "voltage",
12         ["5.0v"] = "voltage",
13         ["5v"] = "voltage",
14         ["ain1"] = "voltage",
15         ["ain2"] = "voltage",
16         ["cpu_temp"] = "temperature",
17         ["fan1"] = "fanspeed",
18         ["fan2"] = "fanspeed",
19         ["fan3"] = "fanspeed",
20         ["fan4"] = "fanspeed",
21         ["fan5"] = "fanspeed",
22         ["fan6"] = "fanspeed",
23         ["fan7"] = "fanspeed",
24         ["in0"] = "voltage",
25         ["in10"] = "voltage",
26         ["in2"] = "voltage",
27         ["in3"] = "voltage",
28         ["in4"] = "voltage",
29         ["in5"] = "voltage",
30         ["in6"] = "voltage",
31         ["in7"] = "voltage",
32         ["in8"] = "voltage",
33         ["in9"] = "voltage",
34         ["power1"] = "power",
35         ["remote_temp"] = "temperature",
36         ["temp1"] = "temperature",
37         ["temp2"] = "temperature",
38         ["temp3"] = "temperature",
39         ["temp4"] = "temperature",
40         ["temp5"] = "temperature",
41         ["temp6"] = "temperature",
42         ["temp7"] = "temperature",
43         ["temp"] = "temperature",
44         ["vccp1"] = "voltage",
45         ["vccp2"] = "voltage",
46         ["vdd"] = "voltage",
47         ["vid1"] = "voltage",
48         ["vid2"] = "voltage",
49         ["vid3"] = "voltage",
50         ["vid4"] = "voltage",
51         ["vid5"] = "voltage",
52         ["vid"] = "voltage",
53         ["vin1"] = "voltage",
54         ["vin2"] = "voltage",
55         ["vin3"] = "voltage",
56         ["vin4"] = "voltage",
57         ["volt12"] = "voltage",
58         ["volt5"] = "voltage",
59         ["voltbatt"] = "voltage",
60         ["vrm"] = "voltage"
61
62 }
63
64
65 m = Map("luci_statistics",
66         translate("Sensors Plugin Configuration"),
67         translate("The sensors plugin uses the Linux Sensors framework to gather environmental statistics."))
68
69 s = m:section( NamedSection, "collectd_sensors", "luci_statistics" )
70
71
72 o = s:option( Flag, "enable", translate("Enable this plugin") )
73 o.default = 0
74
75
76 o = s:option(Flag, "__all", translate("Monitor all sensors"))
77 o:depends("enable", 1)
78 o.default = 1
79 o.write = function() end
80 o.cfgvalue = function(self, sid)
81         local v = self.map:get(sid, "Sensor")
82         if v == nil or (type(v) == "table" and #v == 0) or (type(v) == "string" and #v == 0) then
83                 return "1"
84         end
85 end
86
87
88 o = s:option(MultiValue, "Sensor", translate("Sensor list"), translate("Hold Ctrl to select multiple items or to deselect entries."))
89 o:depends({enable = 1, __all = "" })
90 o.widget = "select"
91 o.rmempty = true
92 o.size = 0
93
94 local sensorcli = io.popen("/usr/sbin/sensors -u -A")
95 if sensorcli then
96         local bus, sensor
97
98         while true do
99                 local ln = sensorcli:read("*ln")
100                 if not ln then
101                         break
102                 elseif ln:match("^[%w-]+$") then
103                         bus = ln
104                 elseif ln:match("^[%w-]+:$") then
105                         sensor = ln:sub(0, -2):lower()
106                         if bus and sensor_types[sensor] then
107                                 o:value("%s/%s-%s" %{ bus, sensor_types[sensor], sensor })
108                                 o.size = o.size + 1
109                         end
110                 elseif ln == "" then
111                         bus = nil
112                         sensor = nil
113                 end
114         end
115
116         sensorcli:close()
117 end
118
119
120 o = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") )
121 o.default = 0
122 o.rmempty = true
123 o:depends({ enable = 1, __all = "" })
124
125 return m