Intel Edison – Monitor de Downtime

O Intel Edison é um módulo incrível em se tratando de aplicações para Internet das Coisas. Com dimensões muito reduzidas (35.5 x 25 x 3.9 mm), bom poder computacional, compatibilidade com Linux e fantástica conectividade (Wi-Fi e BLE), caracteriza-se como uma excelente solução para sistemas de controle e monitoramento remoto, visão computacional, inteligência artificial e tudo mais que pode ser relacionado à Internet das Coisas.

Considerando este conjunto de características, neste artigo irei reproduzir / portar o projeto Monitorador de Downtime no Linux (de minha autoria, publicado neste site) para o Intel Edison. Em resumo, o projeto permite a detecção de Downtimes / indisponibilidade de Internet e, ao detectar, grava a ocorrência do Downtime em arquivo texto (DownTimeReport.txt), envia um Tweet para a operadora de Internet avisando o Downtime (com a hashtag #DownTimeDetectado, para facilitar localização dos Tweets) e, além disso, contabiliza o Downtime ocorrido no ThingSpeak. Desta forma, você tem como avaliar, de qualquer lugar do mundo, a quantas anda sua qualidade de disponibilidade de Internet.

No mais, este projeto difere-se do original nos seguintes pontos:

  • O total de down times será exibido em um display LCD com backlight RGB (comunicação I²C). Este display é o comercializado pela Groove.
  • O projeto é iniciado juntamente com o Intel Edison automaticamente, permanecendo rodando como um serviço do Linux. Ou seja, uma vez acertada a conexão com a Internet e seguido este artigo, bastará alimentar o Intel Edison e ele faz o resto para você!

 

Portanto, recomendo fortemente a leitura do artigo do projeto original antes da leitura deste artigo.

 

 

Motivação do projeto

 

A disponibilidade de Internet por parte das operadoras é garantida pelo artigo 46, resolução nº614/2013 da ANATEL (mais detalhes aqui). Exceto em caso de interrupção programada com aviso prévio (de, no mínimo, uma semana), todo o período de indisponibilidade de Internet maior que 30 minutos deve ser descontado da fatura mensal.

E isso faz todo o sentido, afinal estamos pagando por um serviço, logo nada mais justo esperar que este seja entregue corretamente.

Portanto, a motivação deste projeto é, além de monitorar as piores operadoras de Internet do Brasil, ter meios de fazer valer nossos direitos como consumidores!

Estratégia do projeto

 

A estratégia do projeto é simples: pingar um local confiável (na rede externa / Internet) e avaliar a resposta obtida. Ou seja:

  • Houve resposta ao ping: a conectividade à Internet está ok!
  • Sem resposta ao ping: pois é, a Internet se foi.

O segredo da coisa está no tempo entre os pings: para evitar ser bloqueado no servidor onde você está pingando por envio excessivos de pings /pacotes ICMP (acredite ou não, isso se o tempo for muito curto, isso é considerado um ataque DDoS, por mais pré-histórica que esta ideia seja). Portanto, como limite seguro, este projeto considera seguro um intervalo entre pings de 20 segundos. Por consequencia, o menor DownTime comtabilizável será 20 segundos.

Como alvo dos pings, deve ser escolhido o local mais confiável possível. No caso do projeto, escolhi o famoso Google, mais precisamente, o servidor DNS dele (IP 8.8.8.8). Motivo: eles devem receber tantas requisições / segundo lá que dificilmente irão bloquear algo nesta linha, levando o risco de bloqueio por número excessivos de pacotes ICMP a praticamente zero.

A partir do momento que pode-se comprovar o funcionamento ou não da Internet, é possível contabilizar o Downtime e fazer o que desejar com esta informação (neste caso, será enviada ao Twitter e ThingSpeak o Downtime, “dedurando” a operadora de Internet).

Vale ressaltar que o Tweet será, na verdade, gerado pelo próprio ThingSpeak (através do acesso de sua API HTTPS). Dessa forma, com uma simples requisição HTTPS e sem necessidade de biblioteca ou recursos mais específicos, pode-se gerar os Tweets do projeto. Além disso, todos os DownTimes contabilizados irão ser salvos no seu canal ThingSpeak, o que permite acompanhar o histórico de DownTimes de determinada situação.

 Material necessário

 

Para reproduzir este projeto, você precisará de:

 

Acesso à Intel Edison

 

Antes de mais nada, é necessário configurar a rede Wi-Fi a qual o Intel Edison irá se conectar. Para isso, siga este tutorial.

Uma vez conectado na rede Wi-Fi, é necessário acessar a Intel Edison via SSH. Para isto, estão disponíveis as seguintes maneiras:

Pré-requisitos

 

Assim como no artigo original, será necessário criar contas no Twitter e ThingSpeak. Veja como abaixo:

– Conta no Twitter

A primeira coisa a ser feita é criar uma conta no Twitter dedicada ao projeto. Não há segredo nenhum aqui: basta visitar o site do Twitter e fazer uma conta comum.

– Conta no ThingSpeak e criação de um canal

 

Será preciso uma conta no ThingSpeak e, posteriormente, a criação de um canal. Para isso, recomendo a visualização do vídeo abaixo. O vídeo é do Pedro Minatel, um grande nome do IoT no Brasil.

Importante: ao criar o canal, anote / salve a Write Key API dele. Isto será fundamental para envios de informações ao canal (algo que será detalhado mais a frente neste artigo).

– Interligando Twitter ao ThingSpeak

 

Conforme foi falado na estratégia do projeto, o ThingSpeak é quem, na realidade, irá gerar o Tweet. Portanto, será necessário fazer a integração de sua conta ThingSpeak com a conta do Twitter do projeto. Para isso, siga o procedimento abaixo:

  • Faça login no Twitter e permaneça logado em uma das abas do navegador
  • Abra uma nova aba e faça login no ThingSpeak. Uma vez logado, clique em Apps e depois em ThingTweet. Observe a figura abaixo:
    Figura 1 - Apps do ThingSpeak (destaque ao ThingTweet)
    Apps do ThingSpeak (destaque ao ThingTweet)
  • Na tela que abrir, no lado direito da mesma, observar a sessão Example API Endpoint. Lá conterá uma informação similar a da figura abaixo.
Figura 2 - dados para requisição HTTPS (Tweetar com o ThingSpeak)
Dados para requisição HTTPS (Tweetar com o ThingSpeak)

Anote / guarde estas informações, principalmente a API_KEY. Isto será utilizado mais adiante neste projeto.

  • Clique em ThingTweet. Na página que abrir, clique no botão Link Twitter Account. Siga as instruções da tela e a integração está feita!

Montagem

 

A montagem deste projeto é bem simples. Basta ligar o display a qualquer uma dos conectores I²C do Arduino base shield.

 

A hora do código!

 

Assim como no projeto original, o projeto é feito em Python. Para colocá-lo no Intel Edison, siga o procedimento:

Uma vez estabelecida comunicação SSH com o Intel Edison (logado como root), crie o diretório MonitorDowntime no seu home. Para isto, utilize o seguinte comando:

 

Vá ao diretório e crie o arquivo MonitorDowntime.py com o editor nano. Para isso, utilize os seguintes comandos:

 

 

No editor nano, cole o código-fonte abaixo. Se preferir, pode obte-lo diretamenta do meu repositório no GitHub clicando aqui.
Importante: não se esqueça de substituir nele a APIKey do ThingTweet e a WriteAPIKey do seu canal.

 

Agora, aperte Ctrl+X para sair e salvar o código-fonte na Intel Edison. Feito isso, execute o projeto com o seguinte comando:

 

O projeto irá executar e você poderá acompanhar na tela do seu computador e no display LCD o número total de Downtimes detectados. Em outras palavras, o projeto já está funcionando!

 

Iniciando o projeto automaticamente

 

Para fechar com chave de ouro este artigo / projeto, o este iniciará automaticamente (assim que o Intel Edison bootar). Basicamente, o script Python será transformado em um serviço do Linux, rodando em “background” indefinidamente. O procedimento para isto é o seguinte:

  1. Digite os seguintes comandos:
  2. No editor nano, cole o seguinte conteúdo:
  3. Aperte Ctrl+X para sair e salvar. Feito isso, execute os seguintes comandos:
  4. Pronto! Agora basta rebootar o Intel Edison para que, no boot, o projeto monitor de Downtime seja iniciado automaticamente! Agora é só acompanhar no Twitter e no ThingSpeak as condições de sua rede.
    A qualquer momento, para checar se o serviço do projeto está rodando, utilize o seguinte comando:

 

Fotos

 

Segue abaixo galeria de fotos do projeto em execução.

Referências

 

 

Gostou do artigo? Tem dúvidas? Tem críticas? Comente abaixo!