Raspberry Pi, desactivar conexiones para ahorrar energía

Vamos a ver como poder modificar las distintas conexiones que posee una Raspberry Pi para ahorrar energía. Nos vamos a entrar en

Hay que pensarlo bien antes de usar una política de activar/deasctivar las conexiones. El restablecerlas tiene un coste enérgico por lo que estar todo el rato conectando y desconectando puede aumentar el consumo en lugar reducirlo.

Todos estos comandos se deben de ejecutar con permisos de administrador por lo que puede ser necesario usar sudo delante de ellos.

Desactivar y activar bluetooth

Desactivar bluetooth:

rfkill block bluetooth

Activar bluetooth:

rfkill unblock bluetooth

Desactivar y activar WiFi

Desactivar WiFi:

rfkill block wifi

Activar WiFi

rfkill unblock wifi

Al activarlo habrá que volver a conectarse a la red.

Conexión ethernet

En este apartado vamos a ver como de desactiva el software a nivel de sistema operativo y no como desactivar la alimentación que veremos en el apartado siguiente.

Desactivar conexión ethernet:

ifconfig eth0 down

Activar conexión ethernet:

ifconfig eth0 up

Desactivar puertos USB (y ethernet)

Los puertos USB y ehernet tienne alimentación compartida si desactivamos los USB el puerto ethernet «cae con ellos».

Desactivar puertos USB:

echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/unbind

Activar puertos USB:

echo '1-1' |sudo tee /sys/bus/usb/drivers/usb/bind

Raspberry Pi programar el encendido, apagado y reinicio

Vamos a ver como podemos configurar la Raspberry Pi para que se encienda, se apague y se reinicie cuando nosotros queramos. El reinicio y el apagado son sencillos. Para el encendido necesitaremos soluciones más imaginativas.

Para programar el apagado y reinicio usaremos el servicio cron para programar tareas. Ya vimos como funcionaba en esta entrada. Ahora solo hace falta ver que comandos tenemos que programar.

Para reiniciar la Raspberry podemos usar:

reboot

Y para apagarla:

shutdown -h now

Ambos necesitan usarse con permisos de administrador por lo que es recomendable programarlos en el crontab del usuario root o de cualquiera que tenga permisos de administrador y precederlos del comando sudo.

Ahora vemos como resolvemos programar el encendido. No hay un comando que encienda al Raspberry Pi tras haberla apagado. Para ello necesitáramos un RTC con una batería que se quedase en espera para encender la Raspberry, por suerte debido a como funciona la Raspberry eso es muy sencillo. Si tienes la Raspberry sin alimentación y se la pones se enciende, no hay ningún interruptor que cambiar de on a off ni nada parecido. Aprovechando eso basta con usar un enchufe con temporizador, que se pueden comprar muy baratos. Esos enchufes llevan un reloj en el que ajustas que horas van a tener luz y que horas no.

Por ejemplo, supongamos que queremos tener una Raspberry de tal forma que se apague por la madrugada cuando no vas a hacer uso de ella, por ejemplo a la 1:00 y que se encienda a las 8:00. Lo primero es ajustar el enchufe, lo programamos para que corte la alimentación pasadas la 1:00 pero dejando un margen, la 1:15, la 1:30, sin apurar. Y para que a las 8:00 (o algo antes) vuelta a conectar la alimentación.

El último paso es configurar una tarea de cron para que lance el comando de apagar la Raspberry a la 1:00. Para evitar que cuando se corte la corriente se apague la Raspberry mal hay que dejar un margen de tiempo desde que está programado lanzar el comando hasta que el enchufe corte la corriente.

Raspberry Pi programar tareas con cron

Cron es un servicio que se usa para lanzar tareas programadas. Su configuración se realiza a través de un fichero de configuración donde se definen las tareas programadas.

Cada usuario tiene su propio fichero de configuración, este se edita con el comando:

crontab -e

Cada linea del fichero es una tarea programada. Una tarea progrmada tiene 6 parámetros (excepto si empieza por @ que solo tiene 2), los cinco primeros definen en momento cuando se lanza el comando y el sexto el comando que se lanza:

  1. Minuto en el que se ejecutará el comando, va de 0 a 59.
  2. Hora en la que se ejecutará el comando, va de 0 a 23.
  3. Día del mes en el que se ejecutará el comando, va del 1 al 31.
  4. Mes en el que se ejecutará el comando, va del 1 al 12.
  5. Día de la semana en el que se ejecutará el comando, va de 0 a 7.
  6. Comando que se ejecutará

Se pueden usar los siguientes modificadores:

  • * : cualquier valor de ese campo
  • , : define listas de valores. 1,3,5
  • – : define rangos de valores. 1-5 seria lo mismo que 1,2,3,4,5
  • / : en combinación con un rango o el asterisco define «cada cuanto». 1-5/2 seria lo mismo que 1,3,5
  • # : Se usa en el campo día de la semana, indica que semana del mes. 1#2 el segundo lunes del mes
  • W : Se usa en el campo día de la semana, indica el primero del mes. 1W el primer lunes del mes
  • L : Se usa en el campo día de la semana, indica el último del mes. 1L el último lunes del mes
  • @ : Es un atajo para indicar momentos concretos
    • @reboot una vez al inicio del sistema
    • @yearly una vez al año «0 0 1 1 *»
    • @annually una vez al año «0 0 1 1 *»
    • @monthly una vez al mes «0 0 1 * *»
    • @weekly una vez a la semana «0 0 * * 0″
    • @daily una vez cada dia «0 0 * * *»
    • @hourly una vez cada hora «0 * * * *»

Algunos ejemplos:

30 22 * * 1-5 reboot

Reiniciar de lunes a viernes a las 22:30 (las diez de la noche)

30 10-14/2 * * * reboot

Reiniciar a las 10:30, 12:30 y 14:30 cada día

15 */6 * * * reboot

Reiniciar cada 6 horas cuando sean las y cuarto de esa hora

@hourly reboot

Reiniciar cada hora

30 10 * * 0W reboot

Reiniciar el primer domingo de cada mes

30 10 * * 7W reboot

Reiniciar el primer domingo de cada mes (el 0 y el 7 indican domingo)