openwrt-packages/utils/yunbridge/files/usr/bin/pretty-wifi-info.lua

76 lines
2.0 KiB
Lua
Executable File

#!/usr/bin/lua
local function get_basic_net_info(network, iface, accumulator)
local net = network:get_network(iface)
local device = net and net:get_interface()
if device then
accumulator["uptime"] = net:uptime()
accumulator["iface"] = device:name()
accumulator["mac"] = device:mac()
accumulator["rx_bytes"] = device:rx_bytes()
accumulator["tx_bytes"] = device:tx_bytes()
accumulator["ipaddrs"] = {}
for _, ipaddr in ipairs(device:ipaddrs()) do
accumulator.ipaddrs[#accumulator.ipaddrs + 1] = {
addr = ipaddr:host():string(),
netmask = ipaddr:mask():string()
}
end
end
end
local function get_wifi_info(network, iface, accumulator)
local net = network:get_wifinet(iface)
if net then
local dev = net:get_device()
if dev then
accumulator["mode"] = net:active_mode()
accumulator["ssid"] = net:active_ssid()
accumulator["encryption"] = net:active_encryption()
accumulator["quality"] = net:signal_percent()
end
end
end
local function collect_wifi_info()
local network = require"luci.model.network".init()
local accumulator = {}
get_basic_net_info(network, "lan", accumulator)
get_wifi_info(network, "wlan0", accumulator)
return accumulator
end
local info = collect_wifi_info()
print("Current WiFi configuration")
if info.ssid then
print("SSID: " .. info.ssid)
end
if info.mode then
print("Mode: " .. info.mode)
end
if info.quality then
print("Signal: " .. info.quality .. "%")
end
if info.encryption then
print("Encryption method: " .. info.encryption)
end
if info.iface then
print("Interface name: " .. info.iface)
end
if info.uptime then
print("Active for: " .. math.floor(info.uptime / 60) .. " minutes")
end
if #info.ipaddrs > 0 then
print("IP address: " .. info.ipaddrs[1].addr .. "/" .. info.ipaddrs[1].netmask)
end
if info.mac then
print("MAC address: " .. info.mac)
end
if info.rx_bytes and info.tx_bytes then
print("RX/TX: " .. math.floor(info.rx_bytes / 1024) .. "/" .. math.floor(info.tx_bytes / 1024) .. " KBs")
end