En este proyecto vamos a crear una monitorización de Internet con MySpeed y n8n capaz de comprobar periódicamente el rendimiento de nuestra conexión y enviarnos una alerta automática mediante Telegram cuando se detecte una degradación.
La solución está construida utilizando Docker y diferentes contenedores para mantener todos los componentes aislados y fáciles de administrar. MySpeed se encarga de realizar las pruebas de velocidad, mientras que una API propia mediante myspeed-api permite consultar los resultados desde n8n. Finalmente, n8n procesa la información, controla los fallos consecutivos y decide cuándo es necesario enviar una notificación.
El objetivo no es simplemente medir la velocidad de Internet, sino crear un sistema que pueda funcionar de forma autónoma, detectar problemas y avisarnos únicamente cuando realmente sea necesario.
En mi caso, he configurado el sistema para que, después de detectar 3 resultados anómalos consecutivos, se envíe una alerta a Telegram. Cuando la conexión vuelve a la normalidad, el sistema detecta la recuperación, reinicia el contador y puede enviar una nueva notificación.
Todo el proyecto está desplegado mediante Docker, buscando una solución sencilla, autónoma y sin depender de servicios externos de pago.
La solución está formada por varios componentes que trabajan conjuntamente:
El primer paso es disponer de un servidor donde ejecutar todos los servicios. Para este proyecto utilizamos Ubuntu Server, aunque la misma arquitectura podría adaptarse a otros sistemas compatibles con Docker.
Una vez instalado el sistema, es recomendable actualizar los paquetes:
sudo apt update sudo apt upgrade -y
También debemos comprobar que el servidor tiene conectividad:
ping 8.8.8.8
Antes de continuar conviene verificar que el servidor tiene una dirección IP accesible desde nuestra red local, ya que posteriormente accederemos a las interfaces web de MySpeed, n8n y otros servicios.
Docker será la base de nuestra infraestructura.
En lugar de instalar todos los servicios directamente sobre Ubuntu, utilizaremos contenedores independientes. Esto permite mantener cada aplicación aislada y facilita las tareas de mantenimiento.
Después de instalar Docker y Docker Compose podemos comprobar que funcionan correctamente:
docker --version
y:
docker compose version
También podemos utilizar Portainer para administrar visualmente nuestros contenedores desde una interfaz web.
La arquitectura quedará organizada de forma que MySpeed, myspeed-api y n8n puedan funcionar de manera independiente.
El siguiente componente es MySpeed.
Su función es realizar periódicamente las pruebas de velocidad de nuestra conexión a Internet y almacenar los resultados.
Entre los datos que podemos obtener se encuentran:
Una vez desplegado el contenedor podemos acceder a la interfaz web de MySpeed desde nuestro navegador.
Aquí podremos comprobar manualmente que las pruebas se realizan correctamente antes de continuar con la automatización.
Para integrar MySpeed con n8n necesitamos una forma sencilla de consultar sus resultados.
Para ello creamos myspeed-api, una pequeña API que actúa como intermediaria entre MySpeed y n8n.
La API permite realizar una petición HTTP para obtener el último resultado disponible.
Por ejemplo:
http://myspeed-api:8080/latest
La respuesta se obtiene en formato JSON:
{
"download": 942.82,
"upload": 779.25,
"ping": 10,
"error": null
}
Esto es especialmente útil porque n8n puede trabajar directamente con estos valores para determinar si la conexión está funcionando correctamente.
El siguiente componente es n8n, que será el encargado de automatizar todo el proceso.
Una vez desplegado mediante Docker, accedemos a su interfaz web y creamos un nuevo workflow llamado:
Monitor Internet – MySpeed
n8n será el encargado de ejecutar periódicamente las comprobaciones, analizar los resultados, mantener el contador de fallos y enviar las notificaciones.
El workflow comienza con un Schedule Trigger, que ejecuta automáticamente el proceso según el intervalo configurado.
En nuestra implementación utilizamos un intervalo periódico para realizar nuevas comprobaciones.

El nodo HTTP Request consulta myspeed-api y obtiene el último resultado de MySpeed.
Después, el nodo IF analiza los valores.
Por ejemplo, podemos establecer unos límites mínimos de descarga y subida y un límite máximo de ping. Si alguno de estos valores supera los criterios establecidos, el resultado se considera anómalo.
Para recibir las notificaciones utilizamos un bot de Telegram.
Configuramos las credenciales del bot dentro de n8n y posteriormente conectamos el nodo Send a text message a la rama correspondiente del workflow.
La alerta puede contener información obtenida directamente de la prueba:
🚨 ALERTA INTERNET
⚠️ Se ha detectado una degradación de la conexión.
📥 Descarga: 793.95 Mbps
📤 Subida: 821.87 Mbps
📡 Ping: 11 ms
🖥️ Servidor: LuisBernalServer
🌐 MySpeed
Se han detectado varios tests consecutivos
con rendimiento anormal.
De esta forma recibimos información útil y no simplemente un mensaje genérico indicando que existe un problema.
Esta es una de las partes más importantes del proyecto.
Una prueba aislada con un resultado inferior al habitual no significa necesariamente que exista una incidencia. Las velocidades pueden fluctuar por diferentes motivos.
Por eso decidimos utilizar un contador de fallos consecutivos.
La lógica establece:
Fallo 1 → No enviar alerta
Fallo 2 → No enviar alerta
Fallo 3 → 🚨 Enviar alerta
El contador se mantiene mediante datos estáticos del workflow:
const staticData = $getWorkflowStaticData('global');
if (!staticData.failures) {
staticData.failures = 0;
}
staticData.failures++;
const threshold = 3;
const shouldAlert =
staticData.failures >= threshold &&
staticData.alerting !== true;
if (shouldAlert) {
staticData.alerting = true;
}
Además, guardamos el estado alerting para evitar que Telegram reciba una nueva alerta en cada ejecución mientras la incidencia continúa.
Esto evita convertir una pequeña incidencia en una lluvia de notificaciones. 😅
El sistema también debe saber cuándo la conexión vuelve a funcionar correctamente.
Cuando el nodo IF determina que la conexión ha recuperado unos valores normales, el flujo pasa por Reset contador.
Este nodo comprueba si anteriormente estábamos en estado de alerta:
const staticData = $getWorkflowStaticData('global');
const wasAlerting = staticData.alerting === true;
staticData.failures = 0;
staticData.alerting = false;
return [{
json: {
...$json,
recovered: wasAlerting
}
}];
De esta manera conseguimos mantener un ciclo completo:
Descarga la Guía
Guia_Monitorizacion_Internet_MySpeed_n8n_Telegram


Monitorización de Internet con MySpeed y n8n: alertas automáticas con Telegram