Dispositivos integrados

Cómo monitorear su conexión a Internet usando OpenWrt y Ubidots

Agustín Peláez
· 5 min de lectura
Enviar por correo electrónico

¿Su proveedor de Internet ofrece 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 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 utilizar un OpenWrt para registrar los tiempos de respuesta devueltos por el programa PING y enviar estos tiempos a la nube Ubidots

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

OpenWrt es una distribución de Linux para su enrutador. Como caja de Linux, le permite administrar 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. Es por eso que usaremos Lua, un lenguaje potente, rápido y liviano que se usa principalmente para dispositivos integrados.

Paso 1: configurar su enrutador

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

Nota: Este tutorial se realizó y probó con OpenWrt versión 10.03.1 (Backfire).

Paso 2: instale las bibliotecas necesarias

Nuestro programa utilizará dos bibliotecas 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 enrutador a través de la interfaz web, navegar hasta la pestaña "Sistema" y luego hacer clic en la opción "Software". Finalmente, ubique las bibliotecas requeridas e instálelas:

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

opkg instala luasocket luci-lib-json

Paso 3: Prepare su cuenta Ubidots

Abra su Ubidots , navegue luego a la pestaña Fuentes para crear una fuente de datos llamada "Enrutador Openwrt" y luego una variable llamada "Latencia de Internet". Toma nota del “ID variable”, que tendremos que poner en nuestro código Lua:

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

Paso 4: Codificando tu enrutador

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

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

mkdir /root/ ubidots
cd /raíz/ ubidots
nano config.lua

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

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

Dónde:

  • variables : Puede enumerar variables individuales, cada una de las cuales representa el Ubidots y el host al que se debe realizar el PING. Para este ejemplo, usaremos el ID de nuestra variable y el host "Google.com".
  • token : Un token fijo generado en la pestaña de tu perfil .
  • host : El host al que se realizarán las solicitudes HTTP. Ubidots en este caso.
  • puerto : Puerto donde el host está escuchando. 80 por defecto.

Ahora estamos listos para crear el programa LUA principal 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 la configuración principal local config = require "config" - Biblioteca para leer la salida del comando local io = require "io" - Carga el módulo http local http = require "socket.http" - cargando bibliotecas ltn12 y json desde luci framework local ltn12 = requiere "luci.ltn12" json local = requiere "luci.json" host local = string.format("http://%s:%d", config.host, config .port o 80) - Obteniendo el token recuperado para var_id, var_ip en pares (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 ~= '' entonces - Obteniendo el tiempo de respuesta de la salida de ping. rtime = string.match(l, "time=(%d+.%d)") end print(rtime) local dtime = string.format('{"valor": %s}', rtime) print(dtime) - - Publicar valor en la variable recuperada local rsp, código, tr = http.request{ url=string.format("%s/api/v1.6/variables/%s/values/", host, var_id), método = " POST", encabezados = { ['X-Auth-Token'] = config.token, ['Content-Type'] = "application/json", ['Content-Length'] = string.len(dtime) }, redirigir = verdadero, fuente = ltn12.source.string(dtime), fregadero = ltn12.sink.file(io.stdout) } fin

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ías poder ver una respuesta en formato JSON y luego ver el valor publicado en tu cuenta Ubidots :

Paso 5: configure 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 /raíz/ ubidots /; lua /root/ ubidots / ubidots _ping.lua >> /dev/null        

Guarde sus cambios y verifique que el programa envíe datos cada minuto.

Ahora que tiene estos datos en Ubidots , navegue hasta la pestaña " Dashboard " en su cuenta y cree un widget de gráfico de líneas como el que se encuentra al principio de esta página. También puede crear Gagues, diagramas de dispersión para comparar la latencia con otra variable (por ejemplo, ¿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:

Concluyendo

En este ejemplo, pudimos medir la latencia de Internet experimentada por un enrutador OpenWrt. Aprendimos cómo usar el lenguaje de programación Lua para enviar un valor a Ubidots , permitiéndole conectar cualquier tipo de dispositivo con tecnología Lua a nuestra nube.

También puedes usar Ubidots para transmitir otros tipos de datos de series temporales, como niveles de señal, niveles de ruido, GPS, etc. Quizás quieras consultar estos otros ejemplos:


¿Tienes más ideas de proyectos? ¡Crea una cuenta Ubidots y hazlos realidad!