Script para ahorrar energía. Alarma sonora que avisa cuando la batería está descargada y cuando se termina de cargar

ACTUALIZACIÓN 11/6/2018

Hace un tiempo, tanto mi amigo Néstor como yo, venimos buscando en la web algún “programita” para GNU/Linux que avise en forma sonora cuando la batería se está terminando o cuando se terminó de cargar, con el objetivo de ahorrar energía y a la vez extender la vida útil de la batería.

Lamentablemente no encontramos nada y decidimos ponernos a escribir código, que resultó mucho más sencillo de lo esperado.

El script está programado en Bash (seguramente se puede mejorar) y tiene un par de parámetros editables, que son:

  • El porcentaje de batería para el que sonará la alarma de “batería descargada”.
  • El porcentaje de batería para el que sonará la alarma de “batería cargada”.
  • El nombre de los archivos .wav que se reproducirán en cada caso.

El nombre del archivo puede ser cualquiera. Yo le puse bat.sh y lo guardé en un directorio llamado “energia” dentro de mi /home.

El programita depende de bash (ya que es un script de este tipo) que ya viene instalado con el sistema operativo, pero además usa un programa que deberás instalar. Este se llama acpi y sirve para obtener resultados de diferentes dispositivos de hardware, entre ellos la batería. También usaremos aplay para reproducir sonidos.

Para instalarlo, en las distribuciones basadas en Debian, ejecutar como root o usando sudo:

apt-get install acpi mplayer

 

NOTA: Antes este script usaba aplay pero con las nuevas 
versiones de GNU/Linux se dejó de usar alsa migrando a 
pulseaudio y aplay ya no existe. 
Por lo que lo reemplazamos, con los mismos 
resultados, por mplayer

 

Luego crear un directorio dentro de tu home y usando algún editor (como gedit) escribir el siguiente código:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/bash
#Script para avisar cuando la batería se está agotando
#O cuando está completamente llena
 
#Función para generar la fecha y hora
fyh() {
  date +"%Y-%m-%d %H:%M:%S"
}
 
#Exportación de variables. En este caso sirve para 
#que el cron sepa a donde direccionar la salida
#del programa. Cambiar usuario por tu nombre de usuario
#y 1000 por el id de tu usuario. Para conocer el id de
#usuario, usar el comando id en una terminal.
 
export XDG_RUNTIME_DIR="/run/usuario/1000"
export DISPLAY=:0
export XAUTHORITY=/home/usuario/.Xauthority
 
bateria=`/usr/bin/acpi -V | grep ', 10%'`;
 
 if [ -z "$bateria" ]
 then
  fyh;
  echo " Carga suficiente ..."
 else
  for contador in 1 2 3 4 5
  do
   /usr/bin/mplayer -display :0 -volume 50 /home/usuario/energia/beep.wav
   sleep 1s
  done
 fi;
bateriacargada=`/usr/bin/acpi -V | grep ', 100%'`;
 if [ -z "$bateriacargada" ]
 then
  echo ""
 else
  for contador2 in 1 2 3 4 5
  do
   echo fyh;
   echo "Bateria totalmente cargada. Desenchufe cargador\n"
   /usr/bin/mplayer -display :0 -volume 50 /home/usuario/energia/beep2.wav
   sleep 1s
  done
 fi;

 

Notar que en el código las rutas son ABSOLUTAS es decir, si el directorio creado se llama energia, los archivos deberán ponerse con la ruta completa /home/usuario/energia/ donde usuario es tu nombre de usuario.

Guardar el archivo dentro del directorio creado. Ponerle el nombre que quieras. Yo le puse bat.sh

Darle permisos de ejecución. En una terminal, dentro del directorio donde está el script:

chmod 777 bat.sh

En el mismo directorio, poner los archivos .wav que vamos a reproducir, con los mismos nombres que en el script (yo les llamé beep.wav y beep2.wav).

Por supuesto puedes crear tus propios archivos wav con textos como “enchufame, la batería ya se está acabando” y “desenchufame, no gastes electricidad al cuete” 😀

Lo único que queda por hacer es agregar el script al cron, para que se ejecute una vez por minuto. Como es muy sencillo, no usará recursos del sistema y no estará ejecutándose permanentemente.

Para agregar esto al cron, abrimos el archivo /etc/crontab con un editor de textos (puede ser gedit) pero usando permisos de root o usando sudo.

Usar el comando contrab -e

Permite programar una tarea para que se ejecute a una hora específica del día.

Agregar al final la siguiente línea:

 

* * * * * /bin/sh /home/usuario/energia/bat.sh >> /home/usuario/energia/bat.log

 

Reemplazar usuario por tu nombre de usuario.

Los asteriscos al principio le dicen al sistema que el programa se ejecute en todos los minutos, en todas las horas, todos los días. Además, genera un archivo bat.log donde guarda la salida de texto del programa. Esto te servirá para estimar el rendimiento de la bateria cuando lo creas necesario. Cada tanto te conviene borrar el archivo bat.log

Por último, reiniciar el servicio de cron

sudo service cron restart

 

Listo, eso es todo. Es muy sencillo y ahora tendrás avisos sonoros cuando la batería se esté agotando y cuando esté cargada.

Te invito a crear tus propios wav y a compartirlos.

Nota: El script es totalmente básico. Se puede mejorar mucho. Lo dejo a tu imaginación.

Descarga de los wav que yo use:

beep.wav

beep2.wav

2 comments

  1. Nestor dice:

    no se olviden reiniciar el cron

    sudo service cron restart

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *