/
Control conexión módem 3G/4G vía SMS
Search
Try Notion
Control conexión módem 3G/4G vía SMS
Fecha publicación
2022/01/28
#
31
Dificultad
Avanzado
3 more properties
Descripción
Mediante el envió de SMS al módem con comandos de conexión y desconexión del módem controlamos la conexión a Internet.
Esta funcionalidad es especialmente útil cuando los clientes no nos permiten tener el equipo conectado a Internet pero nos interesa tener una puerta entre abierta para situaciones de emergencia.
Detalles de funcionamiento
Solo se mantiene el último SMS el resto se borran.
El contenido del SMS se guarda en /var/run/modem, contenido siempre en minúsculas.
Para controlar el módem desde la línea de comandos se usan dos scripts, el de
conexión: modem_on
desconexión: modem_off
Cada vez que se procesa un nuevo SMS este sobrecarga el contenido del fichero /var/run/modem.
Cuando el módem esta conectado a la red, no es capaz de acceder a los SMS.
Así pues, cuando estemos conectado la mejor forma de desconectar el módem es usando el script de desconexión: modem_off
Para conectar la conexión se puede hacer ejecutando el script modem_on
Si no tenemos acceso a la máquina, debemos mandar un SMS al número de teléfono que tiene la SIM con el contenido: on
Cada minuto se ejecuta el script de modem.py a través del crontab
Este script tiene varias funciones
modem.py - se encarga de recibir los SMS, procesarlos y actualizar el contenido de /var/run/modem; borrando los mensajes después de haberlos procesado.
modem.py - se encarga de lanzar la conexión a Internet usando wvdial, también de desconectar la conexión matando el proceso.
modem.py - vigila que la conexión este activa comprobando los procesos de sistema y haciendo ping a una determinada IP de Internet para asegurar que el enlace esta vivo. En caso de problema de conexión mata los procesos y los vuelve a lanzar.
modem.py - se ejecuta cada minuto a través de crontab.
Instalación del código
⚠️
El módem debe estar configurado tal y como se detalla en el artículo: Conexión permanente a Internet con módem 3G/4G
Dependencias
Instalar los siguientes paquetes:
apt install python3-gammu screen
YAML
Estructura de directorios y copia del código
mkdir -p /opt/modem mkdir -p /var/run/modem
YAML
El código que usaremos para implementar la lógica esta en el repostiorio:
y para desplegarlo debemos:
cd /opt/modem git clone https://github.com/i40sys/modem-control-gammu-sms.git . chmod 755 modem.py modem_on modem_off
YAML
enlazamos ejecutables en los directorios correspondientes:
ln -s /opt/modem/modem_on /usr/local/bin/modem_on ln -s /opt/modem/modem_off /usr/local/bin/modem_off
YAML
añadimos el script a crontab para que se ejecute cada minuto
*/1 * * * * cd /opt/modem && ./modem.py
YAML
Configuración
Hay que configurar dos ficheros.
El primero, es propiamente el modem.py que en su primeras líneas define ciertas posibilidades de configuración. Exactamente son las siguientes líneas:
# Interface serie para conectar el módem a Internet MODEM_DEVICE = "/dev/modem0" # Comportamiento por defecto del módem en caso de no existir, o no tener contenido válido, el fichero /var/run/modem DESIRED_DEFAULT = "on" # Fichero donde hay el estado deseado del módem MODEM_FILE = "/var/run/modem" # IP de Internet que usamos para saber que la conexión funciona bien, por defecto, IP del DNS de Google. PING_IP = "8.8.8.8"
YAML
El otro fichero de configuración es el de gammu que se encuentra en /opt/modem/gammurc, este fichero en sus líneas de cabeza se describen los parámetros de configuración. Concretamente estamos configurando la interface serie a través de la cual podemos acceder a los SMS del módem.
# Port : in Windows/DOS: "com*:", # (instead of "*" please put "1", "2", etc.) # in other (Linux/Unix) "/dev/ttyS%" # or "/dev/ircomm%" ("irda" connection) # (instead of "%" please put "0", "1", "2", etc.) # Model : use only, when Gammu doesn't recognize your phone model. # Put it here. Example values: "6110", "6150", "6210", "8210" # Connection : type of connection. Use "fbus" or "mbus" or "dlr3" or # "irda" (Infrared over sockets) or "infrared" (DirectIR) # or "at19200" (AT commands on 19200, 8 bits, None parity, # 1 stop bit, no flow control) or "at115200" (AT commands on # 115200, 8 bits, None parity, 1 stop bit, no flow control) # or "atblue" (AT over BlueTooth) or "dlr3blue" (FBUS # over BlueTooth) # SynchronizeTime: if you want to set time from computer to phone during # starting connection. Do not rather use this option when want # to reset phone during connection (in some phones need to # set time again after restart) # Logfile : Use, when want to have logfile from communication. # Logformat : What debug info and format should be used: # "nothing" - no debug level, "text" - transmission dump in # text format, "textall" - all possible info in text format, # "errors" - errors in text format, "binary" - transmission # dump in binary format # Use_Locking : under Unix/Linux use "yes", if want to lock used device # to prevent using it by other applications # GammuLoc : name of localisation file [gammu] port = /dev/modem2 model = connection = at19200 synchronizetime = yes logfile = logformat = nothing use_locking = gammuloc =
YAML
Utilidad reset.sh que hay en el repositorio desplegado
Este script nos permite simular la conexión y desconexión físca del módem al puerto USB cuando estamos en remoto.