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


3 comentarios:

dflores dijo...

Muy Buenas las 2 entradas sobre wavecom, yo probe con un modem de esos USB para internet 3G y me funciono solo que si no tengo saldo no puedo enviar msj..solo recibir...Excelente entrada..

Jaime Fuentes dijo...

para el evitar problemas con el archivo /etc/sudoers, lo mejor es editarlo con visudo -f /etc/sudoers

Anónimo dijo...

no me funciona la puta madre te voy a violar hijo de puta