Wireless: fix potential double entries in station list

Also added wireless band under "info"
This commit is contained in:
bergware
2025-03-24 21:52:53 +01:00
parent 75a522a92c
commit 8043d9e32e
2 changed files with 29 additions and 13 deletions
+21 -6
View File
@@ -50,16 +50,31 @@ if ($v6on) {
echo "<table style='text-align:left;font-size:1.2rem'>";
echo "<tr><td>&nbsp;</td><td>&nbsp;</td></tr>";
if ($wlan0) {
exec("iw wlan0 link | awk '/^\s+(SSID|signal|[rt]x bitrate): /{print $1,$2,$3,$4}'",$speed);
if (count($speed)==4) {
exec("iw wlan0 link | awk '/^\s+(SSID|freq|signal|[rt]x bitrate): /{print \$1,\$2,\$3,\$4,\$5}'",$speed);
if (count($speed) == 5) {
$network = explode(': ',$speed[0])[1];
$signal = explode(': ',$speed[1])[1];
$rxrate = explode(': ',$speed[2])[1];
$txrate = explode(': ',$speed[3])[1];
$freq = explode(': ',$speed[1])[1];
$signal = explode(': ',$speed[2])[1];
$rxrate = explode(': ',$speed[3])[1];
$txrate = explode(': ',$speed[4])[1];
} else {
$network = $signal = $rxrate = $txrate = _('Unknown');
}
echo "<tr><td>"._('Network name').":</td><td>$network</td></tr>";
switch (true) {
case ($freq >= 2400 && $freq < 2500):
$band = '(2.4G)';
break;
case ($freq >= 5000 && $freq < 6000):
$band = '(5G)';
break;
case ($freq >= 6000 && $freq < 7000):
$band = '(6G)';
break;
default:
$band = '';
break;
}
echo "<tr><td>"._('Network name').":</td><td>$network $band</td></tr>";
echo "<tr><td>"._('Signal level').":</td><td>$signal</td></tr>";
echo "<tr><td>"._('Receive bitrate').":</td><td>$rxrate</td></tr>";
echo "<tr><td>"._('Transmit bitrate').":</td><td>$txrate</td></tr>";
+8 -7
View File
@@ -38,17 +38,18 @@ function scanWifi($port) {
exec("iw ".escapeshellarg($port)." scan | grep -P '^BSS|signal:|SSID:|Authentication suites:'",$scan);
$n = -1;
for ($i=0; $i<count($scan); $i++) {
if (substr($scan[$i],0,3)=='BSS') {
if (substr($scan[$i],0,3) == 'BSS') {
$wlan[++$n]['bss'] = substr($scan[$i],4,17);
} elseif (strpos($scan[$i],'signal:')!==false) {
} elseif (strpos($scan[$i],'signal:') !== false) {
$wlan[$n]['signal'] = trim(explode(': ',$scan[$i])[1]);
} elseif (strpos($scan[$i],'SSID:')!==false) {
$wlan[$n]['ssid'] = trim(explode(': ',$scan[$i])[1]);
} elseif (strpos($scan[$i],'Authentication suites:')!==false) {
$wlan[$n]['security'] = trim(explode(': ',$scan[$i])[1]);
} elseif (strpos($scan[$i],'SSID:') !== false) {
$wlan[$n]['ssid'] = trim(explode(': ', $scan[$i])[1]);
} elseif (strpos($scan[$i],'Authentication suites:') !== false) {
$wlan[$n]['security'] = trim(explode(': ', $scan[$i])[1]);
}
}
foreach ($wlan as $key) if (!in_array($key['ssid'], array_column($scan, 'ssid'))) $scan[] = $key;
$n = 0;
foreach ($wlan as $key) if (!in_array($key['ssid'], array_column($scan,'ssid')??[])) $scan[$n++] = $key;
return $scan;
}