wavecom wmod2a (parte ii de ii)

23 de mayo de 2010

Una vez tenemos las tools de Gammu funcionando es hora de montar nuestro gateway. El gateway tendrá un daemon que escuchará el módem y meterá los SMS en una BBDD. Para enviar utilizaremos el comando gammu tal como hemos visto en la primera parte del post.

Para facilitar las cosas utiizaremos una pagina Web escrita en PHP.

Instalamos Apache+MySQL+PHP:

# apt-get install apache2 php5 libapache2-mod-php5 
# apt-get install libapache2-mod-auth-mysql php5-mysql mysql-server mysql-client
# apt-get install libmysqlclient15-dev

Los mensajes SMS recibidos al módem SMS irán almacenados en una BBDD MySQL, para ello tendremos que crear un schema con las tablas necesarias para añadir esta info. Dentro de /usr/share/doc/gammu/examples/sql/mysql.sql.gz econtraremos un schema de tablas que podemos utilizar:
# cp /usr/share/doc/gammu/examples/sql/mysql.sql.gz /tmp
# gunzip /tmp/mysql.sql.gz
# mysqladmin -u root -p create sms
# mysql -u root -p sms < /tmp/mysql.sql

Ahora le decimos al Gammu que los mensajes recibidos los guarde en las tablas de MySQL. Para ello editamos la configuración y añadimos estos parámetros a los ya existentes:
# cat /etc/gammurc
...
[smsd]
#service = files
service = MYSQL
logfile = syslog
CheckSecurity = 0
debuglevel = 1
user = root
password = 12345
pc = localhost
database = sms
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

Nota: Podemos utilizar diferentes tipos de backends. En la configuración anterior se puede utilizar MySQL o directamente ficheros planos alojados en /var/spool/gammu.

Para facilitar la lectura de estas tablas MySQL, hay creada una interfaz PHP que nos ayuda a leer los mensajes recibidos:
# cd /var/www
# wget http://www.syednetworks.com/gammu-sms-gateway.zip
# unzip gammu-sms-gateway.zip

Ahora podemos acceder a esta interfaz desde http://127.0.0.1/gammu-sms-gateway/sms.php. Para que el script sms.php acceda a vuestro MySQL deberéis cambiar la password de acceso a la base de datos por la que tengáis puesta:

Para ello editar el sms.php y cambiamos esta linea:
mysql_connect("localhost", "root", "") or die(mysql_error());

Instalamos y arrancamos el daemon que esperará la llegada de los SMSs:
# apt-get install gammu-smsd
# gammu-smsd -c /etc/gammurc &

Si enviamos un SMS a nuestro módem GSM y vamos mirando el log podremos ir viendo como van entrando los mensajes y cómo se van actualizado las tablas:
# tail -f /var/log/syslog
gammu-smsd[5813]: gammu: 3 "OK"
gammu-smsd[5813]: gammu: RECEIVED frametype 0x00/length 0x1B/27
gammu-smsd[5813]: gammu: 41A|54T|2B+|43C|53S|51Q|0D |0D |0A |2B+|43C|53S|51Q|
   3A:|20 |311 AT+CSQ...+CSQ: 1
gammu-smsd[5813]: gammu: 377|2C,|300|0D |0A |0D |0A |4FO|4BK|0D |0A 
   7,0....OK..     
gammu-smsd[5813]: gammu: Signal quality info received
gammu-smsd[5813]: gammu: Parsing +CSQ: 17,0 with +CSQ: @i, @i
gammu-smsd[5813]: gammu: Parsed int 17
gammu-smsd[5813]: gammu: Parsed int 0
gammu-smsd[5813]: gammu: Leaving GSM_GetSignalQuality
gammu-smsd[5813]: Execute SQL: UPDATE `phones` SET `TimeOut`= (NOW() + 
   INTERVAL 10 SECOND)+0, `Battery`= 0, `Signal`= 51 WHERE `IMEI` = 
   '330122330387360'

Por ultimo queda la parte del envío de SMS. Para ello, desde la pagina sms.php encontraremos un link llamado "Send SMS message" que nos permitirá enviar un SMS desde un formulario Web. Este link llama al archivo send-sms.php. Si lo editamos podremos ver como lo único que realiza es una llamada al binario de gammu:
system( 'sudo /usr/bin/gammu --sendsms EMS ' . escapeshellarg( $destination ) . 
' -text ' . escapeshellarg( $message ) );

Es posible que el path de nuestro binario gammu no corresponda con el de la pagina. Tendremos que cambiar /usr/logal/bin/gammu por /usr/bin/gammu.
Notar que también he añadido la ejecución del comando bajo sudo. Esto es debido a que el usuario que hace la llamada a la función system() es www-data y este usuario no tiene permisos para ejecutar comandos como gammu.

Para que el sudo no pregunte password tenemos que editar el /etc/sudoers y añadir esto:
# cat /etc/sudoers
...
%sudo ALL=NOPASSWD: ALL

Es posible que no tengáis permisos para escribir sobre el fichero de sudoers. Hay que poner permisos de escritura y luego dejarlos como estaba.

Finalmente tenemos que decirle quienes son los usuarios que están dentro de sudoers. Para ello editamos el /etc/groups y modificamos el grupo sudo:
# cat /etc/group | grep sudo
sudo:x:27:usuario1,www-data


wavecom wmod2a (parte i de ii)

22 de mayo de 2010

Vamos a montar un gateway para enviar y recibir mensajes SMS. La idea es montar este servicio para poder utilizarlo en Nagios y así poder enviar alertas vía SMS.

En verdad se puede realizar con cualquier teléfono móvil, pero esta vez utilizaré un hardware dedicado y especifico para ello un módem GSM Wavecom modelo wmod2a-g900.

El módem se comunicará con el servidor vía interfaz serie, pero como ya no quedan servidores con puerto de serie utilizaré un conversor USB-to-serial. Por tanto lo primero es ver que se detecta correctamente el conversor:

# dmesg | grep USB
[   77.187320] USB Serial support registered for generic
[   77.187348] usbserial: USB Serial Driver core
[   77.196733] USB Serial support registered for pl2303
[   77.208730] usb 6-2: pl2303 converter now attached to ttyUSB0
[   77.208746] pl2303: Prolific PL2303 USB to serial adaptor driver

Ahora instalaremos el soft básico para acceder al módem. Como todo modem, podríamos acceder a el vía comandos AT, pero tendríamos que leernos la documentación del dispositivo. Utilizaremos las herramientas gratuitas de Gammu:
# apt-get install gammu

Encontraremos un archivo de configuración de ejemplo en /usr/share/doc/gammu/examples/config/gammurc.gz. Nosotros crearemos uno con estos parámetros:
# cat /etc/gammurc
[gammu]
port = /dev/ttyUSB0
connection = at19200
name = wavecom
logformat = textall
logfile = gammu.log
startinfo = yes
use_locking = yes
gammuloc = locfile

Cómo puede verse el dispositivo /dev/ttyUSB0 indica la interfaz donde está conectada el módem GSM.

Una vez encendido el módem veamos si las tools de Gammu son capaces de reconocer el modem. Yo recomiendo quitarle el PIN a la tarjeta SIM para evitar problemas. De esta forma cada ver que reiniciemos el módem este estará listo para enviar SMS:
# gammu -c /etc/gammurc identify
Manufacturer         : Wavecom
Model                : unknown (900P)
Firmware             : 320_G250.53 833584 092499 18:13
IMEI                 : 330142330387360
SIM IMSI             : 214071617085412

Enviemos ahora nuestro primer SMS a otro teléfono y veamos que efectivamente está funcionando:
# echo hola | gammu -c /etc/gammurc sendsms TEXT 6938888888
If you want break, press Ctrl+C...
Sending SMS 1/1....waiting for network answer..OK, message reference=115

Más información:
+ Wavecom AT Commands Guide