Enviar SMS desde la linea de comando

Como enviar mensajes de texto desde la terminal con el modem 3g ZTE MF636 en Fedora Linux? Como activar un plan prepago de tu modem3g desde la linea de comando?

Yo necesito enviar un mensaje para activar mi plan prepago de movistar (Nicaaragua), luego esperar la respuesta sobre las opciones de tiempo de conexión, contestar con un número de opción y esperar por la confirmación. Poner el SIM card en un telefono para hacer esto y luego ponerlo en el modem es tedioso. Peor aun sería cargar Windows con la suite de la compañía de celular para enviar el mensaje y luego regresar a linux. Cosa que a final no puedo hacer porque no tengo Windows en mi laptop.

Para mi lo ideal era usar una herramienta con interfase gráfica como gnome-phone-manager. En verdad me funcionó para enviar mensajes, luego hubo un conflicto de versión de GTK y ahora no logro que se conecte a un puerto serial, siempre busca un puerto bluetooth. En realidad gnome-phone-manager es una interfase gráfica para gnokii que es el verdadero programa que administra la comunicación con el modem 3g.

Así que lo primero es instalar gnokii y lo podemos hacer desde la terminal.

su -c «yum install gnokii»

Yo uso la sintaxis de fedora. Para usar sudo en fedora deben configurarlo. Y si usan otra distro deben ver el comando de instalación específico para su distro. Igual podemos buscar el paquete para su instalación desde la administración de software.

Lo siguiente es configurar gnokii. Para ellos creamos un archivo llamado .gnokiirc y lo ponemos en nuestra carpeta de usuario.

/home/mi_nombre/.gnokiirc

Donde mi_nombre es el nombre del usuario. El contenido del archivo es simple:

[global]
port=/dev/ttyUSB2
model=AT
connection=serial

Nuestro usuario no tiene permisos de acceso al puerto serial que hemos utilizado. Así que debemos incluir a nuestro usuario en el grupo de dialout.

Desde la linea de comando podemos usar el siguiente comando:

su -c «usermod -a -G dialout mi_nombre»

De nuevo donde mi_nombre es el nombre del usuario. El comando anterior debe ser igual para todas las distribuciones de linux. Otra alternativa es instalar el paquete system-config-users que es una interfase gráfica para administrar los usuarios con más detalles, como por ejemplo hacer un check en el grupo que queremos que nuestro usuario pertenezca. Esto lo encontramos como la aplicación de «usuarios y grupos». Desde los ajustes de sistema en Gnome Shell solo veremos unas opciones limitadas para administrar usuarios.

Ahora podemos conectar el modem y esperar que este listo. Esto a simple vista se puede verificar con la luz azul que parpadea en el modem ZTE MF636.

La otra alternativa es usar el comando dmesg en la terminal que nos brinda al final aproximadamente las siguientes lineas

[ 824.501063] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
[ 824.507774] usbcore: registered new interface driver option
[ 824.507783] option: v0.7.2:USB Driver for GSM modems
[ 829.753101] scsi 5:0:0:0: Direct-Access ZTE MMC Storage 2.31 PQ: 0 ANSI: 2
[ 829.758421] sd 5:0:0:0: Attached scsi generic sg1 type 0
[ 829.766896] sd 5:0:0:0: [sdb] Attached SCSI removable disk

A este punto podemos probar que todo esta bien con el siguiente comando:

gnokii – -identify

la respuesta deberia ser a como sigue:

GNOKII Version 0.6.31
IMEI : 352847029322631
Manufacturer : ZTE INCORPORATED
No flags section in the config file.
Model : MF636
Product name : MF636
Revision : BD_LATMOVP673M2V1.0

Yo debo enviar la palabra ACTIVAME al número 2266, el comando es a como sigue:

echo «activame» | gnokii – -sendsms 2266

La parte dificil es que el modem ZTE MF636 no es compatible con la opción de espera para capturar el mensaje. Asi que debemos consultar el contenido de memoria del modem con el siguiente comando:

gnokii – -showsmsfolderstatus

Lo que nos brinda el siguiente reporte

GNOKII Version 0.6.31
No. Name Id #Msg
========================================================
0 Internal memory ME 0
1 Combined ME and SIM phonebook MT 0
2 SIM card SM 7
3 SMS Status Reports SR 0

Podemos ver que los mensajes se almacenan en la SIM card y que esa memoria es SM. En este caso hay 7 mensajes, en linux eso significa mesnajes del 0 al 6. Si quiero ver los mensajes el comando será:

gnokii – -getsms SM 0 6

puedo consultar solo un mensaje, le doy la posición de dicho mensaje sin especificar inicio y fin, por ejemplo el último mensaje será:

gnokii – -getsms SM 6

lo que me da como resultado algo asi:

6. Inbox Message (Unread)
Date/time: 13/09/2013 21:50:23 -0600
Sender: 2266 Msg Center: +5026099948
Text:
Envia 1 para contratar 2hr de navegacion por CS15, 2 para contratar 12hrs por CS50, 3 para 30min por CS10, 4 para 24hrs por CS90 o 5 para 3 Dias por CS150

Ahora podría repetir los pasos y enviar la respuesta, por ejemplo opción número 1 con el siguiente comando:

echo «1» | gnokii – -sendsms 2266

Y solo me queda esperar la confirmación, que puedo consultar a como he mostrado anteriormente.

Algunas cosas adicionales con el manejo de los mensajes podría ser guardar los mensajes a un archivo de texto

gnokii – -getsms SM 0 6 -f archivo.txt

Donde archivo.txt es el nombre de archivo de su elección.

Tambien pueden borrar los mensajes almacenados en el SIM card. Supongamos que queremos respaldar a nuestra maquina los mensajes y luego borrarlos:

gnokii – -getsms SM 0 6 -f archivo.txt -d

Algo a tener en cuenta es que cuando se conectan a la internet por el modem3g, ya no podrán hacer uso de las opciones de envío y recepción de mensajes.

Espero que esto sea de utilidad para algunas personas con planes de prepago en modem 3g. Sin embargo yo solo tengo el modem que describo. Así que no puedo asegurar como funcionará con otros modem3g, sin embargo esto les podrá servir de guía.

Quiero agradecer a Spot quien me ayudo a encontrar muchos de los detalles de gnokii en particular la siguiente referencia: http://wiki.gnokii.org/index.php/SMS_options (la página esta en inglés)