1 -- Copyright 2017 Dirk Brenken (dev@brenken.org)
2 -- This is free software, licensed under the Apache License, Version 2.0
4 local fs = require("nixio.fs")
5 local uci = require("luci.model.uci").cursor()
6 local json = require("luci.jsonc")
7 local nw = require("luci.model.network").init()
8 local fw = require("luci.model.firewall").init()
9 local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
10 local trminput = uci.get("travelmate", "global", "trm_rtfile") or "/tmp/trm_runtime.json"
11 local uplink = uci.get("network", trmiface) or ""
12 local parse = json.parse(fs.readfile(trminput) or "")
14 m = Map("travelmate", translate("Travelmate"),
15 translate("Configuration of the travelmate package to to enable travel router functionality. ")
16 .. translatef("For further information "
17 .. "<a href=\"%s\" target=\"_blank\">"
18 .. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md"))
20 function m.on_after_commit(self)
21 luci.sys.call("env -i /etc/init.d/travelmate restart >/dev/null 2>&1")
22 luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
25 s = m:section(NamedSection, "global", "travelmate")
30 dv = s:option(DummyValue, "", translate("Interface Wizard"))
31 dv.template = "cbi/nullsection"
33 o = s:option(Value, "", translate("Uplink interface"))
34 o.datatype = "and(uciname,rangelength(3,15))"
38 btn = s:option(Button, "trm_iface", translate("Create Uplink Interface"),
39 translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
40 .. translate("add it to the wan zone of the firewall. This step has only to be done once."))
41 btn.inputtitle = translate("Add Interface")
42 btn.inputstyle = "apply"
44 function btn.write(self, section, value)
45 local iface = o:formvalue(section)
47 uci:set("travelmate", section, "trm_iface", iface)
48 uci:save("travelmate")
49 uci:commit("travelmate")
50 local net = nw:add_network(iface, { proto = "dhcp" })
54 local zone = fw:get_zone_by_network("wan")
56 zone:add_network(iface)
61 luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
63 luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
68 -- Main travelmate options
70 o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
71 o1.default = o1.disabled
74 o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
75 translate("Keep travelmate in an active state. Check every n seconds the connection status, i.e. the uplink availability."))
76 o2.default = o2.enabled
79 btn = s:option(Button, "", translate("Manual Rescan"))
80 btn:depends("trm_automatic", "")
81 btn.inputtitle = translate("Rescan")
82 btn.inputstyle = "find"
85 luci.sys.call("env -i /etc/init.d/travelmate start >/dev/null 2>&1")
86 luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
89 o3 = s:option(Value, "trm_iface", translate("Uplink / Trigger interface"),
90 translate("Name of the uplink interface that triggers travelmate processing in 'manual' mode."))
91 o3.datatype = "and(uciname,rangelength(3,15))"
95 o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"),
96 translate("Additional trigger delay in seconds before travelmate processing begins."))
98 o4.datatype = "range(1,90)"
101 o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
102 o5.default = o5.disabled
105 -- Runtime information
107 ds = s:option(DummyValue, "_dummy", translate("Runtime information"))
108 ds.template = "cbi/nullsection"
110 dv1 = s:option(DummyValue, "status", translate("Online Status"))
111 dv1.template = "travelmate/runtime"
113 dv1.value = translate("n/a")
114 elseif parse.data.station_connection == "true" then
115 dv1.value = translate("connected")
117 dv1.value = translate("not connected")
120 dv2 = s:option(DummyValue, "travelmate_version", translate("Travelmate version"))
121 dv2.template = "travelmate/runtime"
123 dv2.value = parse.data.travelmate_version or translate("n/a")
125 dv2.value = translate("n/a")
128 dv3 = s:option(DummyValue, "station_ssid", translate("Station SSID"))
129 dv3.template = "travelmate/runtime"
131 dv3.value = parse.data.station_ssid or translate("n/a")
133 dv3.value = translate("n/a")
136 dv4 = s:option(DummyValue, "station_interface", translate("Station Interface"))
137 dv4.template = "travelmate/runtime"
139 dv4.value = parse.data.station_interface or translate("n/a")
141 dv4.value = translate("n/a")
144 dv5 = s:option(DummyValue, "station_radio", translate("Station Radio"))
145 dv5.template = "travelmate/runtime"
147 dv5.value = parse.data.station_radio or translate("n/a")
149 dv5.value = translate("n/a")
152 dv6 = s:option(DummyValue, "last_rundate", translate("Last rundate"))
153 dv6.template = "travelmate/runtime"
155 dv6.value = parse.data.last_rundate or translate("n/a")
157 dv6.value = translate("n/a")
162 e = m:section(NamedSection, "global", "travelmate", translate("Extra options"),
163 translate("Options for further tweaking in case the defaults are not suitable for you."))
165 e1 = e:option(Value, "trm_radio", translate("Radio selection"),
166 translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'"))
167 e1.datatype = "and(uciname,rangelength(6,6))"
170 e2 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
171 translate("How many times should travelmate try to connect to an Uplink"))
173 e2.datatype = "range(1,10)"
176 e3 = e:option(Value, "trm_maxwait", translate("Interface Timeout"),
177 translate("How long should travelmate wait for a successful wlan interface reload"))
179 e3.datatype = "range(5,60)"
182 e4 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
183 translate("Timeout in seconds between retries in 'automatic' mode"))
185 e4.datatype = "range(60,300)"