Ir al contenido principal
Todas las coleccionesGuías de usuario
Integrar tus datos de ChirpStack con Ubidots
Integrar tus datos de ChirpStack con Ubidots

Recibir y decodificar datos de dispositivos LoRaWAN conectados al servidor ChirpStack.

Santiago Pachon Robayo avatar
Escrito por Santiago Pachon Robayo
Actualizado hace más de 2 meses

El stack de servidor de red LoRaWAN de ChirpStack, de código abierto, proporciona componentes de código abierto para redes LoRaWAN. Juntos forman una solución lista para usar que incluye una interfaz web fácil de usar para la gestión de dispositivos y APIs para la integración.

Siguiendo esta guía, podrás decodificar los datos de ChirpStack y enviarlos a Ubidots.

Requisitos

1. Flujo de Trabajo de Integración

Para enviar los datos ubicados en el servidor de ChirpStack a Ubidots, es necesario realizar una integración HTTP de nube a nube. Esta integración requiere convertir el formato JSON de salida de ChirpStack en uno compatible con Ubidots. El proceso de análisis de los datos se puede lograr utilizando el módulo de Funciones como Servicio (FaaS) de Ubidots, llamado UbiFunctions, donde se toma el formato JSON nativo de ChirpStack y se transforma en uno compatible con la API de Ubidots.

2. Configuración del Decodificador UbiFunction de Ubidots

Sigue los pasos a continuación para crear y lanzar la UbiFunction que manejará la conversión del formato JSON nativo de ChirpStack en uno compatible con Ubidots:

Paso 1: Ve al módulo de Funciones que se encuentra en la pestaña Dispositivos.
Paso 2: Haz clic en el ícono “+” o selecciona el botón “Crear Función” para crear una nueva UbiFunction en tu cuenta.
Paso 3: Asigna un nombre a la UbiFunction, por ejemplo, “Integración ChirpStack”. Luego, asigna POST como el Método HTTP y elige Python o NodeJS como lenguaje de programación runtime. Presiona el botón azul llamado “Hacerlo en vivo” y se generará la URL del endpoint HTTPs.

NOTA: Deja la opción “Disparador basado en tiempo” desactivada.

Paso 4: Copia y pega el código a continuación en el editor de código de la Función de Ubidots. Por favor, selecciona el código de acuerdo con el lenguaje de programación runtime.

Python:

import requestsimport timeimport base64import jsonBASE_URL = "https://industrial.api.ubidots.com"REQUESTS_FUNCTIONS = {"get": requests.get, "post": requests.post}def main(args):print(args)token = args.get("token")device_label = get_device_label(args)payload = json.loads(args.get("objectJSON"))req = update_device(device_label, payload, token)return {"status_code": req.status_code, "res": req.json()}def get_device_label(data):label_b64 = base64.b64decode(data.get("devEUI"))return label_b64.hex()def update_device(device, payload, token):url = "{}/api/v1.6/devices/{}".format(BASE_URL, device)headers = {"X-Auth-Token": token, "Content-Type": "application/json"}req = create_request(url, headers, payload, attempts=5, request_type="post")return reqdef create_request(url, headers, data, attempts, request_type):"""Function to create a request to the server"""request_func = REQUESTS_FUNCTIONS.get(request_type)kwargs = {"url": url, "headers": headers}if request_type == "post":kwargs["json"] = datatry:req = request_func(**kwargs)print("[INFO] Request result: {}".format(req.text))status_code = req.status_codetime.sleep(1)while status_code >= 400 and attempts < 5:req = request_func(**kwargs)print("[INFO] Request result: {}".format(req.text))status_code = req.status_codeattempts += 1time.sleep(1)return reqexcept Exception as e:print("[ERROR] There was an error with the request, details:")print(e)return None 

NodeJS:

const axios = require('axios');async function main(args) {console.log(args);// Get tokenvar token = args.token;// Get Device Labelvar label = args.devEUI;// Decode datavar buff = Buffer.from(label, 'base64');var device_label = buff.toString('hex');console.log(device_label);var payload = args.objectJSON;console.log(payload);// Send the payload to Ubidotsvar response = await ubidots_request(token, device_label, payload);// Log Ubidots response to the consoleconsole.log(response);// Pass Ubidots' API response as the function's reponsereturn response;}// This function builds an HTTP POST request to Ubidotsasync function ubidots_request(token, device_label, payload) {let config = {method: 'post',url: 'https://industrial.api.ubidots.com/api/v1.6/devices/' + device_label,data: payload,headers: {'Content-Type': 'application/json','X-Auth-Token': token}}const response = await axios.request(config);return response.data;}

Paso 5: Copia la “URL del Endpoint HTTPS” haciendo clic en el ícono “Copiar” y guárdala para más tarde.

image.png

3. Integración HTTP de ChirpStack

Una vez que la UbiFunction esté configurada, puedes proceder a completar la integración para comenzar a enviar datos a Ubidots. Por favor, sigue los siguientes pasos que te guiarán a través de este proceso:

Paso 1: Haz clic en “Aplicaciones” y selecciona la opción “CREAR”.
Paso 2: Ingresa un nombre de Aplicación, descripción de Aplicación y selecciona el perfil de servicio. Luego haz clic en el botón “CREAR APLICACIÓN”.
Paso 3: Ve a la Aplicación recién creada y entra en la pestaña “INTEGRACIONES”.
Paso 4: Elige la opción HTTP e ingresa la siguiente información:
- Payload marshaler: JSON
- Headers: “X-Auth-Token”: Tu Token.
- Endpoints: URL del Endpoint HTTPS guardada de la sección anterior.

Después de completar este proceso, podrás comenzar a ver tus dispositivos de ChirpStack siendo creados en tu cuenta de Ubidots y reportando datos a medida que estén disponibles.

¿Ha quedado contestada tu pregunta?