Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Integrar tus datos de The Things Industries con Ubidots usando UbiFunctions
Integrar tus datos de The Things Industries con Ubidots usando UbiFunctions

Integra tus datos de The Things Industries con Ubidots utilizando UbiFunctions como una integración de Nube a Nube.

David Sepúlveda avatar
Escrito por David Sepúlveda
Actualizado hace más de 2 meses

El nuevo servidor de red LoRaWAN de The Things Industries, llamado The Things Enterprise Stack, ofrece la solución para construir y operar redes LoRaWAN privadas. Administra y monitorea tus dispositivos remotos y gateways con un conjunto de herramientas elaborado, y enruta los datos de telemetría de manera segura a tu aplicación en la nube IoT impulsada por Ubidots.

NOTA IMPORTANTE: este artículo asume que los gateways y dispositivos LoRaWAN ya han sido provisionados dentro de la instancia de The Things Industries y están enviando datos regularmente.

Abreviaturas:

  • TTI: The Things Industries

Requisitos

  1. Instancia de The Things Industry

  2. Gateway y dispositivos conectados a la instancia de TTI

1. Flujo de trabajo de integración

Conectar/enviar datos desde TTI a Ubidots se conoce como una integración HTTP de nube a nube. Estas integraciones a menudo, si no siempre, requieren pasos intermedios para asegurar la compatibilidad entre los formatos de datos de la nube del emisor y del receptor. En este caso, la integración de TTI con Ubidots no es la excepción, ya que requiere un paso de análisis para convertir el formato JSON nativo de TTI en uno compatible con Ubidots. Ese paso de análisis es donde el módulo de Funciones como Servicio (FaaS) de Ubidots, UbiFunctions, entra en juego para tomar el formato JSON nativo de TTI y hacerlo compatible con la API de Ubidots.
La imagen a continuación ilustra este flujo de trabajo:

2. Configuración de Ubidots: UbiFunctions

Desde el módulo UbiFunctions, sigue los pasos a continuación para crear y lanzar la UbiFunction que manejará la conversión del formato JSON nativo de TTI en uno compatible con Ubidots:

Paso 1: Haz clic en el botón “+” en la esquina superior derecha
Paso 2: Nombra tu UbiFunction. Por ejemplo, “Integración TTI”
Paso 3: Selecciona POST como el Método
Paso 4: Selecciona Python 3.6 como el Runtime predeterminado
NOTA: Deja la opción “Time-base trigger” desactivada
Paso 5: Ingresa el siguiente código en el Editor

import requestsimport jsonimport timeBASE_URL = "https://industrial.api.ubidots.com"TOKEN = "····" # Ingresa un token de cuenta de Ubidots aquídef main(args):    # Imprimiendo args de TTI    print(f'[INFO] Args de TTI:\n {args}')    # Analizando datos    payload = parse_tti_data(args)    dev_label = tti_dev_eui(args)    print(f'[INFO] Datos analizados:\n {payload}')    print(f'[INFO] Datos TTI Dev_EUI:\n {dev_label}')    # Publicando en Ubidots    req = update_device(dev_label, payload, TOKEN)    print(f'[INFO] Código de estado de la solicitud a Ubidots: {req.status_code}')    print(f'[INFO] Solicitud a Ubidots JSON:\n {req.json()}')    return {        'status_code': req.status_code,        'response_json': req.json()    }def parse_tti_data(data):    return data['uplink_message']['decoded_payload']def tti_dev_eui(data):    return data['end_device_ids']['device_id']def update_device(device, payload, token):    """    Actualiza el dispositivo con el payload    """    url = "{}/api/v1.6/devices/{}".format(BASE_URL, device)    headers = {"X-Auth-Token": token, "Content-Type": "application/json"}    req = create_request(url, headers, attempts=5, request_type="post", data=payload)    return reqdef create_request(url, headers, attempts, request_type, data=None):    """    Función para hacer una solicitud al servidor    """    request_func = getattr(requests, request_type)    kwargs = {"url": url, "headers": headers}    if request_type == "post" or request_type == "patch":        kwargs["json"] = data    try:        req = request_func(**kwargs)        status_code = req.status_code        time.sleep(1)        while status_code >= 400 and attempts < 5:            req = request_func(**kwargs)            status_code = req.status_code            attempts += 1            time.sleep(1)        return req    except Exception as e:        print("[ERROR] Hubo un error con la solicitud, detalles:")        print(e)        return None

Paso 6: Ingresa un token de cuenta de Ubidots donde se solicita (línea 6)
Paso 7: Haz clic en el botón “Hacerlo en vivo”.
Paso 8: Copia la “URL del Endpoint HTTPS” haciendo clic en el ícono de “Copiar” y guárdalo para más tarde.

3. Formateadores de carga útil de dispositivo y aplicación TTI

El formateador de carga útil, también conocido como Decodificador, es la función integrada dentro de la pila v3 de TTI que permite que los datos codificados en hexadecimal provenientes de los Dispositivos sean analizados y convertidos en valores numéricos legibles, así como estructurarlos como un objeto JSON compatible con plataformas ascendentes como Ubidots. Los formateadores de carga útil en v3 son similares a los de la Edición Comunitaria de TTN, pero con la adición de un Formateador de Carga Útil por Dispositivo.
Es IMPORTANTE NOTAR que el Formateador de Carga Útil del Dispositivo tiene prioridad sobre el Formateador de Carga Útil a nivel de Aplicación.

Formateador de Carga Útil del Dispositivo

A diferencia de la Edición Comunitaria de TTN, donde hay un Formateador de Carga Útil general por aplicación, las pilas v3 de TTI permiten configurar un Formateador de Carga Útil para cada Dispositivo dentro de una Aplicación, ampliando así el rango y tipos de dispositivos que una sola Aplicación puede soportar.

Inicia sesión en la instancia de TTI, dirígete a la Aplicación con la que te gustaría integrar Ubidots y sigue estos pasos para crear un Formateador de Carga Útil del Dispositivo:

Paso 1: Haz clic en la opción “Dispositivos” en el panel izquierdo
Paso 2: Selecciona el Dispositivo para el que te gustaría crear un Formateador de Carga Útil
Paso 3: Abre la pestaña “Formateadores de Carga Útil”
Paso 4: Selecciona de las opciones de decodificador disponibles:
– Ninguno
– JavaScript
– Servicio GRPC
– CayenneLPP
– Repositorio

NOTA: La mayoría de las veces, JavaScript es la opción que permite más flexibilidad para estructurar el JSON de salida. En la integración de Ubidots, el decodificador de JavaScript permite analizar el marco de datos hexadecimal en un JSON compatible con Ubidots.

Paso 5: Haz clic en “Guardar cambios”

Después de completar estos pasos, cada vez que el dispositivo seleccionado envíe un mensaje de subida, se activará este decodificador de Formateador de Carga Útil.

Formateador de Carga Útil de Aplicación

El Formateador de Carga Útil a nivel de Aplicación funciona de la misma manera que su contraparte en los Dispositivos, la diferencia es que este solo se activará para aquellos Dispositivos cuyo propio Formateador de Carga Útil se haya configurado como Ninguno.

Sigue los pasos a continuación para establecer un Formateador de Carga Útil a nivel de Aplicación:

Paso 1: Haz clic en “Formateadores de Carga Útil” y en la opción “Uplink” en el panel izquierdo.
Paso 2: Selecciona de las opciones de decodificador disponibles:
– Ninguno
– JavaScript
– Servicio GRPC
– CayenneLPP
– Repositorio

NOTA: La mayoría de las veces, JavaScript es la opción que permite más flexibilidad para estructurar el JSON de salida. En la integración de Ubidots, el decodificador de JavaScript permite analizar el marco de datos hexadecimal en un JSON compatible con Ubidots.

Paso 3: Haz clic en “Guardar cambios”

4. Integración HTTP Uplink de TTI

Teniendo configurada la UbiFunction y el Formateador de Carga Útil del Dispositivo y/o de Aplicación, es hora de completar la integración para comenzar a enviar datos a Ubidots. Para ello, estos pasos te guiarán a través de este proceso final:

Paso 1: Haz clic en “Integraciones” y en la opción “Webhooks” en el panel izquierdo
Paso 2: Agrega uno nuevo con el botón “+ Agregar Webhook”.
Paso 3: Ingresa la información de la siguiente manera:
– ID del Webhook: caracteres alfanuméricos y guiones solamente
– Formato del Webhook: JSON
– URL base: https://parse.ubidots.com

Paso 4: Selecciona la casilla de verificación Uplink
Paso 5: Ingresa la ruta de la UbiFunction de la Sección 2.
NOTA: La ruta debe tener esta estructura:
/prv/{UbidotsUsername}/{UbifunctionName}Donde {UbifunctionName} debe estar todo en minúsculas y los espacios reemplazados por guiones (“-”)

Paso 6: Haz clic en el botón “Agregar Webhook”

Otros usuarios también encontraron útil:

¿Ha quedado contestada tu pregunta?