A BeagleBone Black é, sem dúvidas, uma das SBC (Single-Board Computer) mais populares existentes. Dentre suas principais características, estão o tamanho físico reduzido, SoC com recursos poderosos e conectividade à Internet (via cabo / Ethernet). Desta forma, esta SBC pode (e deve) ser utilizada em aplicações da Internet das Coisas, e este post sobre web monitor com BeagleBone Black vai ajudar nessa tarefa.
De nada adianta um projeto sobre Internet das Coisas se a conectividade à internet é ruim / intermitente demais. Considerando isso, este post irá mostrar como utilizar a BeagleBone Black para monitorar o downtime (neste caso, tempo em que não há conectividade com Internet/ “que se fica sem Internet”). Em posse destes dados, pode-se avaliar a qualidade de conexão à Internet, algo primordial para a implantação de projetos IoT.
Material necessário
Para reproduzir o projeto deste web monitor, você precisará apenas de uma BeagleBone Black e um cabo Ethernet (para conectar a placa à rede). Certifique-se que, no ponto de rede a ser utilizado pela BeagleBone Black, há acesso à Internet.
Método de medição do web monitor
Para contabilizar o downtime, primeiramente, é necessário ter em mãos um endereço de Internet confiável (leia-se: que há pouquíssimas chances de cair). Um bom exemplo para isso é o Google.
Em posse do endereço de Internet confiável, o método utilizado para detectar e contabilizar o downtime é o seguinte:
- A cada três segundos é feito um ping ao site confiável escolhido. O comando de ping utilizado é o seguinte:
ping -c 1 ENDERECO_DO_SITE_CONFIAVEL
Onde “-c 1” indica que é feita uma única tentativa de ping.
- Se a resposta for bem sucedida (houver resposta ao ping), espera-se até o próximo momento para fazer o ping novamente
- Caso não houver resposta ao ping, é inicializada a contabilização de downtime, sendo esta finalizada assim que a conectividade à Internet for reestabelecida
Projeto web monitor com Beaglebone Black
O projeto consiste em, baseado no método descrito anteriormente, contabilizar o downtime. Cada downtime contabilizado é salvo em um arquivo texto (.txt), para posterior checagem.
O arquivo .txt chama-se “RelatorioDowntime.txt”, e este contém, para cada downtime contabilizado:
- A data e hora de início do downtime
- Tempo total de falta de conectividade à Internet (downtime)
- A data e hora de registro do downtime
Código-fonte
O código-fonte do projeto pode ser visto a seguir.
Para colocá-lo na BeagleBone Black, digite o comando:
nano MonitoraDowntime.py
Uma vez aberto o editor nano, digite ou cole o código-fonte do projeto
Aperte Ctrl + X, depois diga sim às perguntas do editor nano (ele perguntará se deseja salvar o arquivo e se deseja manter o mesmo nome)
Vamos ao código-fonte:
import os import time from datetime import datetime #Variaveis globais DNSParaPingar = "www.google.com" #DNS confiavel (algum que voce saiba que nao caia com facilidade) ArqRelatorio = "RelatorioDowntime.txt" TempoReestabelecimentoConexao = 0 TempoInicioDowntime = 0 EstavaSemConectividade = 'N' #Funcao: escreve o cabecalho na tela #Parametros: nenhum #Retorno: nenhum def EscreveCabecalhoNaTela(): os.system("clear") print "------------------------------------" print " Teste - Downtime de Internet " print "------------------------------------nnn" #Funcao: escreve status da conectividade na tela #Parametros: status (0: sem Internet; 1: com Internet) #Retorno: nenhum def EscreveStatusConectividadeNaTela(StatusConectividade): if (StatusConectividade == 0): print "nnn-> Conectividade a Internet: ok!n" else: print "nnn-> Conectividade a Internet: falhoun" #Funcao: contabiliza downtime #Parametros: status da conectividade a Internet #Retorno: nenhum def ContabilizaDowntime(StatusConectividade): global EstavaSemConectividade global TempoReestabelecimentoConexao global TempoInicioDowntime if (StatusConectividade == 0): TempoReestabelecimentoConexao = time.time() if (EstavaSemConectividade == 'S'): ValorDowntime = TempoReestabelecimentoConexao - TempoInicioDowntime print "-> Conexao foi reestabelecida. Downtime: "+str(ValorDowntime)+" segundos" file = open(ArqRelatorio,"a") file.write("Downtime: "+str(ValorDowntime)+" segundosn") file.write("Data/hora de registro: "+str(datetime.now())+"n") file.write("-------------n") file.close() EstavaSemConectividade = 'N' else: TempoInicioDowntime=time.time() print "-> Contabilizando downtime..." file = open(ArqRelatorio,"a") file.write("---Registro de downtime---n") file.write("Data/hora de inicio: "+str(datetime.now())+"n") file.close() EstavaSemConectividade = 'S' #programa principal ContadorVerificacoes = 0 while True: try: ContadorVerificacoes = ContadorVerificacoes + 1 EscreveCabecalhoNaTela() print "["+str(ContadorVerificacoes)+"] Verificando conectividade a Internet...n" #avalia conectividade a Internet RespostaPing = os.system("ping -c 1 "+DNSParaPingar) EscreveStatusConectividadeNaTela(RespostaPing) #contabiliza downtime ContabilizaDowntime(RespostaPing) #aguarda 3 segundos ate proxima avaliacao time.sleep(3) except KeyboardInterrupt: print "Ctrl+C pressionado. Aplicacao sendo encerrada" exit(1)
Colocando o projeto para rodar
Para colocar o projeto para rodar, digite o seguinte comando:
python MonitoraDowntime.py
Uma vez em execução, basta “deixar” a BeagleBone Black fazer o trabalho. Quando desejar parar o programa, basta pressionar as teclas Ctrl+C. O relatório de downtime pode ser visto através do comando:
cat RelatorioDowntime.txt
Gostou? Deixe seu comentário logo abaixo.
Valeria a pena ou seria viável fazer um projeto como esse só com um NodeMcu?
Alexandre, bom dia.
Olha, com exceção a parte do relatório em arquivo TXT, seria possível. Nunca fiz algo do gênero no NodeMCU, mas sei que é possível sem problemas.
Atenciosamente,
Pedro Bertoleti
Bom dia, agora te pergunto uma coisa, porque utilizar a BEAGLEBONE BLACK e não um RASPBERRY PI?
Bom dia Jean.
Ótima pergunta. Considerando do ponto de vista de software somente, não há diferenças em usar um ou outro (pois considerando que as duas SBCs citadas usam distribuições Debian/baseadas no Debian e também que o projeto não exige nada de especial).
Porém, a BBB leva algumas vantagens em relação à Raspberry Pi: tem um SoC com ADC, possui (na minha opinião) um melhor gerenciamento de energia / consumo e o mais importante: tem um roadmap bom / garantia de fabricação pela Texas por X anos. Isso significa que, você como fabricante de um produto que usa uma SBC, pode contar com a BBB sendo fabricada para usar no seu produto sem medo de ela parar de ser fabricada de uma hora pra outra. Com a Raspberry, ocorre o oposto (eles não garantem nada quanto a roadmap).
Em suma:
– Quer algo mais profissional? BBB
– Quer algo menos profissional e mais barato? Raspberry Pi
Sacou?
Bah até me espantei pela velocidade da resposta hahaha, muito obrigado! verei mais de perto a BBB! valeu e parabéns pelo artigo!