Cómo usar su Raspberry Pi para monitorear la velocidad de banda ancha

En este artículo, le mostraremos cómo usar Raspberry Pi para monitorear la velocidad de banda ancha.

Este proyecto implica un poco de configuración, incluida la descarga e instalación de algunos paquetes, la escritura de un script de Python y más.

Pero una vez que hayamos sentado las bases, podemos automatizar nuestro monitor de banda ancha para que siga monitorizando todo el tiempo que queramos.

El monitor creará un archivo CSV (valores separados por comas) en su Google Drive y actualizará ese archivo una vez por hora.

CSV es un formato de archivo muy simple que se puede abrir en Microsoft Excel o importar a Google Sheets.

¿Suena como algo útil? Entonces comencemos.

Este tutorial asumirá que ya tiene Raspbian instalado en su Pi.

Cómo usar su Raspberry Pi para monitorear la velocidad de banda ancha

Paso 1: busca actualizaciones

Como de costumbre, comencemos por buscar las últimas actualizaciones. Ejecute los siguientes comandos en la Terminal:

sudo apt-get update  sudo apt-get upgrade

Paso 2: Instale speedtest-cli

Existen varios métodos para medir la velocidad de la conexión de banda ancha. Usaremos speedtest-cli, que, en palabras de su creador, es «una interfaz de línea de comandos para probar el ancho de banda de Internet usando speedtest.net».

speedtest-cli no está disponible de inmediato en los archivos de Raspbian, pero podemos instalarlo desde el índice de paquetes de Python (PyPI). Eso es fácil de hacer usando una herramienta llamada pip que viene preinstalada en Raspbian Jessie y Stretch. Puede asegurarse de tener pip ejecutando este comando:

sudo apt-get install python-pip

Si aparece un mensaje que dice «python-pip ya es la versión más reciente», significa que estamos listos para comenzar.

A continuación, usemos pip para instalar speedtest-cli:

sudo pip install speedtest-cli

Con speedtest-cli ahora instalado, puede medir la velocidad de su banda ancha fácilmente con este comando:

speedtest-cli

Aunque, para nuestros propósitos, usar el modo simple de speedtest-cli es más conveniente:

speedtest-cli --simple

Debería ver algo como esto:

Ping: 47,943 ms
Descarga: 40,93 Mbit / s
Carga: 2,33 Mbit / s

Sin embargo, esa salida no se ajusta a la sintaxis de CSV. Por lo tanto, necesitaremos analizar los datos y adaptarlos.

Paso 3: crea una secuencia de comandos de Python

Creemos un nuevo archivo de Python:

sudo nano speedtest.py

Esto es lo que deberíamos tener dentro del archivo (puede, por supuesto, copiar y pegar estas líneas):

import os  import re  import subprocess  import time    response = subprocess.Popen('speedtest-cli --simple', shell=True, stdout=subprocess.PIPE).stdout.read()    ping = re.findall('Ping:s(.*?)s', response, re.MULTILINE)  download = re.findall('Download:s(.*?)s', response, re.MULTILINE)  upload = re.findall('Upload:s(.*?)s', response, re.MULTILINE)    ping[0] = ping[0].replace(',', '.')  download[0] = download[0].replace(',', '.')  upload[0] = upload[0].replace(',', '.')    try:      if os.stat('/home/pi/speedtest/speedtest.csv').st_size == 0:          print 'Date,Time,Ping (ms),Download (Mbit/s),Upload (Mbit/s)'  except:      pass    print '{},{},{},{},{}'.format(time.strftime('%m/%d/%y'), time.strftime('%H:%M'), ping[0], download[0], upload[0])

(Supongo que está guardando el script en el directorio / home / pi /; de lo contrario, simplemente cambie la ruta aquí: if os.stat (‘/ home / pi / speedtest / speedtest.csv’). St_size == 0 :.)

Una vez que tenga las líneas en su lugar, puede guardar el archivo y salir del editor presionando Ctrl + X, Y y Enter.

El script ejecuta speedtest-cli en su modo simple, analiza la salida y la imprime en formato CSV. Puede ejecutar el script con el siguiente comando:

python speedtest.py

Y si lo hace, debería ver una línea como esta:

26/10 / 17,10: 18,47.943,40.93,2.33

Muy bien, ¡estamos listos para seguir adelante!

Paso 4: crea un directorio

Creemos un directorio para nuestro archivo CSV:

mkdir speedtest

Si se pregunta por qué necesitamos un directorio para un solo archivo, es porque vamos a sincronizar ese directorio con Google Drive. Una vez sincronizado, todo dentro del directorio corresponderá al contenido de nuestro directorio similar de Google Drive.

Ahora, si ejecutamos nuestro script de Python de esta manera:

python speedtest.py >> speedtest/speedtest.csv

… Tendremos un archivo CSV con datos de velocidad de banda ancha en nuestro nuevo directorio.

Si comprueba el contenido del archivo (por ejemplo, cat speedtest / speedtest.csv), puede ver líneas como estas:

Fecha, hora, ping (ms), descarga (Mbit / s), carga (Mbit / s)
26/10 / 17,10: 18,47.943,40.93,2.33

¡Excelente!

Paso 5: integre el script con Google Drive

Para integrar nuestro script con Google Drive, podemos usar el cliente CLI de Google Drive del usuario de GitHub Petter Rasmussen. Descarguemos su versión de Raspberry Pi ejecutando el siguiente comando:

wget -O gdrive https://docs.google.com/uc?id=0B3X9GlR6EmbnVXNLanp4ZFRRbzg&export=download

A continuación, asignemos los derechos de ejecución del archivo:

chmod +x gdrive

Tendremos que decirle a Google Drive que permita que el cliente CLI de Google Drive se conecte a nuestra cuenta. Podemos hacerlo ejecutando Google Drive CLI Client con cualquier parámetro. Por ejemplo, este comando enumera el contenido de una cuenta de Google Drive:

./gdrive list

Simplemente siga las instrucciones: vaya a la URL en su navegador, inicie sesión en su cuenta de Google y permita que «GDrive (…) [v]Ver y administrar los archivos en su Google Drive «. Entonces estás listo para ingresar el código de verificación.

Finalmente, gdrive enumerará el contenido de su Google Drive.

Ahora que tenemos nuestro directorio de prueba de velocidad en la Raspberry Pi, creemos un directorio correspondiente a nuestro Google Drive:

./gdrive mkdir speedtest

El programa devuelve el ID de nuestro nuevo directorio. Copia eso, ya que lo necesitaremos.

A continuación, sincronizaremos nuestros dos directorios de prueba de velocidad:

./gdrive sync upload speedtest ID

Simplemente reemplace ID con el ID de su directorio de prueba de velocidad.

Si todo salió como se suponía, ahora verá un directorio llamado speedtest en su Google Drive. En el directorio, está el archivo que creamos anteriormente (speedtest.csv):

Ahora, si ejecutamos el script de Python nuevamente, se agregarán nuevos datos de velocidad de banda ancha al final del archivo:

python speedtest.py >> speedtest/speedtest.csv

Y si volvemos a ejecutar el comando de sincronización, podemos ver nuestro archivo actualizado en nuestro Google Drive:

./gdrive sync upload speedtest ID

(Nuevamente, recuerde reemplazar la ID con la ID de su directorio de prueba de velocidad).

Paso 6: automatiza todo

¡Ya casi estamos listos! Todo lo que nos queda por hacer es hacer que todo funcione automáticamente. Para esto, usaremos cron, que hace posible programar comandos para que se ejecuten en momentos específicos, como una vez por hora.

Hagamos un breve script de shell que contenga los comandos que necesitamos ejecutar una vez por hora:

sudo nano speedtest-cron.sh

Agregue los siguientes comandos familiares (supongo que ha hecho todo en el directorio / home / pi /; de lo contrario, simplemente cambie las rutas):

sudo python /home/pi/speedtest.py >> /home/pi/speedtest/speedtest.csv  /home/pi/gdrive sync upload speedtest ID

(Y, una vez más, recuerde reemplazar la ID con la ID de su directorio de prueba de velocidad).

Luego guarde y salga con Ctrl + X, Y y Enter.

Asignemos los derechos de ejecución del script:

sudo chmod +x speedtest-cron.sh

Ahora estamos listos para probar el script:

./speedtest-cron.sh

Muy bien, creemos nuestro trabajo cron:

crontab -e

Escriba la siguiente línea en el editor y guarde y salga presionando Ctrl + X, Y, Enter:

0 * * * * /home/pi/speedtest-cron.sh

Ahora nuestro monitor de velocidad de banda ancha está listo. Registrará los resultados de la prueba de velocidad una vez por hora en la parte superior de la hora. Puede abrir el archivo CSV que está en su Google Drive usando Microsoft Excel o Google Sheets. Si prefiere lo último, tendrá que importar el archivo (Archivo> Importar…).