Ir al contenido principal
Todas las coleccionesGuías de usuario
UbiFunctions: publica datos en tu UbiFunction usando MQTT
UbiFunctions: publica datos en tu UbiFunction usando MQTT

Un gateway MQTT+UbiFunction que actúa como un middleware entre dispositivos MQTT y Ubidots

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

Este artículo se basa en la documentación oficial de UbiFunction, que se puede encontrar en nuestro Centro de Desarrollo.

Requisitos

  • Cuenta Ubidots: de prueba o con licencia

  • Al menos una UbiFunction ya creada (NOTA: si aún no tienes una, sigue este artículo primero)

1. Introducción

MQTT + UbiFunctions te permite publicar datos a través de una UbiFunction creada en tu cuenta y hacer posible integrar dispositivos que transmiten sobre este protocolo pero envían cargas útiles JSON cuyo formato no es compatible con nuestro broker MQTT nativo o API de Ingestión de Datos HTTP, o simplemente si se requiere procesamiento de datos adicional antes de enviarlos a Ubidots.

Como UbiFunctions actúa como un middleware aquí, solo se acepta el método MQTT Publish. En consecuencia, todos los mensajes de suscripción serán rechazados.

A continuación se muestran los ajustes de MQTT necesarios para invocar una UbiFunction sobre el protocolo MQTT:

Configuraciones de MQTT

Valor

Host

functions.ubidots.com

También se encuentra en algunos clientes MQTT como:

tcp://functions.ubidots.com

Port

1883 para MQTT simple.
8883 para MQTT sobre TLS.

Topic

/prv/<username>/<function-label>

Username

Tu nombre de usuario de la cuenta

Password

Token válido de tu cuenta de Ubidots.

ClientID

Cualquier cadena aleatoria. Preferiblemente más larga de 15 caracteres

Protocol

tcp

Nota: Algunos clientes MQTT ofrecen la posibilidad de conectarse usando websockets (mostrado como "ws://" o "wss://"), esto no es compatible.

2. Estructura del tema

Para activar una UbiFunction a través de MQTT, el tema de la publicación debe seguir la estructura:​

/prv/<username>/<function-label>, donde,

  • <username> : Tu nombre de usuario de la cuenta de Ubidots.

  • <function-label> : Nombre de la UbiFunction pero todo en minúsculas y espacios reemplazados por guiones.

El tema base corresponde a la ruta de la URL del Endpoint HTTPS de la UbiFunction, como se ve en la imagen a continuación:

Avanzado: Los temas admiten niveles adicionales, separados por una barra diagonal ("/"), más allá de los utilizados para identificar la UbiFunction dentro de la cuenta. La estructura es:
/prv/<username>/<function-label>/<level-1>/···/<level-N>, donde

  • <level-N> es cualquier cadena codificada en UTF-8 adicional que quieras agregar al tema

Los temas tienen las siguientes limitaciones:

  • Longitud: 1500 caracteres

  • Niveles: 10

3. Argumentos de UbiFunction

Al activar una UbiFunction a través del protocolo MQTT, recibirás un objeto JSON en la variable args de la función main. El JSON tendrá esta estructura:

{
"topic": "<topic>",
"payload": "<payload>",
"from_client_id": "<client_id>",
}

Donde las claves corresponden de la siguiente manera:

Clave

Tipo

Descripción del valor

topic

Cadena

El tema de publicación multinivel

payload

Cadena

La carga útil enviada por el dispositivo en el mensaje de publicación.

from_client_id

Cadena

El ID de cliente utilizado en la conexión MQTT.

4. Certificados TLS

Ubidots admite SSL V1.1, TLS V1.2 y V1.3. Puedes descargar nuestros certificados raíz en diferentes formatos:

  • Archivo PEM: Cadena de certificados con dos certificados raíz de nuestras autoridades certificadoras (CAs).

  • Archivo DER: Igual que el archivo PEM, con una codificación alternativa.

  • Archivo CRT: Igual que el archivo PEM, con una extensión diferente. A menudo se denomina .crt, .cert o .cer.

5. Ejemplos

  • Puerto 1883:

mosquitto_pub \
-p 1883 \
-h functions.ubidots.com \
-t "/prv/<username>/<function-name>" \
-m '{"token": "TOKEN", "device": "device-label", "variable-label": value}' \
-u "<username>" \
-P "TOKEN" \
-q 1 -d
  • Puerto 8883:

mosquitto_pub \
-p 8883 \
-h functions.ubidots.com \
-t "/prv/<username>/<function-name>" \
-m '{"token": "TOKEN", "device": "device-label", "variable-label": value}' \
-u "<username>" \
-P "TOKEN" \
-q 1 -d \
--cafile /Users/user/Documents/Ubidots/roots.pem
¿Ha quedado contestada tu pregunta?