Ubidots

Como monitorar sua conexão com a Internet usando OpenWrt e Ubidots

Agustín Pelaez
· 5 min de leitura
Enviar por e-mail

Seu provedor de internet está oferecendo um serviço de boa qualidade? Se a resposta for "não", como isso pode ser medido? Uma boa maneira de ter uma ideia da qualidade da sua internet é pingar um host remoto e observar os tempos de resposta. Isso é o que chamamos de "latência".

Este guia explica como usar um OpenWrt para registrar os tempos de resposta retornados pelo programa PING e enviar esses tempos para a Ubidots .

Ao final deste tutorial, você deverá ser capaz de criar um gráfico incorporável como este – aliás, estes são os dados reais da nossa conexão de internet:

O OpenWrt é uma distribuição Linux para o seu roteador. Como um sistema Linux, ele permite gerenciar pacotes e configurar serviços como VPNs, SSH, telefonia, etc.

No entanto, ele roda em hardware com recursos limitados e cada serviço deve ser o mais leve possível. É por isso que usaremos Lua, uma linguagem poderosa, rápida e leve , usada principalmente em dispositivos embarcados.

Passo 1: Configurando seu roteador

Para concluir este guia, você precisará de um roteador compatível com OpenWrt. Você pode encontrar uma lista de roteadores compatíveis no site deles . Siga as instruções específicas do seu roteador para instalar o OpenWrt no seu dispositivo.

Nota: Este tutorial foi feito e testado com a versão 10.03.1 do OpenWrt (Backfire).

Passo 2: Instale as bibliotecas necessárias

Nosso programa utilizará duas bibliotecas Lua:

LuaSocket : Contém os métodos para criar requisições HTTP.

LuCi JSON : Um conjunto de utilitários para manipular objetos JSON.

Para instalar essas bibliotecas, acesse o roteador pela interface web, navegue até a aba “Sistema” e clique na opção “Software”. Por fim, localize as bibliotecas desejadas e instale-as

Alternativamente, você pode acessar o seu roteador via SSH e usar a ferramenta de gerenciamento de pacotes 'opkg' a partir do console para instalar os pacotes:

opkg install luasocket luci-lib-json

Etapa 3: Prepare sua conta Ubidots

Abra sua Ubidots , navegue até a aba Fontes para criar uma Fonte de Dados chamada “Roteador Openwrt” e, em seguida, uma variável chamada “Latência da Internet”. Anote o “ID da Variável”, que precisaremos inserir em nosso código Lua:

Crie um TOKEN permanente na aba do seu perfil e anote-o – também precisaremos dele para o nosso código Lua.

Passo 4: Programando seu roteador

Vamos escrever um código para medir a latência da Internet e depois enviá-lo para o Ubidots.

Para escrever um programa no seu dispositivo OpenWrt, você precisa estar conectado via SSH. Vamos começar criando um arquivo de configuração chamado 'config.lua' para armazenar alguns parâmetros:

mkdir /root/ubidots
cd /root/ubidots
nano config.lua

Insira o seguinte código, substituindo seu Token e ID da Variável pelos valores da sua conta Ubidots :

local conf = { variables = { ['52d481d9f91b284cd22af757'] = '8.8.8.8', }, -- Adicione um ID de variável para cada site para verificar o ping token = '9xtbvHL8hFKxfkmlXUW3qNoUpOEZAtp0qkkwPqffbn6DiR3ElRJ4B5m1hZMs', -- Substitua pelo seu próprio token host = 'ubidots', -- Host para estabelecer a conexão port = '80', -- Porta onde o serviço está escutando } return conf

Onde:

  • Variáveis : Você pode listar variáveis ​​individuais, cada uma representando o Ubidots e o host para o qual o PING deve ser enviado. Para este exemplo, usaremos o ID da nossa variável e o host “Google.com”.
  • token : Um token fixo gerado na aba do seu perfil .
  • host : O host para o qual as requisições HTTP serão feitas. Neste caso, o endereço da API do Ubidots
  • porta : Porta na qual o host está escutando. 80 por padrão.

Agora estamos prontos para criar o programa principal em LUA para medir e enviar a latência. Crie um arquivo chamado “ ubidots_ping.lua ubidots :

nano ubidots_ping.lua

Insira o seguinte código no arquivo criado:

!usr/bin/env lua -- Carregando a configuração principal local config = require "config" -- Biblioteca para ler a saída do comando local io = require "io" -- Carrega o módulo http local http = require "socket.http" -- Carregando as bibliotecas ltn12 e json do framework luci local ltn12 = require "luci.ltn12" local json = require "luci.json" local host = string.format("http://%s:%d", config.host, config.port or 80) -- Obtendo o token recuperado para var_id, var_ip in pairs(config.variables) do print(var_id, var_ip) local f = io.popen(string.format('ping -c 1 -W 4 %s | grep ttl', var_ip)) local l = f:read("a") f:close() local rtime = '-1' if l ~= '' then -- Obtendo o tempo de resposta da saída do ping. rtime = string.match(l, "time=(%d+.%d)") end print(rtime) local dtime = string.format('{"value": %s}', rtime) print(dtime) -- Enviar valor para a variável recuperada local rsp, code, tr = http.request{ url=string.format("%s/api/v1.6/variables/%s/values/", host, var_id), method = "POST", headers = { ['X-Auth-Token'] = config.token, ['Content-Type'] = "application/json", ['Content-Length'] = string.len(dtime) }, redirect = true, source = ltn12.source.string(dtime), sink = ltn12.sink.file(io.stdout) } end

Por último, mas não menos importante, vamos garantir que o programa tenha as permissões corretas:

chmod +x ubidots_ping.lua

Por fim, vamos executar o aplicativo uma vez para garantir que ele esteja funcionando:

lua ubidots_ping.lua

Se tudo correr bem, você deverá ver uma resposta em formato JSON e, em seguida, o valor enviado na sua conta Ubidots :

Passo 5: Configure uma tarefa Cron para enviar dados a cada minuto

Depois de se certificar de que o script está funcionando, crie uma tarefa cron para automatizar a medição e o envio dos valores de latência.

Você pode editar a tabela cron do OpenWrt através do console SSH:

crontab -e

Crie uma entrada que execute seu programa a cada minuto:

cd /root/ubidots/; luaubidots>>ubidotsdev/null        

Salve as alterações e verifique se o programa está enviando dados a cada minuto.

Agora que você tem esses dados no Ubidots , acesse a aba “ Dashboard ” na sua conta e crie um widget de gráfico de linhas como o do início desta página. Você também pode criar medidores, gráficos de dispersão para comparar a latência com outra variável (por exemplo, velocidade?) e muitos outros tipos de widgets em tempo real.

Você também pode criar alertas por SMS ou e-mail quando a latência estiver muito alta:

Concluindo

Neste exemplo, conseguimos medir a latência da Internet experimentada por um roteador OpenWrt. Aprendemos como usar a linguagem de programação Lua para enviar um valor ao Ubidots, permitindo que você conecte qualquer tipo de dispositivo com suporte a Lua à nossa nuvem.

Você também pode usar Ubidots para transmitir outros tipos de dados de séries temporais, como níveis de sinal, níveis de ruído, GPS, etc. Talvez você queira conferir estes outros exemplos:


Tem mais ideias de projetos? Crie uma conta Ubidots e coloque-as em prática!