+ Responder ao Tópico



  1. #1

    Padrão Medidor de sinal em PHP via SNMP por: M4D3

    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.


    Clique na imagem para uma versão maior

Nome:	         snr_86.png
Visualizações:	196
Tamanho: 	4,0 KB
ID:      	16746
    MAC:00:XX:XX:XX:XX:XX SIGNAL:-86 SN: 14%


    Clique na imagem para uma versão maior

Nome:	         snr_76.png
Visualizações:	210
Tamanho: 	4,0 KB
ID:      	16750
    MAC:00:XX:XX:XX:XX:XX SIGNAL:-76 SN: 24%

    Clique na imagem para uma versão maior

Nome:	         snr_66.png
Visualizações:	185
Tamanho: 	3,9 KB
ID:      	16748
    MAC:00:XX:XX:XX:XX:XX SIGNAL:-66 SN: 34%


    Clique na imagem para uma versão maior

Nome:	         snr_46.png
Visualizações:	183
Tamanho: 	3,7 KB
ID:      	16747
    MAC:00:XX:XX:XX:XX:XX SIGNAL:-46 SN: 54%


    Có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 "%"?>
    Abraço a todos

  2. #2

    Padrão Re: Medidor de sinal em PHP via SNMP por: M4D3

    Parabéns pela seu contribuição, muito bom.

  3. #3

    Padrão Re: Medidor de sinal em PHP via SNMP por: M4D3

    parabens luciano, mostre que nosso mato grosso tem pessoas qualificadas. rsrs

  4. #4

    Padrão Re: Medidor de sinal em PHP via SNMP por: M4D3

    Muito bom Luciano!!!!