Ir al contenido principal
Todas las coleccionesGuías de desarrollador
UbiFunctions: Gestionar mensajes de bajada con Sigfox y Ubidots
UbiFunctions: Gestionar mensajes de bajada con Sigfox y Ubidots

Aprende a manejar mensajes de bajada desde Sigfox Backend con Ubidots.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de una semana

Sigfox dispositivos de área amplia y bajo consumo con la plataforma de desarrollo de aplicaciones IoT de Ubidots facilitan una solución IoT simple de integrar, desde el hardware hasta la experiencia del usuario final.

Siguiendo los pasos proporcionados en este tutorial, podrás manejar y enviar mensajes de bajada a tu dispositivo Sigfox desde Ubidots.

Esta integración requerirá UbiFunctions, una herramienta destacada de la plataforma de desarrollo de aplicaciones IoT de Ubidots que permite a los usuarios crear un endpoint o endpoints de API personalizados y privados para sus aplicaciones.

Si deseas aprender cómo gestionar mensajes de subida desde el backend de Sigfox a Ubidots, por favor consulta esta guía.

Si no estás familiarizado con Sigfox o el backend de Sigfox, te recomendamos que consultes esta Descripción general de la tecnología Sigfox antes de avanzar mucho más con tu POC o configuración de hardware.

Requisitos

1. Entendiendo las solicitudes de bajada de Sigfox con Ubidots

Los mensajes de bajada permiten que tus dispositivos IoT Sigfox realicen acciones de control basadas en un mensaje recibido. Para una mejor comprensión, supongamos que deseas poder modificar la "frecuencia de actualización" de un dispositivo ajustando una variable en tu panel de control de Ubidots.

Para ejecutar un mensaje de bajada y enviar datos de entrada desde Ubidots a tu dispositivo Sigfox, necesitarás una plataforma de Ubidots para asignar el valor que va a establecer la nueva frecuencia de actualización para el hardware.

Para una mejor comprensión del Proceso de Integración de Bajada entre tus Dispositivos Sigfox y Ubidots, consulta el paso a paso de la imagen a continuación:

Para aclarar la comprensión de los mensajes de bajada de Sigfox, también puedes consultar el video a continuación:

2. Crear Variables de Control para el Mensaje de Bajada en Ubidots

1. Ve a tu cuenta de Ubidots. Si aún no tienes una, créala haciendo clic aquí.

[CONSEJO] - Para manejar una comunicación industrial y escalable entre tu hardware IoT y Ubidots, se utilizarán los ID o dirección MAC del hardware como Etiquetas de Dispositivo para Ubidots. La Etiqueta de Dispositivo es el identificador único que mantiene tus dispositivos de hardware coincidiendo con su gemelo digital en Ubidots. Para una mejor comprensión de las Etiquetas de Dispositivo en Ubidots, consulta la guía a continuación:

2. Ahora, suponiendo que ya tienes un Dispositivo Sigfox transmitiendo datos a la cuenta de Ubidots utilizando el ID del dispositivo Sigfox como Etiqueta de Dispositivo, es hora de crear una variable para establecer la frecuencia de actualización deseada dentro del dispositivo.

Para crear la variable de control, presiona "Agregar Variable –> Raw". Luego asigna "frecuencia de actualización" como nombre. Una vez que la variable esté creada, verifica si la etiqueta de variable asignada es "update-frequency":

3. A continuación, ve a la sección Panel de Control de tu cuenta de Ubidots haciendo clic en "Datos".

4. Luego, agrega un nuevo widget de control al panel de control. Para agregar el nuevo widget, presiona el ícono "+" ubicado en la parte superior derecha de la página, luego selecciona "Control –> Control deslizante –> Agregar Variable –> Dispositivo Sigfox (ID del Dispositivo Sigfox) –> Variable "Frecuencia de Actualización" (creada previamente).

Una vez que el widget esté creado, podrás establecer la frecuencia de actualización deseada en minutos utilizando el control deslizante como se muestra arriba. Donde, el valor máximo es 60 minutos, y el mínimo es 10 minutos:

3. Configurar UbiFunction en Ubidots

Ahora vamos a mostrar cómo configurar una UbiFunction para:

  • Recuperar el valor de frecuencia de actualización asignado por el usuario desde el Panel de Control de Ubidots

  • Devolver los datos esperados por Sigfox que contienen el nuevo valor de frecuencia de actualización

Nota: una UbiFunction es una función en la nube de Node.js que se ejecuta cuando se realiza una solicitud GET o POST en la URL de la función, como se ilustra a continuación.

  1. Crea una UbiFunction yendo a tu cuenta de Ubidots –> Dispositivos –> Funciones.

NOTA: Si no puedes ver el módulo "Funciones" en el menú de tu cuenta, necesitarás actualizar tu plan a un plan Profesional o superior en la sección de facturación de tu cuenta.

2. Haz clic en el ícono azul "+" en la esquina superior derecha para crear una nueva función:

3. Por defecto, cada UbiFunction se llena con un código de muestra sin ninguna configuración. Necesitarás configurar la función para que funcione mejor para tus necesidades. La función de muestra no funcionará con Sigfox.

Las configuraciones predeterminadas para la función son como se muestra a continuación:

Para comenzar, asigna el nombre deseado para tu UbiFunction. Recomendamos usar el formato "Marca-Referencia", es decir, "Sigfox-Suntech", "Sigfox-Oyster" o "Sigfox-Thinxtra". También es aconsejable relacionar el nombre con el tipo de mensaje que se está enviando; por ejemplo, "downlink" puede colocarse al final del nombre de nuestra función: "Sigfox-Suntech-downlink.

Para este tutorial, la función se titulará "Sigfox-Device-Downlink."

4. Selecciona GET como Método HTTP y NodeJS 8 como Runtime. Con estos parámetros, la configuración de la función se verá como sigue:

5. Ahora es el momento de desplegar la UbiFunction para generar la URL del endpoint de la API que se utilizará para transmitir los datos desde el Backend de Sigfox a Ubidots.

Para desplegar la UbiFunction, haz clic en "Hacerlo en vivo":

Ahora, la URL del endpoint resultante construida por el motor de UbiFunctions y alojada de forma privada para tu aplicación de Ubidots se verá algo así:

NOTA IMPORTANTE: Esta URL del endpoint resultante es importante porque es el endpoint al que dirigirás tu callback de Sigfox para enviar el mensaje de subida que solicita el mensaje de bajada. Si esto es confuso, por favor mira este video explicativo.
Como habrás notado, la URL del endpoint resultante generada por la UbiFunction es:

https://parse.ubidots.com/prv/ubidots-tutorials/sigfox-device-downlink

Donde, ubidots-tutorial es tu nombre de usuario de Ubidots y sigfox-device-downlink es el Nombre asignado a la función dentro del motor de UbiFunctions.

Guarda la URL del endpoint de la API para ser utilizada y asignada más tarde en la configuración del Callback de Sigfox.

6. Borrar y reemplazar el código predeterminado ubicado en el editor de UbiFunction, con el código de muestra proporcionado a continuación. Copia y pega el código de muestra a continuación en el editor de código de UbiFunction:

/* * Este código demuestra cómo manejar un Mensaje de Bajada con Sigfox y Ubidots a través de un * endpoint HTTP que recibe un token de Ubidots, ID del Dispositivo Sigfox y variable deseada para * ser enviada en el mensaje de bajada. Luego, estos parámetros se utilizarán para manejar y verificar * datos de Ubidots para construir y enviar los datos esperados por Sigfox. *  * Puedes construir una URL como se explica a continuación, y pegarla en tu navegador web para * probar el parser. Ejemplo: * * https://parse.ubidots.com/{your-parser-URL}/?token={YOUR-TOKEN}&device={SIGFOX-DEVICE-ID}&variable={VARIABLE_LABEL} *  * creado el 9 de agosto de 2018 * por Maria C. Hernandez */// Importar la biblioteca 'request-promise' para que podamos hacer solicitudes HTTP desde el parservar request = require('request-promise');// Función principal - se ejecuta cada vez que se ejecuta el parser.// "args" es un diccionario que contiene el token de ubidots, ID del dispositivo Sigfox y etiqueta de variable.async function main(args) {    // Obtener el token, etiqueta del dispositivo y etiqueta de variable de los parámetros de URL    var ubidots_token = args.token;    var device_label = args.device;    var variable_label = args.variable;    // Verificar si la variable ya existía, si no, se creará automáticamente con una frecuencia de actualización predeterminada     // de 10 minutos    var variable_status = await ubidots_request_variable_status(ubidots_token, device_label, variable_label);    if (variable_status >= 400) {        var response = await ubidots_request_variable_creation(ubidots_token, device_label, variable_label);        console.log("¡Nueva Variable Creada! - Frecuencia de Actualización = 10 minutos");    }    // Recuperar el último valor de la variable asignada        var downlink_data = await ubidots_get_lastvalue(ubidots_token, device_label, variable_label);    // Codificar el último valor recibido a HEX    var downlink_data_hex = Buffer.from([downlink_data]).toString('hex');    // Completar los 8 bytes de datos de bajada    downlink_data_hex = (Array(16).join('0') + downlink_data_hex).slice(-16);    // Mensajes de depuración     console.log("Valor asignado en el Widget de Control: " + downlink_data);    console.log("Datos de Bajada a ser enviados: " + downlink_data_hex);    console.log("¡Activando mensaje de bajada!");    // Devolver Datos de Bajada a la Nube de Sigfox    return sigfox_downLink(device_label, downlink_data_hex);}/************************************************** *                 RUTINAS AUXILIARES                   *  **************************************************//*    Construir el Mensaje de Bajada a ser enviado a la Nube de Sigfox    - device_id: ID del Dispositivo Sigfox    - downlinkDaTa: Valor deseado a ser enviado como Mensaje de Bajada*/async function sigfox_downLink(device_id, downLink_data) {    // Devolver datos a SIGFOX - codificando en duro los datos de retorno para depuración    var data = {};    data[device_id] = { "downlinkData": downLink_data };    return data;}/*    Construir y manejar una solicitud HTTP GET a Ubidots para recuperar el último valor    - ubidots_token: Token (Clave de Acceso) de tu Cuenta de Ubidots    - device_label: Etiqueta de Dispositivo donde se encuentra la variable deseada     - variable_label: Etiqueta de Variable deseada para obtener datos (último valor)*/async function ubidots_get_lastvalue(ubidots_token, device_label, variable_label) {    var options = {        url: 'https://industrial.api.ubidots.com/api/v1.6/devices/' + device_label + '/' + variable_label + '/lv',        headers: {            "x-auth-token": ubidots_token        },         json: true    };    return await request.get(options);}/*    Construir y manejar una solicitud HTTP POST para crear una variable en Ubidots    - ubidots_token: Token (Clave de Acceso) de tu Cuenta de Ubidots    - device_label: Etiqueta de Dispositivo donde se va a crear la variable (ID del Dispositivo Sigfox)    - variable_Label: Etiqueta de Variable deseada para crear la variable*/async function ubidots_request_variable_creation(ubidots_token, device_label, variable_label) {    var options = {        method: 'POST',        url: 'https://industrial.api.ubidots.com/api/v1.6/devices/' + device_label + "/" + variable_label + "/values",        body: {value: 10},        json: true,        headers: {            'Content-Type': 'application/json',            'X-Auth-Token': ubidots_token        }    };    return await request.post(options);}/*    Construir y manejar una solicitud HTTP GET para verificar si la variable ya existe    - ubidots_token: Token (Clave de Acceso) de tu Cuenta de Ubidots    - device_label: ID del dispositivo Sigfox      - variable_Label: Etiqueta de Variable del dispositivo deseada para verificar*/async function ubidots_request_variable_status(ubidots_token, device_label, variable_label) {    var status_code;    var options = {        url: 'https://industrial.api.ubidots.com/api/v1.6/devices/' + device_label + '/' + variable_label,        headers: {            "x-auth-token": ubidots_token        },         json: true,        resolveWithFullResponse: true    };    try {        var response = await request.get(options);        status_code = response.statusCode;    } catch(error) {        status_code = JSON.stringify(error.statusCode);    }    return status_code;}

En este punto, el código de muestra proporcionado está diseñado para recuperar el último valor asignado como valor de frecuencia de actualización. Luego, la función devolverá los datos esperados por Sigfox que contienen el nuevo valor de frecuencia de actualización más el ID del dispositivo Sigfox para saber qué dispositivo va a actualizar su frecuencia de actualización.

Sigfox espera recibir los siguientes datos:

{  '##{{deviceId}}': {	'downlinkData':##{{data}} }}

Ubidots devolverá los siguientes datos:

{  "2BF076": {    "downlinkData": "000000000000000A"   }}


7. Ahora es el momento de guardar los cambios realizados y desplegar la función de bajada en el motor de UbiFunctions. Para hacerlo, simplemente presiona "Hacerlo en vivo."

Con los cambios ya guardados, configuremos el Callback de Sigfox para comenzar a recibir los datos de bajada de Ubidots en el Dispositivo Sigfox.

4. Configurar Mensaje de Bajada en Sigfox

La gestión de los datos entre Sigfox y Ubidots requiere un "Callback".

Los Callbacks de Sigfox utilizan solicitudes HTTP para transmitir datos bidireccionalmente con Ubidots. En este caso, vamos a mostrarte cómo configurar el Callback de Sigfox para transmitir datos desde Ubidots a Dispositivos Sigfox utilizando el motor de UbiFunctions discutido previamente.

1. Para comenzar, accede al Backend de Sigfox donde tu hardware está transmitiendo datos.

2. Ve a la sección Dispositivo y selecciona el Tipo de Dispositivo del dispositivo de bajada deseado:

3. Edita el Tipo de Dispositivo presionando el botón editar ubicado en la esquina superior derecha de la página:

Establece callback como Bajada:

Para guardar los cambios, presiona "Ok".

4. A continuación, verifica la información de tu dispositivo y selecciona "CALLBACKS" en el menú del lado izquierdo de la página, como se muestra a continuación:

En este punto, se necesita un nuevo callback. Para crear un nuevo callback, selecciona "Nuevo". Luego, selecciona "Callback personalizado".

En la ventana a continuación, notarás que debes completar las configuraciones del callback que deberían estar comunicando datos con Ubidots bidireccionalmente.

Para establecer la comunicación con Ubidots, asigna los parámetros mencionados a continuación y deja los demás parámetros y campos como predeterminados:

  • Tipo: DATA - BIDIR

  • Patrón de URL:

https://parse.ubidots.com/{UBIFUNCTION-URL}/?token={UBIDOTS-TOKEN}&device={SIGFOX-DEVICE-ID}&variable={VARIABLE_LABEL}

Las siguientes claves ({keys} ) también deben ser reemplazadas con los siguientes parámetros:

  • {UBIFUNCTION-URL} : URL del endpoint de la API generada por UbiFunction

  • {SIGFOX-DEVICE-ID} : Clave del Dispositivo relacionada con el ID del Dispositivo Sigfox ({device} ) asignada por el Backend de Sigfox

  • {VARIABLE_LABEL} : Etiqueta de variable de la variable de control que envía datos de vuelta a Sigfox en el mensaje de bajada

Una vez que todos los parámetros estén correctamente actualizados, la URL final debería verse como la siguiente:

https://parse.ubidots.com/prv/ubidots-tutorials/sigfox-device-downlink?token=BBFF-Rfcgaxns6HlVb155WA0RhSY85xNDmB&device={device}&variable=update-frequency

Para evitar problemas, te recomendamos encarecidamente que compares las configuraciones de los callbacks a continuación con las tuyas:

Una vez que hayas verificado el callback, presiona "OK" para guardar los cambios.

5. Por defecto, el callback BIDIR estará inactivo después de su creación. Por favor, actívalo, seleccionando la casilla de verificación Bajada:

Cuando esté activado:

Ahora tu callback está listo y habilitado para manejar datos de Ubidots a Dispositivos Sigfox. En este punto, los datos serán solicitados por el Dispositivo Sigfox a través de un mensaje de subida que apunta al motor de UbiFunctions (paso anterior). La función se ejecutará al recibir los datos y devolverá la respuesta esperada de la variable de control que se utilizará como el mensaje de bajada.

NOTA IMPORTANTE DE DESPLIEGUE: Ubidots y Sigfox se comunican a través de URL o Batch URL (utilizado para grandes despliegues). Este tutorial explica el canal estándar de URL. Si tienes una red de sensores a gran escala, por favor contacta a sales@ubidots.com para recibir información adicional sobre integraciones de Batch URL.

5. Enviando solicitud de bajada a Sigfox

Con la UbiFunction y el Callback de Sigfox configurados, podrás activar mensajes de bajada desde Ubidots a tu Dispositivo Sigfox una vez que el Dispositivo Sigfox lo solicite (usando un mensaje de subida).

Como mencionamos anteriormente, el dispositivo enviará un mensaje de subida solicitando el mensaje de bajada a Ubidots.

¿Cómo puedo solicitar un mensaje de bajada desde mi dispositivo? - Esto depende del fabricante y la documentación de cada Dispositivo Sigfox. Es importante mencionar que solicitar mensajes de bajada será diferente para la mayoría, si no todos, los diferentes fabricantes de hardware. Por lo tanto, las recomendaciones de Ubidots son referirse directamente a la Documentación Técnica del fabricante para comprender mejor la configuración requerida para ajustarse a la estructura requerida de "Mensajes de Bajada".

Ahora, con fines de prueba, decidimos usar un Thinxtra Xkit previamente configurado para solicitar una bajada una vez que se presiona el botón de incrustación de la placa.

En la imagen a continuación puedes ver cómo el valor asignado desde el Widget de Control de Ubidots fue codificado correctamente y recibido en unos segundos por el Dispositivo Sigfox después de que se presionó el botón de incrustación:

Ahora el valor recibido puede ser asignado como un nuevo valor de frecuencia de actualización en las configuraciones del dispositivo.

Para facilitarte las cosas, además de la lógica y seguimiento de esta guía, creamos una nueva variable raw en Ubidots para establecer el valor deseado que se activará como mensaje de bajada, pero esto no es necesario gracias al código proporcionado anteriormente.

Recuerda que cada vez que una nueva etiqueta de dispositivo es reconocida por Ubidots, se crea automáticamente un nuevo dispositivo. Esto es cierto al usar este código de muestra de UbiFunction proporcionado. Y, con esta función, múltiples piezas diferentes de hardware pueden apuntar a la misma UbiFunction y, según la Etiqueta del Dispositivo Sigfox, Ubidots creará un dispositivo digital en la plataforma, o actualizará el dispositivo digital que ya coincide con la Etiqueta del Dispositivo de los datos entrantes o salientes. Con esta simplicidad para incorporar cientos y miles de dispositivos, ahora es el momento de crear los paneles de control y eventos de tu aplicación IoT y comenzar a controlar y monitorear tus dispositivos utilizando la Plataforma de Desarrollo de Aplicaciones IoT de Ubidots.

6. Solución de problemas

Si deseas desplegar múltiples Dispositivos Sigfox de manera eficiente, se debe seguir la siguiente configuración paso a paso:

  1. Configurar UbiFunction

  2. Configurar Callback de Sigfox

  3. Solicitar el Primer Mensaje de Bajada

  4. Crear los Widgets de Control de Ubidots deseados

Así que en el paso #3, si la variable asignada en la solicitud del mensaje de bajada no existe ya, porque la bajada primero llega a Ubidots como una solicitud de subida, cualquier etiqueta de variable adjunta a esa subida se creará automáticamente. Esto incluye la variable de bajada si está correctamente codificada utilizando el código de muestra o tu propio código. IMPORTANTE: Aunque el código de muestra creará automáticamente la variable de control, para controlar completamente y enviar una bajada, aún debes crear el widget de control que actualizará la variable de control.

[CONSEJOS PROFESIONALES] Para fines de depuración:

1. Para verificar si el mensaje fue activado correctamente por el motor de UbiFunction, simplemente presiona el ícono "sobre" ubicado en la barra de control de la función que estás buscando rastrear. Esto mostrará los registros y ejecuciones de tu función.

En este punto, podrás ver los registros de la función proporcionada, además de los datos que se están devolviendo a la Nube de Sigfox:

2. Para verificar si el mensaje de bajada fue solicitado y enviado correctamente en el backend de Sigfox, ve a la sección "Mensajes" desde la pestaña ID del Dispositivo. En esta sección, podrás ver todos los mensajes (subida y bajada) manejados por un dispositivo seleccionado.

La imagen a continuación muestra la respuesta del mensaje de subida que solicita el mensaje de bajada:

La imagen a continuación muestra la respuesta del mensaje de bajada que contiene los datos que se enviarán al dispositivo:

6. Resumen

Con esto, tu Callback de Sigfox está listo y el motor de UbiFunction está correctamente configurado y transmitiendo datos desde Ubidots a tus Dispositivos Sigfox. Ahora es el momento de desarrollar tu aplicación con las Herramientas de Desarrollo y Despliegue de Aplicaciones IoT de Ubidots.

Ubidots es una Plataforma de Desarrollo de Aplicaciones de Internet de las Cosas (IoT) que empodera a los integradores de sistemas e innovadores para lanzar aplicaciones de control, monitoreo y automatización que convierten los datos de sensores en información procesable. Contratar un equipo de ingeniería para fusionar el mundo físico con un mundo digital y crear una aplicación IoT que funcione y se vea bien es costoso tanto en tiempo como en dinero, por lo que Ubidots lo hizo por ti. Ubidots existe como un recurso eficiente y económico para desarrollar aplicaciones IoT basadas en la nube privada e integrar soluciones basadas en datos en empresas e investigaciones para mejorar nuestra economía laboral.

Otros usuarios también encontraron útil:

¿Ha quedado contestada tu pregunta?