1<%- 2 local ubus = require "ubus" 3 local sys = require "luci.sys" 4 local utl = require "luci.util" 5 6 function guess_thread_signal(info) 7 local scale 8 local icon 9 local rssi = info.Rssi or 0 10 11 if rssi <= -100 then 12 scale = 0 13 elseif rssi >= -50 then 14 scale = 100 15 else 16 scale = math.floor(2 * (100 + rssi)) 17 end 18 19 if info.NetworkName == nil then 20 icon = resource .. "/icons/signal-none.png" 21 elseif scale < 15 then 22 icon = resource .. "/icons/signal-0.png" 23 elseif scale < 35 then 24 icon = resource .. "/icons/signal-0-25.png" 25 elseif scale < 55 then 26 icon = resource .. "/icons/signal-25-50.png" 27 elseif scale < 75 then 28 icon = resource .. "/icons/signal-50-75.png" 29 else 30 icon = resource .. "/icons/signal-75-100.png" 31 end 32 33 return icon 34 end 35 36 function percent_thread_signal(info) 37 local rssi = info.Rssi or 0 38 39 if rssi <= -100 then 40 return 0 41 elseif rssi >= -50 then 42 return 100 43 else 44 return math.floor(2 * (100 + rssi)) 45 end 46 end 47 48 function scanlist() 49 local k, v 50 local l = { } 51 52 local conn = ubus.connect() 53 if not conn then 54 error("Failed to connect to ubusd") 55 end 56 57 local scanresult = conn:call("otbr", "scan", {}) 58 59 for k, v in pairs(scanresult.scan_list) do 60 l[#l+1] = v 61 end 62 63 return l 64 end 65-%> 66 67<%+header%> 68 69<h2><%:Join Network: Thread Scan%></h2> 70<br /> 71 72<div class="cbi-map"> 73 <div class="cbi-section"> 74 <div class="table"> 75 <div class="tr table-titles"> 76 <div class="th col-1 center"><%:RSSI%></div> 77 <div class="th col-1 center"><%:Channel%></div> 78 <div class="th col-2 center"><%:PAN Id%></div> 79 <div class="th col-1 left"><%:Lqi%></div> 80 <div class="th cbi-section-actions"> </div> 81 </div> 82 83 <!-- scan list --> 84 <% for i, net in ipairs(scanlist()) do %> 85 <div class="tr cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> 86 <div class="td col-1 center"> 87 <abbr title="<%:Signal%>: <%=net.Rssi%> <%:dB%> / <%:Quality%>: <%=net.Lqi%>"> 88 <img src="<%=guess_thread_signal(net)%>" /><br /> 89 <small><%=percent_thread_signal(net)%>%</small> 90 </abbr> 91 </div> 92 <div class="td col-1 center" data-title="<%:Channel%>"> 93 <%=net.Channel%> 94 </div> 95 <div class="td col-2 center" data-title="<%:PanId%>"> 96 <%=net.PanId%> 97 </div> 98 <div class="td col-1 left" data-title="<%:Lqi%>"> 99 <%=net.Lqi%> 100 </div> 101 <div class="td cbi-section-actions"> 102 <!--div><%:test%></div--> 103 <form action="<%=url('admin/network/thread_join')%>" method="post"> 104 <input type="hidden" name="token" value="<%=token%>" /> 105 <input type="hidden" name="PanId" value="<%=net.PanId%>" .> 106 <input type="hidden" name="Channel" value="<%=net.Channel%>" .> 107 <input class="cbi-button cbi-button-action important" type="submit" value="<%:Join Network%>" /> 108 </form> 109 </div> 110 </div> 111 <% end %> 112 <!-- /scan list --> 113 </div> 114 </div> 115</div> 116<div class="cbi-page-actions right"> 117 <form class="inline" action="<%=url('admin/network/thread')%>" method="get"> 118 <input class="cbi-button cbi-button-neutral" type="submit" value="<%:Back to overview%>" /> 119 </form> 120 <form class="inline" action="<%=url('admin/network/thread_scan')%>" method="post"> 121 <input type="hidden" name="token" value="<%=token%>" /> 122 <input class="cbi-button cbi-button-action" type="submit" value="<%:Repeat scan%>" /> 123 </form> 124</div> 125 126<%+footer%> 127