Usando Linux para avisarnos de cortes de luz en casa

Recientemente mi “servidor”, en realidad un simple PC con un GB de memoria y Ubuntu, dijo basta, después de 5 años encendido día y noche. Como tenía por ahí, arrumbado, un Aspire One al que mis hijas, en un momento de descuido, pusieron a caldo pantalla y teclado, decidí darle alguna utilidad y lo he transformado en mi nuevo “servidor”. Ahora sólo tengo 512 MB de RAM, pero la verdad es que va muy bien con Mint Debian XFCE. El hecho de usar una distro de desktop en vez de una para server se debe a que, de vez en cuando, convierto alguna peli de un formato a otro o la paso a un dvd en un .iso, para que la lea correctamente mi reproductor multimedia con conexión de red, y me resulta más cómodo de este modo. El acceso lo realizo con NX o con ssh. Si a alguien le interesa algo más de este tema, lo comentamos.

Se me ocurrió aprovechar el hecho de que sea un portátil para que me avise, por correo electrónico, cuando se produzca un corte eléctrico. Para ello, he hecho un sencillo script que simplemente comprueba si la batería se pone en descarga, señal inequívoca de que se ha ido la luz, mediante el comando ACPI. Hay que decir que, lógicamente, hace falta un pequeño SAI (el mío lo compré en un hipermercado por unos 40 €) para el router. Anteriormente, este SAI daba servicio también al “servidor”, pero como el nuevo tiene “SAI” incorporado 😀

Este es el script….

—————————————————-

#

# power-supervisor bash script

#

# Juanjo Domínguez 2012

#

# Script para vigilar el suministro eléctrico basado en testeo de batería en descarga con ACPI

#

# Adaptar los PATH y cuentas de correo para su correcto funcionamiento

#

#

PATH=/usr/local/bin:/usr/bin:/bin

/bin/echo “0” > /mnt/notifica

while true

do

resultado=`/usr/bin/acpi|grep “Discharging”`

if [ $? -ne 1 ]

then

notifica=`cat /mnt/notifica`

if [ $notifica = 0 ]

then

/bin/echo “Subject: CORTE SUMINISTRO ELECTRICO” | /usr/sbin/sendmail -s direccion_destino@somosllibres.org

#echo “CORTE SUMINISTRO ELECTRICO”

/bin/echo “1” > /mnt/notifica

fi

else

notifica=`/bin/cat /mnt/notifica`

if [ $notifica = 1 ]

then

#echo “SUMINISTRO ELECTRICO RESTABLECIDO”

/bin/echo “Subject: SUMINISTRO ELECTRICO RESTABLECIDO” | /usr/sbin/sendmail -s direccion_destino@somosllibres.org

/bin/echo “0” > /mnt/notifica

fi

fi

sleep 60

done

—————————————————-

Para enviar los correos he usado ssmtp (en el script aparece sendmail pero, en realidad es sólo un link a ssmtp) que se puede configurar siguiendo este post.

Hay que tener en cuenta que tendréis que poner las direcciones de correo correspondientes y modificar los caminos para que se adapte a vuestra instalación. Comprobad también la salida del comando acpi en vuestro equipo. Los que he visto, hasta ahora, ponen la palabra “Discharging” cuando empiezan a tirar de la batería, pero nunca se sabe 😉

Habría que añadirlo al inicio del sistema. Por ejemplo, en /etc/rc.local.

El funcionamiento consiste en enviar un correo cuando se va la luz y otro cuando se restablece el servicio. El tiempo de comprobación es de 1 minuto, que creo que es suficiente.

Lo pongo aquí por si a alguien más le resulta útil.

edito para decir que he puesto el fichero en Dropbox para evitar los rollos estos de las comillas.

11 comentarios en “Usando Linux para avisarnos de cortes de luz en casa

  1. Muy útil… si fuese capaz de hacer que me funcione 😦

    Veamos, no soy ningún experto (ni mucho menos, sólo llevo un par de años en linux y me suelo manejar copiando y pegando) pero creo que he ido siguiendo todos los pasos:
    – he instalado ssmtp
    – acpi (que pensé que era una de esas cosas que estarían en ubuntu y resultó que no)
    – he modificado mi cuenta tanto en tu script como en ssmtp
    – y aqui creo que viene el problema, no he toqueteado nada en los PATH, simplemente porque no tenía ni idea de qué debía hacer y la terminal no me quiere dar pistas: ejecuto el script (como administrador porque si no me advierte que se me deniega el permiso) y la terminal se queda en negro con el cursor parpadeando :,(
    No sé supongo que será simplemente indicar el camino de mi máquina para que el script sepa dónde buscar, y me imagino que para los que sabéis de informática será fácil, pero mucho me temo que no es mi caso.

    Gracias de antemano (aunque sólo sea por haberte parado a leerme) y a ver si me puedes echar un cable.

    Por cierto, mi distribución (ahora mismo) es ubuntu 12.04 Precise 64b (y reconozco que volví a ubuntu porque es dónde siempre acabo encontrando cómo hacer las cosas)

    Me gusta

    • Hola Alberto.

      Lo primero ¿has tenido la precaución de cambiar las comillas que quedan al copiar/pegar? Muchos blogs tienen la mala costumbre de cambiarte las comillas “normales” por unas muy bonitas pero que en los scripts no van. Me refiero a que compruebes que las comillas dobles que tienes en el script son las normales y no las que tienen dos caracteres distintos: uno para abrir comillas y otro para cerrar. El motivo del post era más presentar la idea que otra cosa, si no hubiera puesto un enlace para descargar el script y evitar este problema, pero como es un script bastante sencillo pensé que no era necesario.

      Comprobado esto, y para hacer debug del tema, deberías comprobar:

      1.- Salida del comando acpi en tu equipo. Ten en cuenta que lo que se busca es la cadena “Discharging”. Si en tu equipo, al desconectar la batería, la salida es distinta, debes adaptar la búsqueda en el script para que coincida.

      2.- Cambia los comandos de envío de correo (/bin/echo “Subject: CORTE SUMINISTRO ELECTRICO” | /bin/cat – /mnt/notifica | /usr/sbin/sendmail -s direccion_destino@somoslibres.org) por algo que te muestre salida por pantalla como: echo “CORTE DE SUMINISTRO ELÉCTRCO” (ojo con las comillas de nuevo).

      3.- Si lo anterior ves que funciona, prueba el envío de correo desde la línea de comando o desde un script más sencillo que sólo contenga el comando para dicho envío de correo (el del punto anterior).

      4.- Después de hacer sudo su, para acceder a root, prueba a lanzar el script añadiendo sh -x nombre_script para tener acceso a la salida de debug del script durante su ejecución.

      Espero que funcione!

      Saludos y a seguir usando software libre!

      Me gusta

      • Ante todo muchísimas gracias por responder (y tan rápido) y enhorabuena por el blog (muchas veces no sé a quién leo porque te tengo metido en google reader, pero ahora que he ojeado el blog veo que no es la primera vez que trasteo con algo que posteas)

        Como te decía en mi comentario anterior soy un “copia-pega” de primera, lo que demuestra que el software libre es incluso más sencillo que windows, una vez pasas tu curva de aprendizaje claro está.

        Todo funciona de primera con el script (al principio pensé que no porque tardó bastante en enviarme el mail, pero sería problema de mi conexión).

        Por último sólo quería decirte para qué me vendrá bien este script, últimamente y de forma totalmente aleatoria, me salta el diferencial y es un engorro cuando me voy de vacaciones porque tengo que andar molestando a la familia para que se pase a revisar si tengo o no luz (más que nada por el frigorífico) y de esta manera no tendré que molestar a nadie, sólo si ya sé que se ha ido la luz.

        De nuevo GRACIAS y a seguir con un trabajo bien hecho!!!

        Me gusta

      • Pues nada, me alegro….

        Tus motivos para usarlo, los mismos los mismos que los de un servidor… 😉 Además ahora, con las vacaciones cerca…

        Un saludo

        Me gusta

    • Hola de nuevo Alberto.

      He quitado alguna cosa que no era estrictamente necesaria y que veo que da problemas con Ubuntu (esto sólo estaba probado en LMDE). He puesto el fichero (con un link) para evitar problemas con la edición de texto. Sólo hay que cambiar la dirección de destino.

      Saludos

      Me gusta

  2. Abusando un poco de tu amabilidad y velocidad de respuesta…
    En el post comentas la posibilidad de añadirlo al inicio del sistema, ¿cómo haría eso?
    ¿sería algo como sudo gedit /etc/rc.local y ahí (no sé exactamente dónde) añadir la orden sudo powersupervisor.sh? ¿o es algo más elaborado? la verdad es que probaría, pero tratándose de algo del inicio me da la impresión de que puedo romper algo y no poder iniciar…

    Lo siento si la pregunta es muy tonta, pero la verdad es que si me puedo despreocupar de lanzar el script y saber que está funcionando automáticamente sería genial.

    Como de costumbre gracias de antemano!

    Me gusta

    • Lo de la velocidad de respuesta no tiene mérito ya que me paso la mayor parte del tiempo delante de una pantalla 🙂

      Sí, es algo así. Veo que ya vas controlando el asunto 😉

      Copia el script a /usr/bin con sudo cp nombrescript /usr/bin

      Cambia los permisos con

      sudo chmod 700 /usr/bin/nombrescript
      sudo chown root /usr/bin/nombrescript
      sudo chgrp root /usr/bin/nombrescript

      Edita el fichero como tù mismo has dicho y aÑade /usr/bin/nombrescript antes de la línea que pone exit 0 y ya lo tienes…

      Saludos y espero que no te mande muchos mensajes… Serà buena señal… 😉

      Me gusta

  3. Pingback: Montando un servidor DLNA y un gestor de descargas con un portátil reciclado y Linux. | La Píldora Roja

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s