Ir al contenido

← Todas las funcionalidades

Monitorización geotécnica de taludServidor (Node-RED)FTPComunicación

Entrega de datos de sensores a una plataforma oficial por FTP

Muchas plataformas oficiales de auscultación siguen ingiriendo datos a la manera clásica: un fichero CSV depositado en un servidor FTP a intervalos fijos. Este ejemplo de subida de datos por FTP muestra el script Python que ejecutamos en un despliegue real de monitorización de talud: Node-RED agrega las lecturas de cuatro estaciones ESP32 PLC 14 Ethernet en un fichero JSON, y el script las convierte en un fichero .est con marca de tiempo y 169 canales y lo envía con ftplib en cada intervalo de medida.

Un formato de fichero estricto, generado con seguridad

La plataforma espera una línea CSV por entrega — id de registro, fecha, hora y un número fijo de columnas de canal. El script itera de canal_001 a canal_169 y escribe una columna vacía para cualquier canal sin datos, de modo que la caída de un sensor nunca desplaza las columnas de los que sí reportaron. Los nombres de fichero incorporan la marca de tiempo completa, lo que hace cada entrega única y trazable.

Doce líneas de ftplib

La librería estándar de Python cubre toda la transferencia: FTP(host), login, cwd y storbinary dentro de un try/finally que garantiza el quit(). Las credenciales son placeholders (FTP_USER, FTP_PASS) que en producción se cargan desde variables de entorno — nunca las dejes hardcodeadas en un script que vive en un repositorio.

Los fallos dejan evidencia

Si la subida falla, el fichero .est se queda en el directorio de salida para reintento manual y el script termina con código distinto de cero, que el nodo exec de Node-RED captura para disparar una alerta por email. La plataforma también detecta el intervalo ausente en su lado, así que un hueco silencioso es imposible.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el Servidor (Node-RED) — cópialo libremente:

def read_readings(path):
    """Loads the JSON with the latest readings aggregated by Node-RED.

    Expected format: {"channel_001": 12.34, "channel_002": -0.07, ...}
    """
    try:
        with open(path) as f:
            return json.load(f)
    except (OSError, ValueError) as e:
        print(f"ERROR reading readings: {e}")
        return {}

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

¿Por qué FTP en lugar de una API REST?

Porque la interfaz la define la plataforma receptora, y en monitorización geotécnica el depósito de ficheros por FTP sigue siendo el estándar. Es un patrón con décadas de uso, amigable con los firewalls y trivial de auditar desde el propio listado de ficheros.

¿De dónde salen los datos de los canales?

Node-RED consulta cada estación PLC por HTTP, fusiona las lecturas en un fichero JSON en disco y lanza este script con un nodo exec en cada intervalo de medida. El script y los flujos permanecen desacoplados.

¿Cómo deben gestionarse las credenciales en producción?

Mantén FTP_USER y FTP_PASS fuera del código. Cárgalas desde variables de entorno o desde un fichero de configuración con permisos restringidos fuera del repositorio, y rótalas si el equipo lo mantienen terceros.

Funcionalidades relacionadas