luci/applications/luci-app-nut/luasrc/model/cbi/nut_server.lua
Daniel Dickinson fb262ad268 luci-app-nut: Add support for NUT configuration
Adds app to configure NUT (Network UPS Tools), including
nut-server, nut-monitor, and nut-cgi.

Signed-off-by: Daniel F. Dickinson <cshored@thecshore.com>
2018-08-29 01:03:17 -04:00

191 lines
5.4 KiB
Lua

-- Copyright 2015 Daniel Dickinson <openwrt@daniel.thecshore.com>
-- Licensed to the public under the Apache License 2.0.
local m, s, o
local nixio = require "nixio"
require "luci.util"
m = Map("nut_server", translate("Network UPS Tools (Server)"),
translate("Network UPS Tools Server Configuration"))
s = m:section(TypedSection, "user", translate("NUT Users"))
s.addremove = true
s.anonymous = true
o = s:option(Value, "username", translate("Username"))
o.optional = false
o = s:option(Value, "password", translate("Password"))
o.password = true
o.optional = false
o = s:option(MultiValue, "actions", translate("Allowed actions"))
o.widget = "select"
o:value("set", translate("Set variables"))
o:value("fsd", translate("Forced Shutdown"))
o.optional = true
o = s:option(DynamicList, "instcmd", translate("Instant commands"), translate("Use upscmd -l to see full list which the commands your UPS supports (requires upscmd package)"))
o.optional = true
o = s:option(ListValue, "upsmon", translate("Role"))
o:value("slave", translate("Slave"))
o:value("master", translate("Master"))
o.optional = false
s = m:section(TypedSection, "listen_address", translate("Addresses on which to listen"))
s.addremove = true
s.anonymous = true
o = s:option(Value, "address", translate("IP Address"))
o.optional = false
o.datatype = "ipaddr"
o.placeholder = "127.0.0.1"
o = s:option(Value, "port", translate("Port"))
o.optional = true
o.datatype = "port"
o.placeholder = "3493"
s = m:section(NamedSection, "upsd", "upsd", translate("Global Settings"))
s.addremove = true
o = s:option(Value, "maxage", translate("Maximum Age of Data"), translate("Period after which data is considered stale"))
o.datatype = "uinteger"
o.optional = true
o.placeholder = 15
o = s:option(Value, "runas", translate("RunAs User"), translate("Drop privileges to this user"))
o.optional = true
o.placeholder = "nut"
o = s:option(Value, "statepath", translate("Path to state file"))
o.optional = true
o.placeholder = "/var/run/nut"
o = s:option(Value, "maxconn", translate("Maximum connections"))
o.optional = true
o.datatype = "uinteger"
o.placeholder = 24
if luci.util.checklib("/usr/sbin/upsd", "libssl.so") then
o = s:option(Value, "certfile", translate("Certificate file (SSL)"))
o.optional = true
end
s = m:section(TypedSection, "driver", translate("Driver Configuration"),
translate("The name of this section will be used as UPS name elsewhere"))
s.addremove = true
s.anonymous = false
driverlist = nixio.fs.dir("/lib/nut")
o = s:option(ListValue, "driver", translate("Driver"))
for driver in driverlist do
o:value(driver)
end
o.optional = false
o = s:option(Value, "port", translate("Port"))
o.optional = false
o.default = "auto"
o = s:option(Value, "mfr", translate("Manufacturer (Display)"))
o.optional = true
o = s:option(Value, "model", translate("Model (Display)"))
o.optional = true
o = s:option(Value, "serial", translate("Serial Number"))
o.optional = true
o = s:option(Value, "sdtime", translate("Additional Shutdown Time(s)"))
o.optional = true
o = s:option(Value, "offdelay", translate("Off Delay(s)"), translate("Delay for kill power command"))
o.optional = true
o.placeholder = 20
n = s:option(Value, "ondelay", translate("On Delay(s)"), translate("Delay to power on UPS if power returns after kill power"))
n.optional = true
n.placeholder = 30
function o.validate(self, cfg, value)
if n:cfgvalue(cfg) <= value then
return nil
end
end
function n.validate(self, cfg, value)
if o:cfgvalue(cfg) >= value then
return nil
end
end
o = s:option(Value, "pollfreq", translate("Polling Frequency(s)"))
o.optional = true
o.datatype = "integer"
o.placeholder = 30
o = s:option(Value, "vendor", translate("Vendor (regex)"))
o.optional = true
o = s:option(Value, "product", translate("Product (regex)"))
o.optional = true
o = s:option(Value, "bus", translate("USB Bus(es) (regex)"))
o.optional = true
o.datatype = "uinteger"
o = s:option(Flag, "interruptonly", translate("Interrupt Only"))
o.optional = true
o.default = false
o = s:option(Value, "interruptsize", translate("Interrupt Size"), translate("Bytes to read from interrupt pipe"))
o.optional = true
o.datatype = "integer"
o = s:option(Value, "maxreport", translate("Max USB HID Length Reported"), translate("Workaround for buggy firmware"))
o.optional = true
o.datatype = "integer"
o.default = nil
o = s:option(Value, "vendorid", translate("USB Vendor Id"))
o.optional = true
o = s:option(Value, "productid", translate("USB Product Id"))
o.optional = true
o = s:option(Value, "runas", translate("RunAs User"), translate("User as which to execute driver; requires device file accessed by driver be read-write for that user."))
o.optional = true
o.placeholder = "nut"
o = s:option(Value, "community", translate("SNMP Community"))
o.optional = true
o.placeholder = "private"
o = s:option(ListValue, "snmp_version", translate("SNMP version"))
o.optional = true
o:value("v1", translate("SNMPv1"))
o:value("v2c", translate("SNMPv2c"))
o:value("v3", translate("SNMPv3"))
o:value("", "")
o.default = ""
o = s:option(Value, "snmp_retries", translate("SNMP retries"))
o.optional = true
o.datatype = "uinteger"
o = s:option(Value, "snmp_timeout", translate("SNMP timeout(s)"))
o.optional = true
o.datatype = "uinteger"
o = s:option(Flag, "notransferoids", translate("No low/high voltage transfer OIDs"))
o.optional = true
o.default = false
o = s:option(Value, "other", translate("Additional Parameters"))
o.optional = true
return m