mirror of
https://github.com/billz/raspap-webgui.git
synced 2023-10-10 13:37:24 +02:00
Merge pull request #589 from billz/zbchristian/wifi-sorting
Sort and filter available client networks
This commit is contained in:
commit
8c6f0bd5fc
@ -13,5 +13,6 @@ $ssid = null;
|
||||
knownWifiStations($networks);
|
||||
nearbyWifiStations($networks, !isset($_REQUEST["refresh"]));
|
||||
connectedWifiStations($networks);
|
||||
sortNetworksByRSSI($networks);
|
||||
|
||||
echo renderTemplate('wifi_stations', compact('networks'));
|
||||
|
@ -94,6 +94,7 @@ function DisplayWPAConfig()
|
||||
|
||||
nearbyWifiStations($networks);
|
||||
connectedWifiStations($networks);
|
||||
sortNetworksByRSSI($networks);
|
||||
|
||||
echo renderTemplate("configure_client", compact("status"));
|
||||
}
|
||||
|
@ -52,7 +52,8 @@ function nearbyWifiStations(&$networks, $cached = true)
|
||||
}
|
||||
|
||||
$scan_results = cache(
|
||||
$cacheKey, function () {
|
||||
$cacheKey,
|
||||
function () {
|
||||
exec('sudo wpa_cli -i ' . RASPI_WIFI_CLIENT_INTERFACE . ' scan');
|
||||
sleep(3);
|
||||
|
||||
@ -63,16 +64,30 @@ function nearbyWifiStations(&$networks, $cached = true)
|
||||
}
|
||||
);
|
||||
|
||||
// get the name of the AP. Should be excluded from nearby networks
|
||||
exec('cat '.RASPI_HOSTAPD_CONFIG.' | sed -rn "s/ssid=(.*)\s*$/\1/p" ', $ap_ssid);
|
||||
$ap_ssid = $ap_ssid[0];
|
||||
|
||||
foreach (explode("\n", $scan_results) as $network) {
|
||||
$arrNetwork = preg_split("/[\t]+/", $network); // split result into array
|
||||
if (!array_key_exists(4, $arrNetwork) ||
|
||||
trim($arrNetwork[4]) == $ap_ssid) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$ssid = trim($arrNetwork[4]);
|
||||
// filter SSID string: anything invisible in 7bit ASCII or quotes -> ignore network
|
||||
if (preg_match('[\x00-\x1f\x7f-\xff\'\`\´\"]', $ssid)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// If network is saved
|
||||
if (array_key_exists(4, $arrNetwork) && array_key_exists($arrNetwork[4], $networks)) {
|
||||
$networks[$arrNetwork[4]]['visible'] = true;
|
||||
$networks[$arrNetwork[4]]['channel'] = ConvertToChannel($arrNetwork[1]);
|
||||
if (array_key_exists($ssid, $networks)) {
|
||||
$networks[$ssid]['visible'] = true;
|
||||
$networks[$ssid]['channel'] = ConvertToChannel($arrNetwork[1]);
|
||||
// TODO What if the security has changed?
|
||||
} else {
|
||||
$networks[$arrNetwork[4]] = array(
|
||||
$networks[$ssid] = array(
|
||||
'configured' => false,
|
||||
'protocol' => ConvertToSecurity($arrNetwork[3]),
|
||||
'channel' => ConvertToChannel($arrNetwork[1]),
|
||||
@ -82,9 +97,11 @@ function nearbyWifiStations(&$networks, $cached = true)
|
||||
);
|
||||
}
|
||||
|
||||
// Save RSSI
|
||||
if (array_key_exists(4, $arrNetwork)) {
|
||||
$networks[$arrNetwork[4]]['RSSI'] = $arrNetwork[2];
|
||||
// Save RSSI, if the current value is larger than the already stored
|
||||
if (array_key_exists(4, $arrNetwork) && array_key_exists($arrNetwork[4], $networks)) {
|
||||
if (! array_key_exists('RSSI', $networks[$arrNetwork[4]]) || $networks[$ssid]['RSSI'] < $arrNetwork[2]) {
|
||||
$networks[$ssid]['RSSI'] = $arrNetwork[2];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -98,3 +115,21 @@ function connectedWifiStations(&$networks)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function sortNetworksByRSSI(&$networks)
|
||||
{
|
||||
$valRSSI = array();
|
||||
foreach ($networks as $SSID => $net) {
|
||||
if (!array_key_exists('RSSI', $net)) {
|
||||
$net['RSSI'] = -1000;
|
||||
}
|
||||
$valRSSI[$SSID] = $net['RSSI'];
|
||||
}
|
||||
$nets = $networks;
|
||||
arsort($valRSSI);
|
||||
$networks = array();
|
||||
foreach ($valRSSI as $SSID => $RSSI) {
|
||||
$networks[$SSID] = $nets[$SSID];
|
||||
$networks[$SSID]['RSSI'] = $RSSI;
|
||||
}
|
||||
}
|
||||
|
@ -16,41 +16,46 @@
|
||||
} ?>
|
||||
<h5 class="card-title"><?php echo htmlspecialchars($ssid, ENT_QUOTES); ?></h5>
|
||||
|
||||
<div class="info-item-wifi"><?php echo _("Status"); ?></div>
|
||||
<div class="info-item-wifi"><?php echo _("Status"); ?></div>
|
||||
<div>
|
||||
<?php if ($network['configured']) { ?>
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<?php } ?>
|
||||
<?php if ($network['connected']) { ?>
|
||||
<i class="fas fa-exchange-alt"></i>
|
||||
<?php } ?>
|
||||
<?php if (!$network['configured'] && !$network['connected']) {
|
||||
echo _("Not configured");
|
||||
<?php if ($network['configured']) { ?>
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<?php } ?>
|
||||
<?php if ($network['connected']) { ?>
|
||||
<i class="fas fa-exchange-alt"></i>
|
||||
<?php } ?>
|
||||
<?php if (!$network['configured'] && !$network['connected']) {
|
||||
echo _("Not configured");
|
||||
} ?>
|
||||
</div>
|
||||
|
||||
<div class="info-item-wifi"><?php echo _("Channel"); ?></div>
|
||||
<div class="info-item-wifi"><?php echo _("Channel"); ?></div>
|
||||
<div>
|
||||
<?php if ($network['visible']) { ?>
|
||||
<?php echo htmlspecialchars($network['channel'], ENT_QUOTES) ?>
|
||||
<?php } else { ?>
|
||||
<span class="label label-warning"> X </span>
|
||||
<?php } ?>
|
||||
<?php if ($network['visible']) { ?>
|
||||
<?php echo htmlspecialchars($network['channel'], ENT_QUOTES) ?>
|
||||
<?php } else { ?>
|
||||
<span class="label label-warning"> X </span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<div class="info-item-wifi"><?php echo _("RSSI"); ?></div>
|
||||
<div class="info-item-wifi"><?php echo _("RSSI"); ?></div>
|
||||
<div>
|
||||
<?php echo htmlspecialchars($network['RSSI'], ENT_QUOTES);
|
||||
echo "dB (";
|
||||
if ($network['RSSI'] >= -50) {
|
||||
echo 100;
|
||||
} elseif ($network['RSSI'] <= -100) {
|
||||
echo 0;
|
||||
} else {
|
||||
echo 2*($network['RSSI'] + 100);
|
||||
}
|
||||
echo "%)";
|
||||
?>
|
||||
<?php
|
||||
if (isset($network['RSSI']) && $network['RSSI'] >= -200) {
|
||||
echo htmlspecialchars($network['RSSI'], ENT_QUOTES);
|
||||
echo "dB (";
|
||||
if ($network['RSSI'] >= -50) {
|
||||
echo 100;
|
||||
} elseif ($network['RSSI'] <= -100) {
|
||||
echo 0;
|
||||
} else {
|
||||
echo 2*($network['RSSI'] + 100);
|
||||
}
|
||||
echo "%)";
|
||||
} else {
|
||||
echo " not found ";
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php if (array_key_exists('priority', $network)) { ?>
|
||||
@ -58,35 +63,35 @@
|
||||
<?php } ?>
|
||||
<input type="hidden" name="protocol<?php echo $index ?>" value="<?php echo htmlspecialchars($network['protocol'], ENT_QUOTES); ?>" />
|
||||
|
||||
<div class="info-item-wifi"><?php echo _("Security"); ?></div>
|
||||
<div class="info-item-wifi"><?php echo _("Security"); ?></div>
|
||||
<div><?php echo $network['protocol'] ?></div>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="info-item-wifi"><?php echo _("Passphrase"); ?></div>
|
||||
<div class="form-group">
|
||||
<div class="info-item-wifi"><?php echo _("Passphrase"); ?></div>
|
||||
<div class="input-group">
|
||||
<?php if ($network['protocol'] === 'Open') { ?>
|
||||
<input type="password" disabled class="form-control" aria-describedby="passphrase" name="passphrase<?php echo $index ?>" value="" />
|
||||
<?php } else { ?>
|
||||
<input type="password" class="form-control js-validate-psk" aria-describedby="passphrase" name="passphrase<?php echo $index ?>" value="<?php echo $network['passphrase'] ?>" data-target="#update<?php echo $index ?>" data-colors="#ffd0d0,#d0ffd0">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-outline-secondary js-toggle-password" type="button" data-target="[name=passphrase<?php echo $index ?>]" data-toggle-with="<?php echo _("Hide") ?>">Show</button>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php if ($network['protocol'] === 'Open') { ?>
|
||||
<input type="password" disabled class="form-control" aria-describedby="passphrase" name="passphrase<?php echo $index ?>" value="" />
|
||||
<?php } else { ?>
|
||||
<input type="password" class="form-control js-validate-psk" aria-describedby="passphrase" name="passphrase<?php echo $index ?>" value="<?php echo $network['passphrase'] ?>" data-target="#update<?php echo $index ?>" data-colors="#ffd0d0,#d0ffd0">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-outline-secondary js-toggle-password" type="button" data-target="[name=passphrase<?php echo $index ?>]" data-toggle-with="<?php echo _("Hide") ?>">Show</button>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="btn-group btn-block ">
|
||||
<?php if ($network['configured']) { ?>
|
||||
<input type="submit" class="col-xs-4 col-md-4 btn btn-warning" value="<?php echo _("Update"); ?>" id="update<?php echo $index ?>" name="update<?php echo $index ?>"<?php echo ($network['protocol'] === 'Open' ? ' disabled' : '')?> />
|
||||
<button type="submit" class="col-xs-4 col-md-4 btn btn-info" value="<?php echo $index?>" name="connect"><?php echo _("Connect"); ?></button>
|
||||
<?php } else { ?>
|
||||
<input type="submit" class="col-xs-4 col-md-4 btn btn-info" value="<?php echo _("Add"); ?>" id="update<?php echo $index ?>" name="update<?php echo $index ?>" <?php echo ($network['protocol'] === 'Open' ? '' : ' disabled')?> />
|
||||
<?php } ?>
|
||||
<input type="submit" class="col-xs-4 col-md-4 btn btn-danger" value="<?php echo _("Delete"); ?>" name="delete<?php echo $index ?>"<?php echo ($network['configured'] ? '' : ' disabled')?> />
|
||||
</div><!-- /.btn-group -->
|
||||
<div class="btn-group btn-block ">
|
||||
<?php if ($network['configured']) { ?>
|
||||
<input type="submit" class="col-xs-4 col-md-4 btn btn-warning" value="<?php echo _("Update"); ?>" id="update<?php echo $index ?>" name="update<?php echo $index ?>"<?php echo ($network['protocol'] === 'Open' ? ' disabled' : '')?> />
|
||||
<button type="submit" class="col-xs-4 col-md-4 btn btn-info" value="<?php echo $index?>" name="connect"><?php echo _("Connect"); ?></button>
|
||||
<?php } else { ?>
|
||||
<input type="submit" class="col-xs-4 col-md-4 btn btn-info" value="<?php echo _("Add"); ?>" id="update<?php echo $index ?>" name="update<?php echo $index ?>" <?php echo ($network['protocol'] === 'Open' ? '' : ' disabled')?> />
|
||||
<?php } ?>
|
||||
<input type="submit" class="col-xs-4 col-md-4 btn btn-danger" value="<?php echo _("Delete"); ?>" name="delete<?php echo $index ?>"<?php echo ($network['configured'] ? '' : ' disabled')?> />
|
||||
</div><!-- /.btn-group -->
|
||||
</div><!-- /.card-body -->
|
||||
</div><!-- /.card -->
|
||||
</div><!-- /.col-sm -->
|
||||
<?php $index += 1; ?>
|
||||
<?php endforeach ?>
|
||||
<?php $index += 1; ?>
|
||||
<?php endforeach ?>
|
||||
</div><!-- /.row -->
|
||||
|
Loading…
Reference in New Issue
Block a user