Una de las funciones que le estoy dando a mi Raspberry Pi es la descarga de Torrents. Puedo tener encendido el dispositivo 24 horas al día los 365 días del año sin preocuparme del consumo de electricidad, ruidos o cualquiera de las molestias de usar los ordenadores "normales" para tal función.
Para descargar los torrent, instalé transmission-daemon. Es un cliente torrent muy ligero y además incluye un entorno gráfico web al que se puede acceder desde el navegador de cualquier ordenador o teléfono móvil.
El problema con el que me encontré fue la necesidad de programar las horas de descarga. Si descargaba sin límite de velocidad, no podía usar internet de un modo normal desde los otros dispositivos de la casa. transmission-daemon incorpora un pequeño programador muy básico. Gracias a él configuré un límite de subida de 15 kb/s y 100 kb/s de bajada desde las 7 de la mañana hasta las 2 de la madrugada del día siguiente. Horario en el que normalmente suelo usar los ordenadores.
Pronto esa programación básica demostró ser insuficiente: sólo descargaba sin límite durante 5 horas al día cuando en realidad el tiempo que no necesitaba navegar por internet era mucho mayor. Además, si algún día necesitaba navegar por internet pasadas las 2:00 de la madrugada, primero debía acceder al panel de control de transmission-daemon para limitar manualmente el ancho de banda consumido por el programa.
En resumidas cuentas, la programación no funcionaba porque era demasiado básica y, mucho peor, rígida, no se adaptaba a la aleatoriedad de consumo de internet en casa.
Gracias a que transmission-daemon permite ser controlado desde la línea de comandos (ésta es una de las grandes ventajas de muchos programas de Linux) la solución del problema se hizo obvia. Los comandos transmission-remote -as
y transmission-remote -AS
sirven respectivamente para limitar y quitar el límite a las descargas. Así que sólo es necesario detectar si hay ordenadores encendidos en la red doméstica y, en base a ello, aplicar o no los límites a las descargas de la Raspberry Pi.
Para detectar si los ordenadores de la casa están conectados, nada mejor que hacer un ping
a su IP. Sería posible hacerlo con las 254 IPs que, normalmente, permitimos todos en nuestras redes domésticas[1]. Parece poco eficiente y, además, en mi casa tengo todos los dispositivos configurados con IP estática.
Explicado el proceso, sólo es necesario automatizarlo para lo que creé un pequeño script en Python que grabé en ~/myscripts
con el nombre torrent-autolimit.py
:
import os sTransId = '{-usuario-}:{-clave-}' dIps = {' PC 1': '192.168.1.50', ' PC 2': '192.168.1.51', ' PC 3': '192.168.1.52', 'Xbox 360': '192.168.1.53'} liResponses = [] bComputersOn = False for sName, sIp in dIps.iteritems(): iResponse = os.system('ping -q -c 3 ' + sIp + '> /dev/null') if iResponse == 0: sResponse = 'ON' bComputersOn = True else: sResponse = 'OFF' print sName + ' (' + sIp + '): ' + sResponse if bComputersOn == True: os.system('transmission-remote -n ' + sTransId + ' -as') else: os.system('transmission-remote -n ' + sTransId + ' -AS')
En la línea sTransId = '{-usuario-}:{-clave-}'
indicaremos los datos de acceso a transmission-daemon. Por defecto, tanto {-usuario-}
como {-clave-}
deben ser sustituidos por "transmission" (sin las comillas) salvo que hayamos cambiado dicha configuración en transmission-daemon.
En la línea dIps = {' PC 1': '192.168.1.50', ' PC 2': '192.168.1.51', ' PC 3': '192.168.1.52', 'Xbox 360': '192.168.1.53'}
, incluyo las IPs de los dispositivos de casa junto con una pequeña descripción de los mismos. Hago que todas las descripciones sean de 8 caracteres para que al llamar manualmente al script todo se vea más bonito.
Los parámetros extra al hacer el ping
hacen que sólo envíe 3 paquetes de datos y que no muestre nada en pantalla. De forma análoga, al hacer las llamadas a transmission-remote
se añaden parámetros para autentificarnos.
Una vez grabado el script, podemos probarlo sin más que escribir en la consola python ~/myscripts/torrent-autolimit.py
. Si todo ha ido bien, veremos en pantalla un listado con los ordenadores que están conectados o no a la red doméstica:
Sólo queda hacer que la Raspberry Pi ejecute el script automáticamente cada 5 minutos. Para ello, editamos las tareas programadas escribiendo en consola crontab -e
y añadiendo la siguiente información al final del archivo:
# m h dom mon dow command */5 * * * * python /home/pi/myscripts/torrent-autolimit.py
Salimos y grabamos los cambios con Ctrl-x
, y
, Enter
. Con esto ya tendremos funcionando nuestro sistema "inteligente" de control de descargas en la Raspberry Pi. Espero que le sea útil a alguien.
Comments
Hola que tal, era lo que necesitaba, aunque aun tu script tiene un pequeño problema.
Te pongo un ejemplo.En mi casa el rango de ip es 192.168.0, tengo varios portatiles en casa, si ese portatil me lo llevo, tengo que cambiar la ip fija a dhcp, para mi eso no es un problema, pero si para mi mujer que tiene conocimientos de informatica usuario. Lo suyo seria hacer ping mediante hostname.
Gracias!
Hola, soy yo de nuevo, investigando he conseguido como hacer pings by hostname. Os lo explico por si hay algun problema.
1º hacermo instalamos winbid
sudo apt-get install winbind
2º editamos el archivo /etc/nsswitch.conf y cambiamos esta linea:
hosts: files dns
Por
hosts: files dns wins
Ya esta, tan solo queda hacer ping a nuestros nombres de equipos y todo funcionara a la perfeccion.
Gracias por todo de nuevo
Estaba echando un vistazo a los comentarios spam y me he encontrado con la sorpresa de tus dos comentarios de verdad. Muchísimas gracias por ellos.
Con respecto a lo del DHCP, pensaba que la configuración era diferente para cada red a la que te conectes. Mi portátil está casi siempre en casa así que eso no es un problema. Pero en cuanto tenga algún problema le echo un ojo a tu solución.
Gracias otra vez.
Add new comment