Ir al contenido principal
Plugins: Puerta de Enlace TCP

Recibir y analizar cargas útiles personalizadas utilizando TCP.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

Nuestro nuevo plugin de TCP Gateway está diseñado para servir como un intermediario que enruta paquetes TCP a un webhook HTTPs, para que puedan ser decodificados usando Python en el decodificador del plugin. Facilita la comunicación entre sistemas que pueden usar diferentes cargas útiles, permitiendo la compatibilidad y la interoperabilidad. El plugin de TCP Gateway también puede responder con paquetes personalizados a los clientes TCP, que pueden ser especificados en el código Python del plugin.

Este plugin cuesta $29 por mes.

Requisitos

  • Una licencia de pago activa de Ubidots en el plan Profesional o superior.

Tabla de contenido

1. Configuración del plugin

Ve a “Dispositivos” → “Plugins”. Haz clic en el botón “+” en la esquina superior derecha y selecciona la opción de TCP Gateway.

Para configurar el plugin necesitas proporcionar tres entradas:

  1. Puerto: El plugin “escucha” en el puerto que especifiques aquí para los paquetes TCP entrantes. Puedes determinar qué puerto se alinea mejor con los requisitos de tu aplicación.

  2. Carácter de Confirmación: El servidor solo enviará los datos TCP al webhook HTTPs cuando se reciba este carácter de confirmación. Este carácter actúa como un disparador para transmitir los datos. El carácter predeterminado es "\n".

  3. Token: Selecciona un token de Ubidots para este plugin. Si estás enviando datos desde cientos o miles de dispositivos, asegúrate de que el límite de tasa de tu token sea suficiente para soportar el tráfico.

    Después de configurar el plugin, tu gateway TCP privado tardará aproximadamente 3 minutos en estar completamente provisionado.

  4. Una vez que tu gateway esté provisionado, podrás localizar la IP del Servidor TCP en la descripción del plugin:

  5. Usando esta IP, y el puerto especificado, aseguras que los paquetes sean enrutados al decodificador de este plugin.

2. Decodificador de Python

El gateway TCP responderá automáticamente con lo que devuelvas en la función de decodificación.

Por defecto, el plugin tiene un decodificador que responderá con:

  • "ok" para una ejecución exitosa, indicando una respuesta HTTP con un código de estado de 200 o 201.

  • O "error" cuando el plugin devuelve un error, indicando una respuesta HTTP con un código de estado mayor a 400.

Puedes modificar este decodificador para que responda con diferentes mensajes de respuesta.

Decodificador de ejemplo de TCP

import requestsBASE_URL = 'https://industrial.api.ubidots.com'def decoder(args):    # Usa este fragmento de código para decodificar datos TCP entrantes.    # Como ejemplo, supongamos que el dispositivo TCP envía esta carga útil (el carácter de escape no está incluido):    # <device_label>,<temp>,<humidity>    # Obtén el token de la clave interna "_parameters" en args, que contiene args específicos del sistema     token = args.get('_parameters', {}).get('_auth_token', None)    # Obtén la carga útil de args. El gateway TCP enviará la carga útil recibida dentro de la clave "data"    # NOTA: El gateway TCP detectará automáticamente si la carga útil recibida es texto plano o bytes crudos.    #       Si detecta bytes, entonces la clave 'data' estará en base64, por lo que tendrás que decodificarla.        tcp_payload = args.get('data', '')    print(tcp_payload)    # Divide los valores y prepara la carga útil    try:        tcp_payload_array = tcp_payload.split(',')    except:        msg = "No se pudo decodificar la carga útil"        print(msg)        return msg    payload = {        "temperature": tcp_payload_array[1],         "humidity": tcp_payload_array[2]     }    # Envía datos a Ubidots    res = send_data(tcp_payload_array[0], payload, token)    # Usa la respuesta para decidir qué se envía de vuelta al cliente TCP.    # El gateway TCP responderá automáticamente con lo que devuelvas en esta función.     # Por ejemplo, envía "ok" o "error" dependiendo del código de estado recibido al enviar datos a Ubidots:    status_code = res.status_code    if 200 <= status_code < 300:        msg = "ok"    elif 400 <= status_code < 500:        msg = "error"        return msg

3. Solución de problemas

Puedes probar el plugin usando Netcat, como en este ejemplo:

nc 165.227.92.51 5555

Tendrías que reemplazar el primer número, 165.227.92.51, con la IP de tu servidor TCP y el segundo, 5555, con el puerto que elegiste.

Otros también encontraron útil:

¿Ha quedado contestada tu pregunta?