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:
- Cómo iniciar un proyecto en YOCTO con la ConnectCore 6UL de DIGI: Primeros Pasos
- Instalación de UBoot e Imagen de Linux en una SBC ARM
- SBC ARM: Cómo integrar las librerías de Qt en Buildroot
- Cómo empezar una Aplicación con AppZone de TELIT
- Desarrollo de aplicaciones en Docker en módulos ARM de DIGI
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:
-
-
- Venco: https://www.vencoel.com/contacto/
- Web: https://www.vencoel.com/
- Teléfono: (+34) 93 263 33 54
-