Skip to content

Shrondi/udp-server-smartbridges

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UDP Server SmartBridges

Servidor UDP concurrente y no bloqueante para la recepción y gestión de los parámtros de configuración de sensores en el marco del proyecto SMART-BRIDGES.

Índice

Información del proyecto

Financiación

“SMART-BRIDGES – Monitorización inteligente del estado estructural de puentes ferroviarios de alta velocidad”
(Ref. PLEC2021-007798)

Proyecto financiado por:

  • Ministerio de Ciencia e Innovación (MCIN)
  • Agencia Estatal de Investigación (AEI)
  • Unión Europea a través de NextGenerationEU / Plan de Recuperación, Transformación y Resiliencia (PRTR)

Convocatoria de proyectos de I+D+I en Líneas Estratégicas 2021 (PLEC2021), procedimiento de concesión de ayudas a proyectos de I+D+i en colaboración público-privada, del Programa Estatal de I+D+i Orientada a los Retos de la Sociedad, en el marco del Plan Estatal de Investigación Científica y Técnica y de Innovación 2017-2020.
(BOE Núm. 98, de 24 de abril de 2021).

Licencia

Consulta el archivo LICENSE para más detalles.

Dependencias

  • CMake >= 3.10
  • GCC o Clang (soporte C99)
  • SQLite3 y su desarrollo (libsqlite3-dev en Debian/Ubuntu)
  • Python 3 (opcional, solo para el script de gestión db/databaseManager.py)

Compilación

Desde la raíz del proyecto ejecuta:

cmake -B build
cmake --build build

Esto generará el ejecutable en build/UDPServer.

Ejecución

Ejecuta el servidor UDP con:

./build/UDPServer

El servidor escuchará por defecto en el puerto 24243 (puedes modificarlo en config/udp_config.c).

Ubicación del archivo de la base de datos:
El archivo devices.db debe encontrarse en la ruta especificada en config/udp_config.c (por defecto, ~/database-sensors/devices.db).

  • Si usas ~, asegúrate de que corresponde al directorio home del usuario que ejecuta el servidor.
  • Si la ruta es absoluta, verifica que el archivo exista en esa ubicación y que el usuario del servidor tenga permisos de lectura y escritura.

Funcionamiento e información

El servidor espera recibir paquetes UDP de sensores, procesa la petición y responde con la configuración correspondiente.

  • El formato de los paquetes y la estructura de la respuesta están definidos en el código fuente (include/udp_handler.h, src/udp_handler.c).
  • Puedes consultar y modificar la lógica de gestión de sensores en src/db.c y la configuración global en config/udp_config.c.
  • La documentación técnica se genera automáticamente con Doxygen en la carpeta docs/html tras compilar.

Para más detalles sobre el protocolo o ejemplos de uso, consulta el código fuente y la documentación generada.

Formato de las tramas UDP

Request frame

OffsetTamañoCampoDescripción
031versionVersión de firmware (string, null-terminated)
322sensorIdID del sensor (uint16_t)
341statusCodeCódigo de estado (uint8_t)

Response frame

OffsetTamañoCampoDescripción
031firmwareVersionVersión de firmware (string, null-terminated)
321frequencyFrecuencia (uint8_t)
331scaleEscala (uint8_t)
341enableHabilitado (uint8_t)
354thresholdStdvUmbral (float)
398secsTimestamp (segundos, uint64_t)
478usecsTimestamp (microsegundos, uint64_t)

Base de datos

Esquema

A continuación se muestra el diagrama de la tabla sensors:

+-------------------+-------------------+----------+-------------------------------+
|      Campo        |      Tipo         | Clave    |        Descripción            |
+-------------------+-------------------+----------+-------------------------------+
| id                | INTEGER           | PK       | Identificador único           |
| name              | TEXT              |          | Nombre del sensor             |
| firmware_version  | TEXT              |          | Versión del firmware          |
| scale             | INTEGER           |          | Escala configurada            |
| frequency         | INTEGER           |          | Frecuencia de muestreo        |
| threshold_stdv    | REAL              |          | Umbral de desviación estándar |
| enable            | BOOLEAN (0 o 1)   |          | Habilitado (1) o no (0)       |
+-------------------+-------------------+----------+-------------------------------+

Creación

Si necesitas crear la base de datos devices.db desde cero, puedes hacerlo fácilmente usando SQLite3 junto a db/scheme-database.sql

cd db
sqlite3 devices.db < scheme-database.sql

Esto generará el archivo devices.db con la tabla sensors lista para ser utilizada por el servidor y las utilidades de gestión.

  • id: Identificador único del sensor.
  • name: Nombre del sensor.
  • firmware_version: Versión del firmware del sensor.
  • scale: Escala configurada para el sensor.
  • frequency: Frecuencia de muestreo/configuración.
  • threshold_stdv: Umbral de desviación estándar.
  • enable: Indica si el sensor está habilitado (1) o no (0).

Gestión de la base de datos

En la carpeta db/ se proporciona el script databaseManager.py para la gestión directa de la base de datos:

  • Insertar, borrar, listar y modificar sensores.
  • Habilitar/deshabilitar todos los sensores.
  • Cambiar la versión de firmware de todos los sensores.

Para usar el gestor desde terminal:

cd db
python3 databaseManager.py

Este repositorio corresponde a un módulo/parte del proyecto principal SMART-BRIDGES.

About

Módulo del proyecto SMART-BRIDGES

Resources

License

Stars

Watchers

Forks