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
Dependencias
Instalar los siguientes paquetes:
apt install python3-gammu screenEstructura de directorios y copia del código
mkdir -p /opt/modem
mkdir -p /var/run/modemEl 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_offenlazamos 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_offañadimos el script a crontab para que se ejecute cada minuto
*/1 * * * * cd /opt/modem && ./modem.pyConfiguració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"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 =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.

