2 Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
3 This is free software, licensed under the Apache License, Version 2.0
6 <%+travelmate/travelmate_css%>
7 <script type="text/javascript">
9 function status_update(json)
11 var btn1 = document.getElementById("btn1");
12 var view = document.getElementById("value_1");
13 var input = json.data.travelmate_status;
15 btn1.value = "<%:Restart%>";
16 btn1.name = "do_restart";
17 view.innerHTML = input || "-";
18 view = document.getElementById("value_2");
19 input = json.data.travelmate_version;
20 view.innerHTML = input || "-";
21 view = document.getElementById("value_3");
22 input = json.data.station_id;
23 view.innerHTML = input || "-";
24 view = document.getElementById("value_4");
25 input = json.data.station_interface;
26 view.innerHTML = input || "-";
27 view = document.getElementById("value_5");
28 input = json.data.faulty_stations;
29 view.innerHTML = input || "-";
30 view = document.getElementById("value_6");
31 input = json.data.last_rundate;
32 view.innerHTML = input || "-";
35 function btn_action(action)
37 var btn1 = document.getElementById("btn1");
38 var btn1_running = document.getElementById("btn1_running");
41 running(btn1_running, 1);
43 new XHR.get('<%=luci.dispatcher.build_url("admin", "services", "travelmate")%>/action/' + action.name, null,
50 btn1.disabled = false;
51 running(btn1_running, 0);
55 function running(element, state)
59 var running_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />';
60 element.innerHTML = running_html;
64 element.innerHTML = '';
68 function toggle_qrcode() {
69 var view = document.getElementById("qrcode");
70 if (view.style.display === "none") {
71 view.style.display = "block";
73 view.style.display = "none";
77 XHR.get('<%=luci.dispatcher.build_url("admin", "services", "travelmate", "status")%>', null,
78 function(x, json_info)
84 status_update(json_info)
87 XHR.poll(-1, '<%=luci.dispatcher.build_url("admin", "services", "travelmate", "status")%>', null,
88 function(x, json_info)
94 status_update(json_info)
99 <h3><%:Runtime Information%></h3>
100 <div class="cbi-value" id="status_1">
101 <label class="cbi-value-title" for="status_1"><%:Travelmate Status (Quality)%></label>
102 <div class="cbi-value-field">
103 <span class="runtime" id="value_1">-</span>
106 <div class="cbi-value" id="status_2">
107 <label class="cbi-value-title" for="status_2"><%:Travelmate Version%></label>
108 <div class="cbi-value-field">
109 <span class="runtime" id="value_2">-</span>
112 <div class="cbi-value" id="status_3">
113 <label class="cbi-value-title" for="status_3"><%:Station ID (RADIO/SSID/BSSID)%></label>
114 <div class="cbi-value-field">
115 <span class="runtime" id="value_3">-</span>
118 <div class="cbi-value" id="status_4">
119 <label class="cbi-value-title" for="status_4"><%:Station Interface%></label>
120 <div class="cbi-value-field">
121 <span class="runtime" id="value_4">-</span>
124 <div class="cbi-value" id="status_5">
125 <label class="cbi-value-title" for="status_5"><%:Faulty Stations%></label>
126 <div class="cbi-value-field">
127 <span class="runtime" id="value_5">-</span>
130 <div class="cbi-value" id="status_6">
131 <label class="cbi-value-title" for="status_6"><%:Last Run%></label>
132 <div class="cbi-value-field">
133 <span class="runtime" id="value_6">-</span>
137 <div class="cbi-value" id="button_1">
138 <label class="cbi-value-title" for="button_1"><%:Restart Travelmate%></label>
139 <div class="cbi-value-field">
140 <input class="cbi-button cbi-button-reset" id="btn1" type="button" name="do_restart" value="<%:Restart%>" onclick="btn_action(this)" />
141 <span id="btn1_running" class="btn_running"></span>
144 <div class="cbi-value" id="button_2">
145 <label class="cbi-value-title" for="button_2"><%:View AP QR-Codes%></label>
146 <div class="cbi-value-field">
147 <input class="cbi-button cbi-button-apply" type="button" value="<%:Show/Hide QR-Codes%>" onclick="toggle_qrcode()" />
150 <div class="cbi-value" style="margin-bottom: 0px">
151 <span class="cbi-value" style="display: none" id="qrcode">
153 local fs = require("nixio.fs")
154 local uci = require("luci.model.uci").cursor()
157 uci:foreach("wireless", "wifi-iface", function(s)
158 local device = s.device or ""
159 local mode = s.mode or ""
160 local ssid = s.ssid or ""
161 local enc = s.encryption or ""
162 local key = s.key or ""
163 local hidden = s.hidden or "false"
164 local disabled = s.disabled or ""
165 local wep_slots = {s.key1 or "", s.key2 or "", s.key3 or "", s.key4 or ""}
167 if device and mode == "ap" and disabled ~= "1" then
168 if string.match(enc, '^psk') then
170 elseif string.match(enc, '^wep') then
172 if tonumber(key) then
173 key = wep_slots[tonumber(key)]
175 elseif enc == "none" then
182 if hidden == "1" then
186 if ssid and enc and key then
187 local e_ssid = string.gsub(ssid,"[\"\\';:, ]",[[\\\%1]])
188 local e_key = string.gsub(key,"[\"\\';:, ]",[[\\\%1]])
190 if fs.access("/usr/bin/qrencode") then
191 qrcode = luci.sys.exec("/usr/bin/qrencode --inline --8bit --type=SVG --output=- 'WIFI:S:\"'" .. e_ssid .. "'\";T:'" .. enc .. "';P:\"'" .. e_key .. "'\";H:'" .. hidden .. "';'")
193 <div class="qr-code">
196 <div class="qr-code">
197 <em><%:AP on %><%=device%><%: with SSID %>"<%=ssid%>"</em>
207 <div class="qr-code">
208 <em><%:For QR-Code support please install package 'qrencode'!%></em>