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("/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, "nil", translate("Interface Wizard"))
31 dv.template = "cbi/nullsection"
33 o = s:option(Value, "trm_iface", translate("Uplink interface"))
34 o.datatype = "and(uciname,rangelength(3,15))"
35 o.default = "trm_wwan"
38 function o.validate(self, value)
43 function o.write(self, section, value)
44 uci:set("travelmate", section, "trm_iface", iface)
45 uci:save("travelmate")
46 uci:commit("travelmate")
49 btn = s:option(Button, "", translate("Create Uplink Interface"),
50 translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
51 .. translate("add it to the wan zone of the firewall. This step has only to be done once."))
52 btn.inputtitle = translate("Add Interface")
53 btn.inputstyle = "apply"
56 local net = nw:add_network(iface, { proto = "dhcp" })
60 local zone = fw:get_zone_by_network("wan")
62 zone:add_network(iface)
65 luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
68 luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
73 -- Main travelmate options
75 o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
76 o1.default = o1.disabled
79 o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
80 translate("Keep travelmate in an active state."))
81 o2.default = o2.enabled
84 o3 = s:option(Value, "trm_iface", translate("Uplink / Trigger interface"),
85 translate("Name of the uplink interface that triggers travelmate processing."))
86 o3.datatype = "and(uciname,rangelength(3,15))"
87 o3.default = "trm_wwan"
90 o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"),
91 translate("Additional trigger delay in seconds before travelmate processing begins."))
93 o4.datatype = "range(1,90)"
96 o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
97 o5.default = o5.disabled
100 -- Runtime information
102 ds = s:option(DummyValue, "_dummy", translate("Runtime information"))
103 ds.template = "cbi/nullsection"
105 dv1 = s:option(DummyValue, "status", translate("Online Status"))
106 dv1.template = "travelmate/runtime"
108 dv1.value = translate("n/a")
109 elseif parse.data.station_connection == "true" then
110 dv1.value = translate("connected")
112 dv1.value = translate("not connected")
115 dv2 = s:option(DummyValue, "travelmate_version", translate("Travelmate version"))
116 dv2.template = "travelmate/runtime"
118 dv2.value = parse.data.travelmate_version or translate("n/a")
120 dv2.value = translate("n/a")
123 dv3 = s:option(DummyValue, "station_ssid", translate("Station SSID"))
124 dv3.template = "travelmate/runtime"
126 dv3.value = parse.data.station_ssid or translate("n/a")
128 dv3.value = translate("n/a")
131 dv4 = s:option(DummyValue, "station_interface", translate("Station Interface"))
132 dv4.template = "travelmate/runtime"
134 dv4.value = parse.data.station_interface or translate("n/a")
136 dv4.value = translate("n/a")
139 dv5 = s:option(DummyValue, "station_radio", translate("Station Radio"))
140 dv5.template = "travelmate/runtime"
142 dv5.value = parse.data.station_radio or translate("n/a")
144 dv5.value = translate("n/a")
147 dv6 = s:option(DummyValue, "last_rundate", translate("Last rundate"))
148 dv6.template = "travelmate/runtime"
150 dv6.value = parse.data.last_rundate or translate("n/a")
152 dv6.value = translate("n/a")
157 e = m:section(NamedSection, "global", "travelmate", translate("Extra options"),
158 translate("Options for further tweaking in case the defaults are not suitable for you."))
160 e1 = e:option(Value, "trm_radio", translate("Radio selection"),
161 translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'"))
164 e2 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
165 translate("How many times should travelmate try to connect to an Uplink"))
167 e2.datatype = "range(1,10)"
170 e3 = e:option(Value, "trm_maxwait", translate("Interface Timeout"),
171 translate("How long should travelmate wait for a successful wlan interface reload"))
173 e3.datatype = "range(5,60)"
176 e4 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
177 translate("Timeout in seconds between retries in 'automatic' mode"))
179 e4.datatype = "range(5,300)"