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"))
28 ds = m:section(NamedSection, "global", "travelmate", translate("Interface Wizard"))
30 o = ds:option(Value, "", translate("Uplink interface"))
31 o.datatype = "and(uciname,rangelength(3,15))"
35 btn = ds:option(Button, "trm_iface", translate("Create Uplink Interface"),
36 translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
37 .. translate("add it to the wan zone of the firewall. This step has only to be done once."))
38 btn.inputtitle = translate("Add Interface")
39 btn.inputstyle = "apply"
41 function btn.write(self, section, value)
42 local iface = o:formvalue(section)
44 uci:set("travelmate", section, "trm_iface", iface)
45 uci:save("travelmate")
46 uci:commit("travelmate")
47 local net = nw:add_network(iface, { proto = "dhcp" })
51 local zone = fw:get_zone_by_network("wan")
53 zone:add_network(iface)
58 luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
60 luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
65 -- Main travelmate options
67 s = m:section(NamedSection, "global", "travelmate")
69 o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
70 o1.default = o1.disabled
73 o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
74 translate("Keep travelmate in an active state. Check every n seconds the connection status, i.e. the uplink availability."))
75 o2.default = o2.enabled
78 btn = s:option(Button, "", translate("Manual Rescan"))
79 btn:depends("trm_automatic", "")
80 btn.inputtitle = translate("Rescan")
81 btn.inputstyle = "find"
84 luci.sys.call("env -i /etc/init.d/travelmate start >/dev/null 2>&1")
85 luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
88 o3 = s:option(Value, "trm_iface", translate("Uplink / Trigger interface"),
89 translate("Name of the uplink interface that triggers travelmate processing in 'manual' mode."))
90 o3.datatype = "and(uciname,rangelength(3,15))"
94 o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"),
95 translate("Additional trigger delay in seconds before travelmate processing begins."))
97 o4.datatype = "range(1,90)"
100 -- Runtime information
102 ds = m:section(NamedSection, "global", "travelmate", translate("Runtime Information"))
104 dv1 = ds:option(DummyValue, "status", translate("Online Status"))
105 dv1.template = "travelmate/runtime"
107 dv1.value = translate("n/a")
108 elseif parse.data.station_connection == "true" then
109 dv1.value = translate("connected")
111 dv1.value = translate("not connected")
114 dv2 = ds:option(DummyValue, "travelmate_version", translate("Travelmate version"))
115 dv2.template = "travelmate/runtime"
117 dv2.value = parse.data.travelmate_version or translate("n/a")
119 dv2.value = translate("n/a")
122 dv3 = ds:option(DummyValue, "station_id", translate("Station ID (SSID/BSSID)"))
123 dv3.template = "travelmate/runtime"
125 dv3.value = parse.data.station_id or translate("n/a")
127 dv3.value = translate("n/a")
130 dv4 = ds:option(DummyValue, "station_interface", translate("Station Interface"))
131 dv4.template = "travelmate/runtime"
133 dv4.value = parse.data.station_interface or translate("n/a")
135 dv4.value = translate("n/a")
138 dv5 = ds:option(DummyValue, "station_radio", translate("Station Radio"))
139 dv5.template = "travelmate/runtime"
141 dv5.value = parse.data.station_radio or translate("n/a")
143 dv5.value = translate("n/a")
146 dv6 = ds:option(DummyValue, "last_rundate", translate("Last rundate"))
147 dv6.template = "travelmate/runtime"
149 dv6.value = parse.data.last_rundate or translate("n/a")
151 dv6.value = translate("n/a")
156 e = m:section(NamedSection, "global", "travelmate", translate("Extra options"),
157 translate("Options for further tweaking in case the defaults are not suitable for you."))
159 e1 = e:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
160 e1.default = e1.disabled
163 e2 = e:option(Value, "trm_radio", translate("Radio selection"),
164 translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'."))
165 e2.datatype = "and(uciname,rangelength(6,6))"
168 e3 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
169 translate("How many times should travelmate try to connect to an Uplink. ")
170 .. translate("To disable this feature set it to '0' which means unlimited retries."))
172 e3.datatype = "range(0,30)"
175 e4 = e:option(Value, "trm_maxwait", translate("Interface Timeout"),
176 translate("How long should travelmate wait for a successful wlan interface reload."))
178 e4.datatype = "range(5,60)"
181 e5 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
182 translate("Timeout in seconds between retries in 'automatic' mode."))
184 e5.datatype = "range(60,300)"