Barcelona (34) 93 263 33 54 | Madrid (34) 91 329 55 00 | Norte (34) 94 623 26 48

Cómo comunicar con un módem usando ModemManager

ModemManager es una herramienta de código abierto para Linux que se puede utilizar para comunicarse con dispositivos celulares para la configuración, la comprobación del estado, la activación de la conexión, etc. Es capaz de comunicarse a través de varios tipos de canales de control de dispositivos, como QMI/RMNET, MBIM, MODEM / comando AT, etc.

Con la creciente popularidad de Linux en Sistemas Embedded, y su uso cada vez más extendido por parte de clientes que desarrollan proyectos con modems celulares IoT, ModemManager se ha convertido en un componente clave para la gestión de conectividad de datos en estos sistemas.

En este post vamos a explicar los pasos para configurar y establecer una conexión de datos con módems de Telit. En concreto con el módulo Telit LE910C1-EUXThread X basado en chipset de Qualcomm.

Telit LE910C1-EUXThread X

En la web dedicada al ModemManager es posible acceder a  la última información, listas de correos de soporte, manuales, etc.

Requisitos necesarios antes de utilizar ModemManager

Para utilizar ModemManager es necesario asegurarse en primer lugar que en la versión del kernel de Linux, los drivers estén instalados y configurados correctamente. Afortunadamente Telit, ofrece una guía muy detallada sobre uso y configuración. Si estás interesado en usar un modem Telit con ModemManager en tu proyecto, te animamos a ponerte en contacto con Venco para obtener una copia de esta guía.

También hay que instalar ModemManager y sus dependencias. Es posible descargarse el código fuente de la página freedesktop.org con las instrucciones de compilación e instalación o bien instalarlo a través de un gestor de paquetes. Por ejemplo, para instalar Modem Manager en sistemas basados en Debian ejecutamos el comando:

apt-get install modemmanager

Uso de ModemManager para establecer una conexión de datos

 

Comprobar la versión de ModemManager

Ejecutamos el comando que muestra la versión de ModemManager que está instalada en el sistema:

mmcli- V

Este comando se ejecuta en un terminal y muestra información sobre la versión de ModemManager que está en uso, incluyendo la versión, la fecha de publicación y otros detalles relevantes. Esta información puede ser útil para determinar si estás ejecutando la versión más reciente de ModemManager y para verificar si existen actualizaciones disponibles.

Respuesta del terminal:

mmcli 1.18.6
Copyright (2011 – 2021) Aleksander Morgado
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

 

Buscar y escanear módems

El siguiente comando se ejecuta en un terminal y escanea el sistema en busca de modems que puedan ser controlados por ModemManager. Si se encuentran modems disponibles, el comando mostrará información detallada sobre cada uno de ellos, incluyendo el fabricante, el modelo, la dirección y otros detalles relevantes:

mmcli –scan-modems

Este comando es útil para verificar si ModemManager está detectando correctamente el modem Telit y para obtener información detallada sobre el modem y su configuración. Si el modem Telit no se detecta, es posible que sea necesario instalar o actualizar los controladores del modem o verificar la configuración de ModemManager.

Respuesta del terminal:

successfully requested to scan devices

 

Listar los modems disponibles controlados por ModemManager

Este comando muestra una lista de todos los módems que Modem Manager está controlando , incluyendo el identificador y otros detalles relevantes para cada modem:

mmcli –list-modems

Respuesta del terminal:

/org/freedesktop/ModemManager1/Modem/18 [Telit] LE910C1-EUX

 

Para obtener información detallada del modem, utilizamos la opción –modem con el identificador. En nuestro caso el id 18:

mmcli–modem=18

Respuesta del terminal:

———————————-

General  |                   path: /org/freedesktop/ModemManager1/Modem/18

|              device id: 6d094bc4c1b6a34015feadda827694b151ff5b08

———————————-

Hardware |           manufacturer: Telit

|                  model: LE910C1-EUX

|      firmware revision: 25.30.222  1  [Mar 08 2021 15:00:00]

|         carrier config: default

|           h/w revision: 1.10

|              supported: gsm-umts, lte

|                current: gsm-umts, lte

|           equipment id: 355788111744513

———————————-

System   |                 device: /sys/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1

|                drivers: qmi_wwan, option

|                 plugin: telit

|           primary port: cdc-wdm0

|                  ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (at),

|                         ttyUSB2 (at), wwan0 (net)

———————————-

Status   |                   lock: sim-pin2

|         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)

|                  state: disabled

|            power state: on

|         signal quality: 0% (cached)

———————————-

Modes    |              supported: allowed: 2g; preferred: none

|                         allowed: 3g; preferred: none

|                         allowed: 4g; preferred: none

|                         allowed: 2g, 3g; preferred: 3g

|                         allowed: 2g, 3g; preferred: 2g

|                         allowed: 2g, 4g; preferred: 4g

|                         allowed: 2g, 4g; preferred: 2g

|                         allowed: 3g, 4g; preferred: 4g

|                         allowed: 3g, 4g; preferred: 3g

|                         allowed: 2g, 3g, 4g; preferred: 4g

|                         allowed: 2g, 3g, 4g; preferred: 3g

|                         allowed: 2g, 3g, 4g; preferred: 2g

|                current: allowed: 2g, 3g, 4g; preferred: 4g

———————————-

Bands    |              supported: egsm, dcs, utran-1, utran-3, utran-8, eutran-1, eutran-3,

|                         eutran-7, eutran-8, eutran-20, eutran-28

|                current: egsm, dcs, utran-1, utran-3, utran-8, eutran-1, eutran-3,

|                         eutran-7, eutran-8, eutran-20, eutran-28

———————————-

IP       |              supported: ipv4, ipv6, ipv4v6

———————————-

3GPP     |                   imei: 355788111744513

|          enabled locks: fixed-dialing

———————————-

3GPP EPS |   ue mode of operation: csps-1

|     initial bearer apn: wlapn.com

| initial bearer ip type: ipv4

———————————-

SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/16

|         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/16 (active)

|                         slot 2: none

 

Habilitar el modem

Este comando se utiliza para habilitar un modem que previamente ha sido deshabilitado o para activar un modem que ha sido detectado pero aún no se ha habilitado. Una vez habilitado, el modem estará disponible para ser utilizado por aplicaciones y servicios que requieran una conexión a internet o para realizar llamadas y enviar SMS:

mmcli –modem=18 –enable

Respuesta del terminal:

successfullyenabled the modem

 

Establecer una conexión de datos

Activamos la conexión de datos con el comando –simple-connect. En este ejemplo, ModemManager vinculará la conexión de datos para nuestro APN con la interfaz qmi_wwan, típicamente llamada wwan0 (a menos que sea renombrada por la distribución de Linux o por el usuario). Hay que indicar el identificador del  modem, el APN  y el tipo de IP con el que puede funcionar (ipv4 / ipv6 ipv4v6):

mmcli -m 18 –simple-connect=’apn=iot.1nce.net,ip-type=ipv4v6′

Respuesta del terminal:

successfully connected the modem

 

Comprobamos que la conexión de datos se ha establecido (state=connected):

mmcli -m 18

Respuesta del terminal:

———————————-

General  |                   path: /org/freedesktop/ModemManager1/Modem/18

|              device id: 6d094bc4c1b6a34015feadda827694b151ff5b08

———————————-

Hardware |           manufacturer: Telit

|                  model: LE910C1-EUX

|      firmware revision: 25.30.222  1  [Mar 08 2021 15:00:00]

|         carrier config: default

|           h/w revision: 1.10

|              supported: gsm-umts, lte

|                current: gsm-umts, lte

|           equipment id: 355788111744513

———————————-

System   |                 device: /sys/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1

|                drivers: qmi_wwan, option

|                 plugin: telit

|           primary port: cdc-wdm0

|                  ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (at),

|                         ttyUSB2 (at), wwan0 (net)

———————————-

Status   |                   lock: sim-pin2

|         unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)

|                  state: connected

|            power state: on

|            access tech: umts

|         signal quality: 59% (recent)

———————————-

Modes    |              supported: allowed: 2g; preferred: none

|                         allowed: 3g; preferred: none

|                         allowed: 4g; preferred: none

|                         allowed: 2g, 3g; preferred: 3g

|                         allowed: 2g, 3g; preferred: 2g

|                         allowed: 2g, 4g; preferred: 4g

|                         allowed: 2g, 4g; preferred: 2g

|                         allowed: 3g, 4g; preferred: 4g

|                         allowed: 3g, 4g; preferred: 3g

|                         allowed: 2g, 3g, 4g; preferred: 4g

|                         allowed: 2g, 3g, 4g; preferred: 3g

|                         allowed: 2g, 3g, 4g; preferred: 2g

|                current: allowed: 2g, 3g, 4g; preferred: 4g

———————————-

Bands    |              supported: egsm, dcs, utran-1, utran-3, utran-8, eutran-1, eutran-3,

|                         eutran-7, eutran-8, eutran-20, eutran-28

|                current: egsm, dcs, utran-1, utran-3, utran-8, eutran-1, eutran-3,

|                         eutran-7, eutran-8, eutran-20, eutran-28

———————————-

IP       |              supported: ipv4, ipv6, ipv4v6

———————————-

3GPP     |                   imei: 355788111744513

|          enabled locks: fixed-dialing

|            operator id: 21401

|          operator name: vodafone ES

|           registration: home

———————————-

3GPP EPS |   ue mode of operation: csps-1

|     initial bearer apn: wlapn.com

| initial bearer ip type: ipv4

———————————-

SIM      |       primary sim path: /org/freedesktop/ModemManager1/SIM/16

|         sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/16 (active)

|                         slot 2: none

———————————-

Bearer   |                  paths: /org/freedesktop/ModemManager1/Bearer/17

 

Obtenemos información sobre la conexión datos, en este caso la conexión tiene el identificador 17:

mmcli –modem=18 –bearer=17

Respuesta del terminal:

————————————

General            |           path: /org/freedesktop/ModemManager1/Bearer/17

|           type: default

————————————

Status             |      connected: yes

|      suspended: no

|    multiplexed: no

|      interface: wwan0

|     ip timeout: 20

————————————

Properties         |            apn: iot.1nce.net

|        roaming: allowed

|        ip type: ipv4v6

————————————

IPv4 configuration |         method: static

|        address: 10.217.42.2

|         prefix: 30

|        gateway: 10.217.42.1

|            dns: 8.8.8.8, 8.8.4.4

|            mtu: 1430

————————————

Statistics         |       duration: 60

|       attempts: 1

| total-duration: 60

 

Levantamos la interfaz wwan0:

ip link set wwan0 up

Asignamos la IP que ha asignado el operador, en este caso 10.217.4.32:

ipaddr add 10.217.42.2/32 dev wwan0

Deshabilitamos ARP:

ip link set dev wwan0 arp off

Establecemos el valor de MTU, 1430:

ip link set dev wwan0 mtu 1430

Configuramos la ruta por defecto a la red celular del dispositivo:

ip route add default dev wwan0 metric 200

Configuramos los DNS:

# sh -c «echo ‘nameserver8.8.8.8>> /etc/resolv.conf»

Hacemos un ping para comprobar que la conexión de datos funciona correctamente:

Ping 8.8.8.8

Respuesta del terminal:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

64 bytes from 8.8.8.8: icmp_seq=1 ttl=110 time=473 ms

64 bytes from 8.8.8.8: icmp_seq=2 ttl=110 time=89.1 ms

64 bytes from 8.8.8.8: icmp_seq=3 ttl=110 time=89.2 ms

64 bytes from 8.8.8.8: icmp_seq=4 ttl=110 time=87.1 ms

64 bytes from 8.8.8.8: icmp_seq=5 ttl=110 time=88.1 ms

 

Salida de logs de ModemManager

Por defecto ModemManager escribe logs en syslog, donde se pueden establecer diferentes niveles. Cuando hay un problema es útil configurar el máximo nivel de detalle. Eso se puede hacer ejecutando el comando:

mmcli –set-logging=DEBUG

y ver la salida de syslog de la siguiente forma:

tail -F /var/log/sysog

En ocasiones es interesante enviar comandos AT a los módulos de Telit, esto es posible utilizando ModemManager en modo debug a través de mmcli. Para realizar esto hay que ejecutar:

ModemManager –debug

Una vez iniciado en modo debug enviar el comando AT:

Mmcli -m <ID> –command=<COMANDO AT>

Ejemplo:

mmcli -m 0  –command=AT#SWPKGV

 

Con esto finalizamos este artículo técnico dedicado a la configuración de un módem usando ModemManager.

Más artículos técnicos de Venco

Si te ha interesado esta nota de aplicación, en nuestro blog puedes encontrar varios artículos técnicos redactados por nuestros ingenieros de desarrollo:

 

Venco Electrónica es proveedor de soluciones para Electrónica Industrial en España y Portugal desde hace cuarenta años. Tenemos línea directa con los fabricantes que nos proporcionan información detallada y actualizada de todos sus productos.

Pregúntanos sin compromiso y nuestros especialistas te asesorarán con las mejores opciones para tu aplicación o proyecto.

Vías de contacto: