Fiz essa lib baseada no programa ubidiscover em C.
Lib: pubidisc.so ( binário (ubuntu 14.04 32bits) e fontes para compilar em outra distro);
Link: http://www.mediafire.com/file/3iusfimiyu30y48/ubdisc.7z (http://www.mediafire.com/file/3iusfimiyu30y48/ubdisc.7z)
Baixe e descompacte. Na pasta tem um programa pronto: pubidiscover.prisma basta instalar e usar.
Para compilar (Linux) copie a pasta ubidisc para pasta Libs dentro de source_prisma. Execute o arquivo compila.sh no terminal.
Apenas para Linux.
Com esta lib não é necessário fazer procedimentos de baixo nível, ela automaticamente faz a conexão e obtém os dados. Porta é "10001" padrão da Ubiquiti. Para mudar a porta passe explicitamente o parâmetro para a função ub.inicialize('10002'); //ou deixe vazio para o padrão.
Segue um exemplo:
//teste pubidisc
local ub = inclua'pubidisc';
funcao tem_erro(ret, err)
se nao ret entao
imprima(err,'\n\nPressione ENTER para sair...');
leia();
sis.saia(1);
fim
fim
local ub_data, err = ub.inicialize();
tem_erro(ub_data,err);
local ret, err = ub.procure(ub_data,"192.168.1.21");
tem_erro(ret,err);
local ret, err = ub.perm_broadcast(ub_data);
tem_erro(ret,err);
local ret, err = ub.envie(ub_data);
tem_erro(ret,err);
local tab;
local ret = ub.colete_resposta(ub_data);
se nao ret entao tem_erro(ret,"erro ao coletar resposta"); fim
tab = ub.obt_msg(); //lê o dado recebido para uma tabela Prisma
se tipo(tab)=='tabela' entao //imprimindo todos os campos e valores da tabela.
para i,v em pares(tab) inicio
imprima(i,':',v);
fim
senao
tem_erro(falso,"Falha ao obter mensagem");
fim
//pode usar a tabela como quiser, veja:
poe(string.nconcat('=',50));
se tab.nome_produto entao imprima("\nNome do Produto:\t", tab.nome_produto ) fim;
se tab.ssid_wireless entao imprima("\nNome da rede wireless:\t", tab.ssid_wireless ) fim;
se tab.hwaddr entao imprima("\nMAC do equipamento:\t", tab.hwaddr ) fim;
se ub_data entao
ub.finalize(ub_data);
fim
Valeu, até mais.
Lib Atualizada para versão 0.3 (corrigi alguns erros das funções em C e adicionei novas);
Baixem no mesmo link: http://www.mediafire.com/file/3iusfimiyu30y48/ubdisc.7z (http://www.mediafire.com/file/3iusfimiyu30y48/ubdisc.7z)
Novidades:
função ub.processe('host');
Essa função resume três funções ( procure('host'); perm_broadcast(); e envie() ) ficando bastante simples utilizar a lib agora.
Adicionei também o retorno do modo rede sem fio em string:
const char *UBNT_WIRELESS_MODES[] ={
"Auto", // \x00
"adhoc", // \x01
"Estação", // \x02
"AP", // \x03
"Repetidor",// \x04
"Secundário",// \x05
"Monitor"// \x06
};
Os nomes dos campos da tabela de dados foram alterados (sugestão do Rafael):
NomeDoAnfitriao
Endereco
EnderecoDaMidia
NomeDaRede
ModoSemFio
VersaoDoPrograma
SisId
TempoLigado
TipoDoProduto
EnderecoIpv4
Segue um exemplo simples:
//teste pubidisc
local ub = inclua'pubidisc';
funcao tem_erro(ret, err)
se nao ret entao
imprima(err,'\n\nPressione ENTER para sair...');
leia();
sis.saia(1);
fim
fim
local ub_data, err = ub.inicialize();
tem_erro(ub_data,err);
local ret, err = ub.processe(ub_data,"255.255.255.255");
tem_erro(ret,err);
local tab;
local ipv4_teste;
enquanto 1 inicio
local ret,msg = ub.colete_resposta(ub_data);
se nao ret entao quebre fim;
tab = ub.obt_msg();
se tipo(tab)=='tabela' entao
poe'\n-------------------------------------------\n'
para i,v em pares(tab) inicio
imprima(i,':',v);
fim
poe'\n-------------------------------------------\n'
senao
tem_erro(falso,"Falha ao obter mensagem");
fim
fim
se ub_data entao
ub.finalize(ub_data);
fim