Enviar un SMS es muy sencillo, pero no quiero engañar a nadie: configurar el modem de forma que la Raspberry Pi lo reconozca puede dar mucha guerra, y ya lo he explicado en este otro post.
Antes de nada, también hay que aclarar que para poder mandar SMS desde la Raspberry Pi según el procedimiento que voy a contar necesitamos tener conectado a la Raspberry Pi un modem GSM (cualquier modem 3G USB actual) con una tarjeta SIM con su correspondiente contrato.
Mandar SMS
Lo primero, una vez que nuestra Raspberry Pi reconoce el modem como tal (ver, como he dicho antes, este otro post en el que lo explico), es instalarnos el programa Gammu:
sudo apt-get install gammu
Ejecuto dmesg | grep tty
, y me sale al final:
[ 3101.026510] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB0 [ 3101.047379] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB1 [ 3101.050728] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB2 [ 3101.054227] usb 1-1.4: GSM modem (1-port) converter now attached to ttyUSB3
Apunto el primer puerto (ttyUSB0), que será el puerto que introduciré en la configuración:
sudo gammu-config
No cambio ninguna cosa más que el puerto y listo. El asistente anterior lo que hace es generar el fichero /root/.gammurc
, que podremos modificar si queremos más adelante. En mi caso, he hecho pruebas y puedo enviar SMS desde ttyUSB0 y ttyUSB2, pero no del 1 y 3.
Ahora ejecuto el comando sudo gammu --identify
para ver que todo está bien, y obtengo:
Dispositivo : /dev/ttyUSB0 Fabricante : Huawei Modelo : E173 (E173) Firmware : 11.126.15.00.18 IMEI : 342341311668563 IMSI SIM : 134546457667592
(he alterado el IMEI y el IMSI SIM).
Así que puedo probar a enviar mi primer SMS:
echo "Hola mundo" | sudo gammu sendsms TEXT 650696969
¡Funciona! Tarda unos 9 segundos desde que se da al enter hasta que llega el SMS al móvil.
Mandar un fichero de texto, o varias líneas
También podemos enviar ficheros, siempre con la precaución de la longitud de los mismos.
Mandar SMS empleando Python
sudo apt-get install python-gammu
Recibir SMS
Instalo el programa gammu-smsd
:
sudo apt-get install gammu-smsd
Creo el fichero de configuración:
sudo nano /etc/gammu-smsdrc
Edito algunas partes:
port = /dev/ttyUSB0 connection = at
(No hace falta poner la velocidad at19200
o at152000
, basta con at
).
Hay muchas más opciones de configuración y qué hacer con los mensajes que llegan, bases de datos MySQL, etc. (ver el manual), pero a mí lo que me interesa es poder ejecutar un comando al recibir un determinao SMS.
Si queremos que se ejecute un comando, añadimos al final:
RunOnReceive = /home/pi/gammu/recibeSMS.sh
(apuntando a la ruta donde tengamos el bash que queremos que se ejecute al recibir el SMS, en mi caso en /home/pi/gammu/recibeSMS.sh
. Previamente hay que dar permisos de ejecución a ese fichero: chmod + x /home/pi/gammu/recibeSMS.sh
).
Y el fichero /home/pi/gammu/recibeSMS.sh
contiene lo que queremos que se ejecute. Por ejemplo:
#!/bin/sh from=$SMS_1_NUMBER echo "¡Hola, mundo!" | sudo gammu sendsms TEXT "$from"
O que haga algo determinado, en función del contenido del mensaje:
#!/bin/sh from=$SMS_1_NUMBER message=$SMS_1_TEXT reply="" if test "$message" = "Ping"; then reply="Pong!" else reply="Y U NO PLAY PING PONG?" fi echo "$reply" | sudo gammu sendsms TEXT "$from"
En esta página del manual se explican más acciones.
Para ejecutar el demonio y que esté a la escucha de SMS:
sudo gammu-smsd
(Podremos llamar a este demonio en el arranque, añadiéndolo al /etc/rc.local
).
Enviar MMS
First you need to create MMS data (SMIL). Then upload them somewhere
where phone can download it over GPRS
(http://somewehere.something/location in next example). Now you can
send MMS indicator message to phone which will then download the
message:
gammu —sendsms MMSINDICATOR +123456789 \
http://somewehere.something/location \
«Message from Gammu» \
«Gammu program»
MMSETTINGS settings can be used to send MMS settings from Gammu backup
format (you can generate it by gammu –backup).
Referencias