mirror of
https://github.com/RaspAP/raspap-webgui.git
synced 2024-11-22 15:40:22 +00:00
Merge branch 'master' into wificlient-ap
This commit is contained in:
commit
9abf79b23c
6 changed files with 114 additions and 19 deletions
17
README.md
17
README.md
|
@ -24,16 +24,19 @@ We'd be curious to hear about how you use this with your own RPi-powered project
|
|||
- [License](#license)
|
||||
|
||||
## Prerequisites
|
||||
You need to install some extra software in order for the Raspberry Pi to act as a WiFi router and access point. If all you're interested in is configuring your RPi as a client on an existing WiFi network, you can skip this step.
|
||||
Start with a clean install of the [latest release of Raspbian](https://www.raspberrypi.org/downloads/raspbian/) (currently Stretch). Raspbian Stretch Lite is recommended.
|
||||
|
||||
There are many guides available to help you select a WiFi adapter, install a compatible driver, configure HostAPD and so on. The details are outside the scope of this project, although I've had consistently good results with the [**Edimax Wireless 802.11b/g/n nano USB adapter**](http://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/global/wireless_adapters_n150/ew-7811un) – it's small, cheap and easy to work with.
|
||||
1. Update Raspbian, including the kernel and firmware, followed by a reboot:
|
||||
```
|
||||
sudo apt-get update
|
||||
sudo apt-get dist-upgrade
|
||||
sudo reboot
|
||||
```
|
||||
2. Set the WiFi country in raspi-config's **Localisation Options**: `sudo raspi-config`
|
||||
|
||||
To configure your RPi as a WiFi router, either of these resources will start you on the right track:
|
||||
* [**How-To: Setting up a Raspberry Pi as an access point in a standalone network (Tested with Raspbian Stretch)**](https://github.com/SurferTim/documentation/blob/6bc583965254fa292a470990c40b145f553f6b34/configuration/wireless/access-point.md)
|
||||
* [**How-To: Use The Raspberry Pi As A Wireless Access Point/Router Part 1**](http://sirlagz.net/2012/08/09/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-1/)
|
||||
* [**How-To: Turn a Raspberry Pi into a WiFi router**](http://raspberrypihq.com/how-to-turn-a-raspberry-pi-into-a-wifi-router/) (uses isc-dhcp-server instead of dnsmasq)
|
||||
3. If you have an older Raspberry Pi without an onboard WiFi chipset, the [**Edimax Wireless 802.11b/g/n nano USB adapter**](https://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/global/wireless_adapters_n150/ew-7811un) is an excellent option – it's small, cheap and has good driver support.
|
||||
|
||||
After you complete the intial setup, you'll be able to administer these services using the web UI.
|
||||
With the prerequisites done, you can proceed with either the Quick installer or Manual installation steps below.
|
||||
|
||||
## Quick installer
|
||||
Install RaspAP from your RaspberryPi's shell prompt:
|
||||
|
|
|
@ -26,6 +26,8 @@ if (strlen($interface) > IFNAMSIZ) {
|
|||
exit('Invalid interface name.');
|
||||
}
|
||||
|
||||
require_once './get_bandwidth_hourly.php';
|
||||
|
||||
exec(sprintf('vnstat -i %s --json ', escapeshellarg($interface)), $jsonstdoutvnstat,
|
||||
$exitcodedaily);
|
||||
if ($exitcodedaily !== 0) {
|
||||
|
|
63
ajax/bandwidth/get_bandwidth_hourly.php
Normal file
63
ajax/bandwidth/get_bandwidth_hourly.php
Normal file
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
if (filter_input(INPUT_GET, 'tu') == 'h') {
|
||||
|
||||
header('X-Content-Type-Options: nosniff');
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$data_template = array(
|
||||
0 => array('date' => '00:00', 'rx' => 0, 'tx' => 0),
|
||||
1 => array('date' => '01:00', 'rx' => 0, 'tx' => 0),
|
||||
2 => array('date' => '02:00', 'rx' => 0, 'tx' => 0),
|
||||
3 => array('date' => '03:00', 'rx' => 0, 'tx' => 0),
|
||||
4 => array('date' => '04:00', 'rx' => 0, 'tx' => 0),
|
||||
5 => array('date' => '05:00', 'rx' => 0, 'tx' => 0),
|
||||
6 => array('date' => '06:00', 'rx' => 0, 'tx' => 0),
|
||||
7 => array('date' => '07:00', 'rx' => 0, 'tx' => 0),
|
||||
8 => array('date' => '08:00', 'rx' => 0, 'tx' => 0),
|
||||
9 => array('date' => '09:00', 'rx' => 0, 'tx' => 0),
|
||||
10 => array('date' => '10:00', 'rx' => 0, 'tx' => 0),
|
||||
11 => array('date' => '11:00', 'rx' => 0, 'tx' => 0),
|
||||
12 => array('date' => '12:00', 'rx' => 0, 'tx' => 0),
|
||||
13 => array('date' => '13:00', 'rx' => 0, 'tx' => 0),
|
||||
14 => array('date' => '14:00', 'rx' => 0, 'tx' => 0),
|
||||
15 => array('date' => '15:00', 'rx' => 0, 'tx' => 0),
|
||||
16 => array('date' => '16:00', 'rx' => 0, 'tx' => 0),
|
||||
17 => array('date' => '17:00', 'rx' => 0, 'tx' => 0),
|
||||
18 => array('date' => '18:00', 'rx' => 0, 'tx' => 0),
|
||||
19 => array('date' => '19:00', 'rx' => 0, 'tx' => 0),
|
||||
20 => array('date' => '20:00', 'rx' => 0, 'tx' => 0),
|
||||
21 => array('date' => '21:00', 'rx' => 0, 'tx' => 0),
|
||||
22 => array('date' => '22:00', 'rx' => 0, 'tx' => 0),
|
||||
23 => array('date' => '23:00', 'rx' => 0, 'tx' => 0)
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
exec(sprintf('vnstat -i %s --json h', escapeshellarg($interface)), $jsonstdoutvnstat, $exitcodedaily);
|
||||
if ($exitcodedaily !== 0) {
|
||||
exit('vnstat error');
|
||||
}
|
||||
|
||||
$jsonobj = json_decode($jsonstdoutvnstat[0], true)['interfaces'][0];
|
||||
$jsonData = $jsonobj['traffic']['hours'];
|
||||
for ($i = count($jsonData) - 1; $i >= 0; --$i) {
|
||||
$data_template[$jsonData[$i]['id']]['rx'] = round($jsonData[$i]['rx'] / 1024, 0);
|
||||
$data_template[$jsonData[$i]['id']]['tx'] = round($jsonData[$i]['tx'] / 1024, 0);
|
||||
}
|
||||
|
||||
$data = array();
|
||||
$hour = $jsonobj['updated']['time']['hour'];
|
||||
foreach ($data_template as $key => $value) {
|
||||
if ($key > $hour) {
|
||||
array_push($data, $value);
|
||||
}
|
||||
}
|
||||
foreach ($data_template as $key => $value) {
|
||||
if ($key <= $hour) {
|
||||
array_push($data, $value);
|
||||
}
|
||||
}
|
||||
echo json_encode($data);
|
||||
exit(0);
|
||||
}
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
function DisplayDataUsage(&$extraFooterScripts)
|
||||
{
|
||||
exec("ip -o link show | awk -F ': ' '{print $2}' | grep -v lo ", $interfacesWlo);
|
||||
?>
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
|
@ -16,27 +17,48 @@ function DisplayDataUsage(&$extraFooterScripts)
|
|||
<div class="panel panel-default">
|
||||
<div class="panel-body">
|
||||
<ul id="tabbarBandwidth" class="nav nav-tabs" role="tablist">
|
||||
<li role="presentation" class="active"><a href="#daily" aria-controls="daily" role="tab" data-toggle="tab"><?php echo _("Daily"); ?></a></li>
|
||||
<li role="presentation" class="active"><a href="#hourly" aria-controls="hourly" role="tab" data-toggle="tab"><?php echo _("Hourly"); ?></a></li>
|
||||
<li role="presentation" class=""><a href="#daily" aria-controls="daily" role="tab" data-toggle="tab"><?php echo _("Daily"); ?></a></li>
|
||||
<li role="presentation" class=""><a href="#monthly" aria-controls="monthly" role="tab" data-toggle="tab"><?php echo _("Monthly"); ?></a></li>
|
||||
</ul>
|
||||
<div id="tabsBandwidth" class="tabcontenttraffic tab-content">
|
||||
<div role="tabpanel" class="tab-pane active fade in" id="daily">
|
||||
<div role="tabpanel" class="tab-pane active fade in" id="hourly">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h4><?php echo _('Hourly traffic amount'); ?></h4>
|
||||
<label for="cbxInterfacehourly"><?php echo _('interface'); ?></label>
|
||||
<select id="cbxInterfacehourly" class="form-control" name="interfacehourly">
|
||||
<?php
|
||||
foreach ($interfacesWlo as $interface) {
|
||||
echo ' <option value="' , htmlentities($interface, ENT_QUOTES) , '">' ,
|
||||
htmlentities($interface, ENT_QUOTES) , '</option>' , PHP_EOL;
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<div class="hidden alert alert-info" id="divLoaderBandwidthhourly">
|
||||
<?php echo sprintf(_("Loading %s bandwidth chart"), _('hourly')); ?>
|
||||
</div>
|
||||
<div id="divChartBandwidthhourly"></div>
|
||||
<div id="divTableBandwidthhourly"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.tab-pane -->
|
||||
<div role="tabpanel" class="tab-pane fade" id="daily">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<h4><?php echo _('Daily traffic amount'); ?></h4>
|
||||
<label for="cbxInterfacedaily"><?php echo _('interface'); ?></label>
|
||||
<select id="cbxInterfacedaily" class="form-control" name="interfacedaily">
|
||||
<?php
|
||||
exec("ip -o link show | awk -F ': ' '{print $2}' | grep -v lo ", $interfacesWlo);
|
||||
foreach ($interfacesWlo as $interface) {
|
||||
echo ' <option value="' , htmlentities($interface, ENT_QUOTES) , '">' ,
|
||||
htmlentities($interface, ENT_QUOTES) , '</option>' , PHP_EOL;
|
||||
}
|
||||
|
||||
?>
|
||||
</select>
|
||||
<div class="hidden alert alert-info" id="divLoaderBandwidthdaily"><?php
|
||||
echo sprintf(_("Loading %s bandwidth chart"), _('daily')); ?></div>
|
||||
<div class="hidden alert alert-info" id="divLoaderBandwidthdaily">
|
||||
<?php echo sprintf(_("Loading %s bandwidth chart"), _('daily')); ?>
|
||||
</div>
|
||||
<div id="divChartBandwidthdaily"></div>
|
||||
<div id="divTableBandwidthdaily"></div>
|
||||
</div>
|
||||
|
@ -53,7 +75,6 @@ foreach ($interfacesWlo as $interface) {
|
|||
echo ' <option value="' , htmlentities($interface, ENT_QUOTES) , '">' ,
|
||||
htmlentities($interface, ENT_QUOTES) , '</option>' , PHP_EOL;
|
||||
}
|
||||
|
||||
?>
|
||||
</select>
|
||||
<div class="hidden alert alert-info" id="divLoaderBandwidthmonthly">
|
||||
|
|
|
@ -276,6 +276,10 @@ function patch_system_files() {
|
|||
else
|
||||
install_log "Sudoers file already patched"
|
||||
fi
|
||||
|
||||
# Unmask and enable hostapd.service
|
||||
sudo systemctl unmask hostapd.service
|
||||
sudo systemctl enable hostapd.service
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
element: placeholder,
|
||||
xkey: 'date',
|
||||
ykeys: ['rx', 'tx'],
|
||||
labels: [_t['send']+' '+datasizeunits.toUpperCase(),
|
||||
_t['receive']+' '+datasizeunits.toUpperCase()]
|
||||
labels: [_t['receive']+' '+datasizeunits.toUpperCase(),
|
||||
_t['send']+' '+datasizeunits.toUpperCase()]
|
||||
});
|
||||
|
||||
return barchart;
|
||||
|
@ -31,9 +31,11 @@
|
|||
*/
|
||||
function ShowBandwidthChartHandler(e) {
|
||||
// Remove all morrisjs charts
|
||||
$('#divChartBandwidthhourly').empty();
|
||||
$('#divChartBandwidthdaily').empty();
|
||||
$('#divChartBandwidthmonthly').empty();
|
||||
// Remove all datatables
|
||||
$('#divTableBandwidthhourly').empty();
|
||||
$('#divTableBandwidthdaily').empty();
|
||||
$('#divTableBandwidthmonthly').empty();
|
||||
// Construct ajax uri for getting the proper data.
|
||||
|
@ -66,8 +68,8 @@
|
|||
'order': [[ 0, 'ASC' ]],
|
||||
'columns': [
|
||||
{ 'data': 'date' },
|
||||
{ 'data': 'rx', "title": _t['send']+' '+datasizeunits.toUpperCase() },
|
||||
{ 'data': 'tx', "title": _t['receive']+' '+datasizeunits.toUpperCase() }]
|
||||
{ 'data': 'rx', "title": _t['receive']+' '+datasizeunits.toUpperCase() },
|
||||
{ 'data': 'tx', "title": _t['send']+' '+datasizeunits.toUpperCase() }]
|
||||
});
|
||||
}).fail(function(xhr, textStatus) {
|
||||
if (window.console) {
|
||||
|
@ -80,8 +82,8 @@
|
|||
|
||||
$(document).ready(function() {
|
||||
$('#tabbarBandwidth a[data-toggle="tab"]').on('shown.bs.tab', ShowBandwidthChartHandler);
|
||||
$('#cbxInterfacehourly').on('change', ShowBandwidthChartHandler);
|
||||
$('#cbxInterfacedaily').on('change', ShowBandwidthChartHandler);
|
||||
$('#cbxInterfaceweekly').on('change', ShowBandwidthChartHandler);
|
||||
$('#cbxInterfacemonthly').on('change', ShowBandwidthChartHandler);
|
||||
ShowBandwidthChartHandler();
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue