Olá pessoal
Estou publicando um medidor de sinal que pode ser muito útil pra quem programa em PHP e deseja este recurso em seus sistemas, é necessário apenas repassar o mac do cliente e o ip da torre onde será feita a consulta, o gráfico é gerado apartir do google graphs (um tanto lento) então a internet precisa estar disponível no servidor linux onde estiver rodando a aplicação.
Caso alguém possua habilidades de gerar um gráfico apartir da aplicação seria interessante não ter dependência, um refresh automático a cada 5 segundos seria também bacana, fica a cargo de cada um adaptar a sua necessidade.
Caso façam melhorias no código postem aqui sempre que possível.
MAC:00:XX:XX:XX:XX:XX SIGNAL:-86 SN: 14%
MAC:00:XX:XX:XX:XX:XX SIGNAL:-76 SN: 24%
MAC:00:XX:XX:XX:XX:XX SIGNAL:-66 SN: 34%
MAC:00:XX:XX:XX:XX:XX SIGNAL:-46 SN: 54%
Abraço a todosCódigo PHP:
<?php
#============ MEDIDOR DE SINAL VIA SNMP PARA MIKROTIK ==============#
##-------------------==== COMPILADO POR: ====----------------------##
##------------- LUCIANO RAMPANELLI - [email protected] -------------##
#------------------------ www.pcram.com.br -------------------------#
#===================================================================#
#
# No linux instale o snmp, o apache e o suporte a php
# No Mikrotik ative snmp read para comunity public
#
#snmpwalk -v 1 IP.DO.MK.TORRE .1.3.6.1.4.1.14988.1.1.1.2.1.3.0 -c public > sinais
#snmpwalk -v 1 IP.DO.MK.TORRE .1.3.6.1.4.1.14988.1.1.1.2.1.1.0 -c public > macs
$oidwireless = '.1.3.6.1.4.1.14988';
$oidsinal = '.1.1.1.2.1.3.0';
$oidmac = '.1.1.1.2.1.1.0';
$comunidade = 'public';
$ipmk = '10.1.10.252';
$sinal = '-99';
$hexmac = '00:0E:2E:FB:33:09'; //AQUI ENTRA O MAC DO CLIENTE VIA PHP
$macid0 = exec('echo '.$hexmac.' |cut -d ":" -f1');
$macid1 = exec('echo '.$hexmac.' |cut -d ":" -f2');
$macid2 = exec('echo '.$hexmac.' |cut -d ":" -f3');
$macid3 = exec('echo '.$hexmac.' |cut -d ":" -f4');
$macid4 = exec('echo '.$hexmac.' |cut -d ":" -f5');
$macid5 = exec('echo '.$hexmac.' |cut -d ":" -f6');
$oidcli = hexdec($macid0).".".hexdec($macid1).".".hexdec($macid2).".".hexdec($macid3).".".hexdec($macid4).".".hexdec($macid5);
$oidcliente = $oidwireless.$oidsinal.$oidcli;
$sinal = exec('snmpwalk -v 1 ' . $ipmk . " " . $oidcliente .' -c '. $comunidade .' | awk \'{ print $4 }\'');
#$sinal = '-79'; //teste de cor das barras
$snr = round((100+$sinal)*1,1);
$cor = 'FF0000';
if ( $snr < 100 ) {
$cor = '00FF00';
}
if ( $snr < 41 ) {
$cor = '00FF00';
}
if ( $snr < 36 ) {
$cor = '32CD32';
}
if ( $snr < 31 ) {
$cor = 'FFD700';
}
if ( $snr < 26 ) {
$cor = 'FF8C00';
}
if ( $snr < 21 ) {
$cor = 'FF0000';
}
?>
<html>
<head>
<title> Medidor de Sinal </title>
<script language="javascript" src="http://www.google.com/jsapi"></script>
</head>
<body>
<div id="chart"></div>
<script type="text/javascript">
var queryString = '';
var dataUrl = '';
function onLoadCallback() {
if (dataUrl.length > 0) {
var query = new google.visualization.Query(dataUrl);
query.setQuery(queryString);
query.send(handleQueryResponse);
} else {
var dataTable = new google.visualization.DataTable();
dataTable.addRows(1);
dataTable.addColumn('number');
dataTable.setValue(0, 0, <? echo $snr ?>);
draw(dataTable);
}
}
function draw(dataTable) {
var vis = new google.visualization.ImageChart(document.getElementById('chart'));
var options = {
chf: 'c,lg,0,FF0100,0,22FF00,50',
chxl: '',
chxp: '',
chxr: '0,-100,0',
chxs: '',
chxtc: '',
chxt: 'x',
chbh: '14,2,1',
chs: '260x50',
cht: 'bhs',
chco: '<? echo $cor ?>',
chds: '0,100',
chd: 't:<? $snr ?>',
chg: '0,5,1,1',
chma: '15,15',
chtt: 'QUALIDADE DO SINAL',
chts: '676767,10.4'
};
vis.draw(dataTable, options);
}
function handleQueryResponse(response) {
if (response.isError()) {
alert('Error in query: ' + response.getMessage() + ' ' + response.getDetailedMessage());
return;
}
draw(response.getDataTable());
}
google.load("visualization", "1", {packages:["imagechart"]});
google.setOnLoadCallback(onLoadCallback);
</script>
</body>
</html>
<font size="1" face="Verdana, Arial, Helvetica, sans-serif" >
<? echo " MAC:" . $hexmac . " SIGNAL:" . $sinal . " SN: " . $snr . "%"; ?>