Medidor de sinal em PHP via SNMP por: M4D3

 

Estou publicando um medidor de sinal que pode ser muito útil pra quem programa em PHP e deseja este recurso em seu sistema, é 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.

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.

 [PHP]
<?php
#=========== MEDIDOR DE SINAL VIA SNMP PARA MIKROTIK =========#
##-----------------==== COMPILADO POR: ====------------------##
##----------- LUCIANO RAMPANELLI - M4D3@HOTMAIL.COM ----------##
#---------------------- www.nimoc.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 . "%"; ?>
[/PHP]

================================================

Seria bem interessante se ao acessar o cadastro do cliente o MK-AUTH pudesse mostrar o sinal em forma de gráfico em tempo real, com este script rodando é possível, atualização a cada 1s por snmp, show de bola.



Que tal Pedro ?

Grande abraço

Luciano Rampanelli - M4D3

Para adicionar comentários, você deve ser membro de MK-AUTH.

Join MK-AUTH

Votos 0
Enviar-me um email quando as pessoas responderem –

Respostas

  • AC

  • Olá,

    esse projeto foi abandonado? seria muito útil ainda mais se for possível ver o nível do CCQ.

    Obrigado

  • Bom dia, Pedro.

    Onde vejo esses graficos em rrdtools?

    obrigado.


    Pedro Filho disse:

    incluir, mais eu coloquei para o grafico ser em rrdtools para não precisar dos graficos do google, mais parece que nem todos tem snmp funcionando...

    m4d3 disse:


    Publiquei esta dica pensando que um dia fosse incorporado ao MK-AUTH pra facilitar nossa vida, continuo acreditando nisso.

  • incluir, mais eu coloquei para o grafico ser em rrdtools para não precisar dos graficos do google, mais parece que nem todos tem snmp funcionando...

    m4d3 disse:


    Publiquei esta dica pensando que um dia fosse incorporado ao MK-AUTH pra facilitar nossa vida, continuo acreditando nisso.

  • Luciano vc que é um cara Fodastico. 

    Tem algum desse funcione com Ubiquit? rocket, bullet

  • Também Apoio m4d3


  • Publiquei esta dica pensando que um dia fosse incorporado ao MK-AUTH pra facilitar nossa vida, continuo acreditando nisso.

  • muito interessante.

  • acompanhando...

  • show de bola a ideia, seria otimo isso funcionando para quem usa bulet ou rocket para mandar sinal

This reply was deleted.