• Publicidad

Comunicación con módem 3G por comandos AT

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Comunicación con módem 3G por comandos AT

Notapor adrolmar » 2009-09-04 04:37 @234

Buenas, perleros.

Necesito comunicarme con un módem GSM ubicado en el puerto USB (/dev/ttyUSB0), de manera que le haga llegar comandos AT y pueda obtener la respuesta, para en función de ésta hacer otras tantas cosas (como por ejemplo comprobar la calidad de señal, modelo de módem, etc).

He leído que mediante minicom se puede, pero lo que busco es hacerlo sin instalar nada, únicamente mediante herramientas propias de un sistema UNIX, puesto que dichos comandos los ejecutaré desde un CGI en Perl.

He probado a poner un cat en modo demonio que escribe a fichero:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
# cat /dev/ttyUSB0 > salida &
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

para luego mandar comando AT al módem con
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
# echo 'AT+CSQ'> /dev/ttyUSB0
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

luego leo el fichero
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
# cat salida
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y me muestra "+CSQ: 15,99", pero con otros comandos no devuelve lo que debería.

¿Alguien sabe alguna manera de hacer esto con comandos de una manera más eficiente? (para luego ejecutarlos desde Perl) ¿O incluso directamente con algún módulo Perl?

GRACIAS desde ya
adrolmar
 

Publicidad

Re: Comunicación con módem 3G por comandos AT

Notapor explorer » 2009-09-04 07:18 @346

¿Qué comandos son los que no te responde?

Ten en cuenta que no todos los teléfonos soportan todos los comandos. En un proyecto reciente, usamos como interfaz de conexión un programa hecho por la empresa de telefonía, que se comunicaba directamente con el teléfono a través de un cable. El problema estaba en que no valía cualquier teléfono. Debía ser de una marca y un modelo determinado. En la web de la empresa tenían puesto un documento de seis páginas con la lista de teléfonos compatibles con la aplicación.

Parece ser que no todos los teléfonos soportan el llamado juego de comandos AT Extendidos.

En CPAN hay unos cuántos módulos, tanto para comunicarte vía USB como para mandar comandos AT al teléfono GSM.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comunicación con módem 3G por comandos AT

Notapor adrolmar » 2009-09-04 17:14 @759

¡¡Fenomenal!

Gracias una vez más...

El caso es que pensaba en recuperar información tal como el modelo del módem, el IMEI y la calidad de señal (que si funciona aunque no lo consigo de una manera ortodoxa, digamos).

Mañana miro los módulos CPAN a ver qué tal...

Ya digo algo con las novedades.

Edito:
el problema es que en la maquina que ejecutara el script no puedo instalar modulos y ninguno de esos modulos vienen por defecto en la instalacion de perl de la maquina.
lastima, porque el modulo gsm tenia buena pinta.. asi, tendre que buscar la manera de hacerlo sin modulos, unicamente con comandos de terminal (de momento solo consigo la calidad de señal, con "echo 'AT+CSQ' > /dev/ttyUSB0", y si necesita PIN, con "echo 'AT+CPIN?' > /dev/ttyUSB0").
Haciendo un lsusb en la terminal me dice: Sierra Wireless Inc.Quiza, como dice explorer, tenga que buscar comandos AT soportados por este modelo de modem.

Si a alguien se le ocurre algo.. bienvenido sea.

Gracias
adrolmar
 

Re: Comunicación con módem 3G por comandos AT

Notapor adrolmar » 2009-09-09 09:49 @450

Hola de nuevo...

Por fin me decidí a probar el módulo Device::Gsm de Perl para enviar comandos AT al módem GSM... el resultado no es del todo el esperado:

si coloco esto: my $imei = $gsm->imei(); al imprimir la variable $imei únicamente me saca 'OK', que es la última línea que suele sacar el mismo comando pero usando minicom.

Mi pregunta es si alguien sabe a qué se debe esto, qué puede estar fallando, pues el código my $calidad = $gsm->signal_quality(); si que me devuelve la calidad de la señal en dB, pero otros comandos (básicamente todos) sólo devuelven la linea de 'OK' ¡omitiendo precisamente la información que necesito que justo viene antes!

Quizá el problemático sea mi módem...

Desde ya un millón de gracias.
Última edición por explorer el 2009-09-09 09:54 @454, editado 1 vez en total
Razón: Ortografía
adrolmar
 

Re: Comunicación con módem 3G por comandos AT

Notapor explorer » 2009-09-09 10:09 @465

El código lo usas bien. EL problema puede estar en los módulos.

Dado que tienes acceso a todo el código, yo pondría print() en lugares estratégicos de Device::Gsm y, sobre todo, Device::Modem, para saber exactamente qué es lo que reciben y cómo realizan el filtrado.

Incluso hasta podrías usar el depurador integrador de Perl para ir paso a paso, para ir viendo qué es lo que hace y dónde falla.

Y una vez descubierto el fallo, informar al autor de los módulos.

Otra razón puede ser, claro, que tu teléfono no soporte ese comando y responda solo con un 'Ok' por cortesía al recibir un comando 'AT'. :)

P.D.: Acabo de darme cuenta de que el módulo tiene un método que se llama test_command(), para saber si cierto comando está soportado por el teléfono o no. Y además puedes usar también el sistema de log para saber qué va haciendo a cada paso.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comunicación con módem 3G por comandos AT

Notapor adrolmar » 2009-09-09 12:33 @564

Aquí de nuevo..

El test_command() lo probé al principio para ver qué ocurría... pero me dice que los comandos que pruebo son soportados ¬¬.

Lo de imprimir la variable con lo devuelto por el módem también... y según parece el módem no devuelve más que 'OK'.

He leído sobre usar sysopen() y sysread() para abrir el puerto como un fichero, pero mirando la ayuda de perldoc.perl.org no me queda nada claro su uso...

En fin, seguiré buscando.

Gracias
adrolmar
 

Re: Comunicación con módem 3G por comandos AT

Notapor explorer » 2009-09-09 12:42 @570

No me has entendido... te digo que localices los códigos de los módulos instalados en tu ordenador, ábrelos y edítalos poniendo print() en mitad de las funciones y métodos que estás usando.

Otro método muy bueno es ejecutar el código paso a paso, con el depurador integrado (perl -d).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comunicación con módem 3G por comandos AT

Notapor adrolmar » 2009-09-11 05:27 @269

Hola,
finalmente se consiguió hacer un log con la respuesta del módem a los comandos AT mediante la herramienta 'chat'. Luego ya con Perl trato el fichero y extraigo la información.

¡Gracias explorer!
adrolmar
 

Re: Comunicación con módem 3G por comandos AT

Notapor explorer » 2009-09-11 06:03 @294

¡¡¡No te olvides de mandar marca, modelo, problema y solución al autor del módulo Device::Gsm!!!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comunicación con módem 3G por comandos AT

Notapor adrolmar » 2009-09-11 07:50 @368

ok!

Así lo haré; este módem es bastante corriente; es extraño que a nadie le haya fallado antes...

Gracias una vez más.
adrolmar
 


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron