Galera venho trazer uma solução que a dias me atormentava.
Problema: tenho uma torre na zona rural com 4 bullets 2 conectado a painéis aquário, tenho poucos clientes conectado nesses bullets, o problema é que eu não conseguia saber quem eram os usuarios que estavam conectados neste bullet (ou pelo menos era bem complicado saber quem estava conectado). Por isso resolvi automatizar esta tarefa, coisa um tanto quanto simples de se falar, mas não muito de se fazer.
A solução encontrada foi capturar a pagina "stalist.html", que retorna os MAC Address conectados neste bullet, e depois tratar estes mac's e cruza-los com meu banco de dados de usuários.
Bom partindo deste ponto criei uma função em php para fazer este processo, foi um tanto quanto dolorido fazer isso (por conta dos socos na mesa), mas consegui chegar a uma solução para esta tarefa.
Segue abaixo o arquivo de função
conectado.php
Código PHP:
<?php
#################################################
# Classe para retornar #
# o MAC Address de #
# Equipamentos Ubiquiti #
# para cruzamento de dados #
# com banco de dados #
# #
# Desenvolvido por #
# Fernando Piovezan #
# Licença GPL #
#################################################
#################################################
# Agradecimentos #
#duzao7667 -> forum.imasters.com.br #
#pisicohtico -> forum.clubedohardware.com.br #
#Manual PHP -> php.net #
#Avaliador de ER -> arquivodecodigos.net #
#André D. Molin -> forum.imasters.com.br #
#Everton da Rosa -> phpbrasil.com #
# #
#################################################
class retornaInfo {
//variavel passada para a classe
public $site;
//função para retornar o mac address
function retornaMac() {
$url = file_get_contents($this->site); //estrai o site da url passada
$pattern1 = "/([0-9a-fA-F]{2}:{1}){5}[0-9a-fA-F]{2}/"; //cria o primeiro pattern para expressao regular
$pattern2 = "/<[^>]*[^\/]>/i"; //cria o segundo pattern para expressao regular
$html = preg_split($pattern2, $url, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
for($i=0;$i<count($html);$i++) {
preg_match($pattern1, $html[$i], $resultado);
if (!empty($resultado)) {
$mac[] = $html[$i];
}
}
return $mac; //retorna o endereço mac
}
//função para retornar o nivel de sinal
function retornaSinal () {
$url = file_get_contents($this->site); //estrai o site da url passada
$pattern3 = "/<\/a[^>]*><\/td[^>]*><td[^>]*>(.*?)<\/td>/"; //cria o terceiro pattern para expressao regular
preg_match_all($pattern3, $url, $sinal); //retira o sinal por meio de expressao regular
return $sinal[1]; //retorna o nivel do sinal
}
}
?>
O que isto faz é pegar pagina "stalist.html" e trata-la para retornar o MAC Addres e o sinal em "-Dbm" e retornar um array com estas informações. Feito isso podemos utilizar estas informações do jeito que quiser e puder (as opções são muitas).
para usar esta função é simples, como podem ver esta Orientado a Objeto então temos que trata-la com classe.
Código PHP:
$site = "http://" .$nomeUsuario. ":" .$senhaUsuario. "@" .$ip. "/stalist.cgi";
include_once "conectado.php";
$obj = new retornaInfo;
$obj->site = $site;
$mac = $obj->retornaMac();
$sinal = $obj->retornaSinal();
a variável $site deve ter estes critérios pois precisa se autenticar para poder retornar a pagina
- explicação das variaveis
$nomeUsuario -> nome de usuario de conexão os Bullet
$senhaUsuario -> senha do usuario de conexao ao Bullet
$ip -> Ip do bullet para se conectar
Uso estas variáveis, pois posso utilizar quantos radio quiser com esta mesma função, hoje uso com 4 bullet's mas pretendo aumentar para uns 8 - 12.
abaixo um exemplo do uso desta função em página em ambiente de execução.
Bom espero que ajude a comunidade ai que utiliza Ubiquiti
Obs. Foi testado em Bullet 2, Nano 2, Nano 5.
Obs2. Não sou nenhuma fera em php, só sou muito, muito persistente.
Qualquer duvida postem ai que na medida do possível eu ajudo.