Ir al contenido principal
Todas las coleccionesTutoriales de proyectos IoT
Cómo monitorear tu conexión a Internet usando OpenWrt y Ubidots
Cómo monitorear tu conexión a Internet usando OpenWrt y Ubidots

Cómo usar un enrutador OpenWrt para registrar los tiempos de respuesta devueltos por el programa PING y enviar estos tiempos a la nube de Ubidots.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

¿Está su proveedor de Internet ofreciendo un servicio de buena calidad? Si la respuesta es "no", ¿cómo se puede medir? Una buena manera de tener una idea de la calidad de su Internet es hacer ping a un host remoto y observar los tiempos de respuesta. Esto es lo que llamamos "Latencia".

Esta guía explica cómo usar un router OpenWrt para registrar los tiempos de respuesta devueltos por el programa PING y enviar estos tiempos a la nube de Ubidots.

Al final de este tutorial, debería ser capaz de crear un gráfico embebible como este; por cierto, estos son los datos reales de nuestra conexión a Internet:

OpenWrt es una distribución de Linux para su router. Como una caja Linux, le permite gestionar paquetes y configurar servicios como VPN, SSH, telefonía, etc.

Sin embargo, se ejecuta en hardware limitado y cada servicio debe ser lo más ligero posible. Por eso utilizaremos Lua, un lenguaje poderoso, rápido y ligero que se utiliza principalmente para dispositivos embebidos.

Paso 1: Configurando su Router

Para completar esta guía necesitará un router compatible con OpenWrt. Puede encontrar una lista de routers compatibles en su sitio web. Siga las instrucciones específicas del router para flashear su dispositivo.

Nota: Este tutorial se ha realizado y probado con la versión 10.03.1 (Backfire) de OpenWrt.

Paso 2: Instalar las bibliotecas requeridas

Nuestro programa utilizará dos bibliotecas de Lua:

LuaSocket: Contiene los métodos para crear solicitudes HTTP.

LuCi JSON: Un conjunto de utilidades para manejar objetos JSON.

Para instalar estas bibliotecas, puede acceder a su router a través de la interfaz web, navegar a la pestaña "Sistema" y luego hacer clic en la opción "Software". Finalmente, localice las bibliotecas requeridas e instálelas:

Alternativamente, puede iniciar sesión en su router a través de SSH y usar la herramienta de gestión de paquetes 'opkg' desde la consola para instalar los paquetes:

opkg install luasocket luci-lib-json

Paso 3: Prepare su cuenta de Ubidots

Abra su cuenta de Ubidots, navegue a la pestaña Dispositivos: "Router Openwrt" y luego seleccione una variable llamada "Latencia de Internet". Tome nota del "ID de Variable", que necesitaremos poner en nuestro código Lua:

Cree un TOKEN permanente en su pestaña de perfil y tómelo en cuenta; también lo necesitaremos para nuestro código Lua.

Paso 4: Codificando su Router

Escribiremos un código para medir la latencia de Internet y luego enviarlo a Ubidots.

Para escribir un programa en su dispositivo OpenWrt, debe estar conectado a través de SSH. Comencemos creando un archivo de configuración llamado ‘config.lua’ para almacenar algunos parámetros:

mkdir /root/ubidotscd /root/ubidotsnano config.lua

Inserte el siguiente código, reemplazando su Token y ID de Variable con los de su cuenta de Ubidots:

local conf = {  variables = {     ['52d481d9f91b284cd22af757'] = '8.8.8.8',  }, -- Agregue un id de variable por cada sitio para verificar el ping  token = '9xtbvHL8hFKxfkmlXUW3qNoUpOEZAtp0qkkwPqffbn6DiR3ElRJ4B5m1hZMs', --Reemplace con su propio token  host = 'things.ubidots.com',  -- Host para establecer conexión  port = '80',  -- Puerto donde el servicio está escuchando}return conf

ver rawconfig.lua alojado con ❤ por GitHub

Donde:

  • variables: Puede listar variables individuales, cada una representando el ID de Ubidots y el host al que se debe hacer el PING. Para este ejemplo, utilizaremos el ID de nuestra variable y el host “Google.com”.

  • token: Un token fijo generado en su cuenta de Ubidots. Aprenda a encontrarlo aquí.

  • host: El host al que se realizarán las solicitudes HTTP. La dirección API de Ubidots en este caso.

  • port: Puerto donde el host está escuchando. 80 por defecto.

Ahora estamos listos para crear el programa principal de LUA para medir y enviar la latencia. Cree un archivo llamado "ubidots_ping.lua":

nano ubidots_ping.lua

Inserte el siguiente código en el archivo creado:

#!usr/bin/env lua-- Cargando configuración principallocal config = require "config"-- Biblioteca para leer la salida del comando local io = require "io"-- Cargar el módulo http local http = require "socket.http"-- cargando las bibliotecas ltn12 y json del marco luci local ltn12 = require "luci.ltn12" local json = require "luci.json" local host = string.format("http://%s:%d", config.host, config.port or 80)-- Obteniendo el token recuperado for 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    -- Obteniendo el tiempo de respuesta de la salida del ping.    rtime = string.match(l, "time=(%d+\.%d*)")  end  print(rtime)  local dtime = string.format('{"value": %s}', rtime)  print(dtime)  -- Publicar valor en la variable 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

ver rawubidots_ping.lua alojado con ❤ por GitHub

Por último, pero no menos importante, asegurémonos de que el programa tenga los permisos correctos:

chmod +x ubidots_ping.lua

Finalmente, ejecutemos la aplicación una vez para asegurarnos de que está funcionando:

lua ubidots_ping.lua

Si todo salió bien, debería poder ver una respuesta en formato JSON y luego ver el valor publicado en su cuenta de Ubidots:

Paso 5: Configurar un trabajo Cron para enviar datos cada minuto

Una vez que se asegure de que el script está funcionando, cree un trabajo cron para automatizar la medición y publicación de los valores de latencia.

Puede editar la tabla cron de OpenWrt a través de la consola SSH:

crontab -e

Cree una entrada que llame a su programa cada minuto:

* * * * * cd /root/ubidots/; lua /root/ubidots/ubidots_ping.lua >> /dev/null

Guarde sus cambios y verifique que el programa esté enviando datos cada minuto.

Ahora que tiene estos datos en Ubidots, navegue a la pestaña "Dashboard" en su cuenta y cree un widget de gráfico de líneas como el que está al principio de esta página. También puede crear medidores, gráficos de dispersión para comparar la latencia con otra variable (digamos, velocidad?), y muchos otros tipos de widgets en tiempo real.

También puede crear alertas por SMS o correo electrónico cuando la latencia sea demasiado alta:

Conclusión

En este ejemplo, pudimos medir la Latencia de Internet experimentada por un router OpenWrt. Aprendimos a usar el lenguaje de programación Lua para enviar un valor a Ubidots, permitiéndole conectar cualquier tipo de dispositivo alimentado por Lua a nuestra nube.

También puede usar Ubidots para transmitir otros tipos de datos de series temporales, como niveles de señal, niveles de ruido, GPS, etc. Puede que desee consultar estos otros ejemplos:

¿Tiene más ideas de proyectos? ¡Cree una cuenta de Ubidots y hágalas realidad!

Publicado originalmente en Ubidots Blog el 24 de julio de 2014.

¿Ha quedado contestada tu pregunta?