Linux con mando a distancia via SMS


Con este artículo veremos como podemos controlar a Linux -conectar módem, desconectar, un ping, etc.- mediante SMS, tan solo usando un móvil conectado a Linux y soportado por gnokii. Una buena manera de revivir un viejo Nokia 5110, usando su cable y unos scripts en Bash…

Para eso usaremos las herramientas de gnokii. Yo estoy usando la versión del CVS de hace meses, pero debería fácil adaptarlo a versiones más recientes.

Como siempre, explicaré como lo tengo montado yo, con unos scripts simples en Bash. Lo importante es la idea, después podéis adaptarlo/hacer crecer el sistema.
Se supone que tenemos un móvil, compatible con gnokii conectado al ordenador. Yo antes tenia tarifa “plana” a partir de las 3 de la tarde, así que lo dejaba desconectado y a media mañana si necesitaba alguna cosa de mi ordenador le enviaba un SMS para que conectase, y seguidamente él me contestaba con la IP. También le puedo decir de manera remota que desconecte, o sencillamente un “ping” para ver que todo está en orden. Evidentemente él nos contestará “pong”, “de acuerdo Sr.” o algun SMS para confirmar la recepción.
Lo hacemos todo mediante SMS de móvil a móvil, sin pasar por servicios de operadoras de envio de e-mails o servicios gratuitos de las operadoras ya que esos pueden tardar/no llegar/etc. más fácilmente que haciendolo directamente nosotros con el móvil.

Para saber que gnokii nos lo ha reconocido podemos hacer:

gnokii –monitor

Y nos saldrá algo así:

GNOKII Version 0.5.0pre
Entering monitor mode…
RFLevel: 4
Battery: 4
Power Source: AC/DC
SIM: Used 10, Free 190
FD: Used 0, Free 20
SMS Messages: Unread 0, Number 0
Network: Airtel GSM 900-Spain (Spain), LAC: 697a, CellID: 6421
CALL0: IDLE
CALL1: IDLE

También deberíamos ver si podemos enviar SMS sin problemas:

echo “hola bon dia” | gnokii –sendsms $NUM_TEL

Si no nos funciona bien, es posible que tengamos que modificar el puerto serie o bien el modelo de teléfono en /etc/gnokiirc
En el paquete de utilidades de gnokii, hay una utilidad que se llama smsd. Ese programa actúa en modo “daemon” y hace dos cosas:

  • Se queda monitoreando un directorio y espera que aparezca un fichero, con un número de teléfono a la primera línea y un texto a la segunda. Cuando aparece, lo envia y elimina el fichero.
  • También, va mirando si llega un SMS al móvil. Cuando llega uno, le pasa como argumento el número origen y por la entrada estándard el texto.

Llamámos a smsd de esa forma:

smsd -m file -c /var/tmp/smsd/ -u /root/action3

Eso es, trabajaremos mediante ficheros (puede hacerlo también mediante MySql o postgresql). El directorio que monitorea es /var/tmp/smsd. Cuando llega un SMS nuevo ejecuta /root/action3 (¡Ojo! Por seguridad no debería ejecutarse como root todo eso).

Pasemos a ver el script action3 el cual es:

#!/bin/bash
#recordad de poner el permiso de ejecución a este fichero

PHONE=”+346xyabcdef”
#aquí ponemos el único teléfono válido al que le haremos caso

read ENTRADA
#leemos de la entrada estándard el texto que nos dejan

if [ “$1” = “$PHONE” ]
then
#el teléfono ha sido válido

case “$ENTRADA” in
#comprobamos la orden que nos han enviado
Interon)
echo “$(date): Correcte. -$ENTRADA-” >> /var/log/sms
#lo guardamos a un log

pon autowanadoo
#y conectamos a Internet
;;

Interoff)
echo “$(date): Correcte. -$ENTRADA-” >> /var/log/sms
#lo guardamos a un log

echo “$PHONE” > /var/tmp/smsd/enviar.$$
echo “Ordre rebuda. Ara desconecto. Que vagi bee” >> /var/tmp/smsd/enviar.$$
#y formamos el fichero con el formato ya visto para
#que smsd lo vea y nos envie que hemos desconectado
poff
;;
ping)
echo “$(date): Correcte. -$ENTRADA-” >> /var/log/sms
#haemos el log…

echo “$PHONE” > /var/tmp/smsd/enviar.$$
echo “pong” >> /var/tmp/smsd/enviar.$$
#y enviamos “pong”
;;
*)
echo “$(date): $1. comanda erronia: -$ENTRADA- ” >> /var/log/sms
#ha llegado un comando que no es ninguno de los anteriores
;;
esac
else
#Teléfono inválido! lo guardamos a un log…
echo “$(date): ERROR Tlf invalid $1:$ENTRADA” >> /var/log/sms
fi

Creo que está todo claro con los comentarios del código fuente. Lo que hace es ejecutar las órdenes, verificando que el origen sea el que hemos puesto. Y guardamos un log de nuestras acciones.

Un detalle, cuando hagamos desde la consola “pon wanadoo” no queremos que nos mande el SMS con la IP. En cambio, cuando el script ejecuta “pon autowanadoo” queremos que sí que envie la IP. Para conseguir eso, en /etc/ppp/peers/autowanadoo ponemos una línea que ponga: “linkname auto”. Entonces, en /etc/ppp/ip-up.d/ hacemos un fichero llamado sms (y con permisos de ejecución), que siempre se ejecutará (nos conectemos con wanadoo o autowanadoo) y tendrá este contenido:

#!/bin/bash
if [ “$LINKNAME” = “auto” ]
then
echo “6xyabcdef” > /var/tmp/smsd/enviar.$$
echo “Hola Carles. Tinc la IP: $IPLOCAL . Sort.” >> /var/tmp/smsd/enviar.$$
fi

Es decir, comprobamos que el LINKNAME sea auto, y si lo es enviamos el SMS. Si no lo es, no hacemos nada.
Y eso es todo. Podemos añadir más potencia al script (que nos puedan enviar comandos más completos) pero para lo que necesitaba ya me bastaba con esto visto aqui.
Añadir, que aparte de gnokii hay otro software, llamado gammu que depende de qué operaciones tengamos que hacer con el móvil nos puede ser más útil (p. ej. para hacer backups, gnokii me dió algun problema y gammu no).
PD: si queremos hacer lo mismo pero usando el servicio de e-mail de las operadores, en Bulma también tenemos un fantástico artículo. Gracias Victor por escribirlo (he intentado no pisar el título, primero habia puesto como el suyo).

Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=1702 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.