Ir al contenido principal
Todas las coleccionesGuías de desarrollador
UbiFunctions: Integra Ibuttons listos para SigFox de TeCrea con Ubidots
UbiFunctions: Integra Ibuttons listos para SigFox de TeCrea con Ubidots

Aprende a integrar el iButton multiusos de TeCrea de la plataforma SigFox a la Plataforma de Habilitación de Aplicaciones IoT de Ubidots.

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

TeCrea es una empresa colombiana con sede en Medellín. Principalmente enfocada en el desarrollo de productos electrónicos bajo demanda aplicando su amplia experiencia tecnológica, ahora avanza hacia dispositivos y aplicaciones IoT. TeCrea es la primera empresa colombiana que desarrolla dispositivos IoT certificados para comunicarse a través de la red SigFox.

Ibutton es un dispositivo pensado para satisfacer múltiples soluciones y aplicaciones que impactan directamente a las industrias y las transforman. Permite enviar mensajes de alerta, eventos y también puede funcionar como un rastreador GPS en tiempo real, sin mencionar su versión para monitoreo de temperatura y humedad.

Siguiendo esta guía, podrás integrar cualquiera de los 3 tipos de Ibuttons de TeCrea con Ubidots para proporcionar a tu aplicación herramientas de visualización, un motor de eventos complejos para alertas basadas en datos y mucho más de la plataforma de habilitación de aplicaciones IoT de Ubidots.

Los 3 tipos de Ibutton son:

  • Tipo 1: Ibutton rastreador (solo GPS)

  • Tipo 2: Sensores de temperatura y humedad

  • Tipo 3: Tanto rastreo GPS como sensores de temperatura y humedad

Requisitos

1. Configuración de UbiFunction

Paso 1: Crear una nueva UbiFunction como se describe en el segundo y tercer paso de este artículo.
Paso 2: Asignar un nombre, cambiar ‘Método’ a POST, y dejar el Runtime como NodeJS.
Paso 3: Reemplazar el código predeterminado por el siguiente a continuación
NOTA IMPORTANTE: ingresa un token de Ubidots válido de tu cuenta en la segunda línea del código.

//UbiFunction para integrar el iButton SigFox de TeCrea a Ubidotsvar request = require('request-promise');var TOKEN = "PUT_YOUR_UBIDOTS_TOKEN_HERE"; // Ingresa tu TOKEN de UbidotsFUNCS = {    0: build_payload_type_0, // Botón    1: build_payload_type_1, // Solo posición    2: build_payload_type_2, // Temperatura y humedad    3: build_payload_type_3 // Posición, temperatura y humedad}async function main(params) {    console.log(params);    var device_id = params['device_id'];    type = button_type(params);    payload = FUNCStype || {};    // Hacer solicitud POST a Ubidots    var post_response = await ubidotsPost(TOKEN, device_id, payload);    // Pasar la respuesta de la API de Ubidots a la respuesta del parser    return await post_response;}async function ubidotsPost(token, device_label, data) {    var options = {        method: 'POST',        url: 'https://industrial.api.ubidots.com/api/v1.6/devices/' + device_label + '?force=true',        body: data,        json: true,        headers: {            'Content-Type': 'application/json',            'X-Auth-Token': token        }    };    return request.post(options);}// Sensor tipo 3: Posición, Temperatura y Humedadfunction build_payload_type_3(params) {    var buf = new Buffer.from(params.data, 'hex');    var lat = buf.readFloatBE(0);    var lng = buf.readFloatBE(4);    var info_byte = buf.readUInt8(8).toString(2).padStart(8, '0');    var digital_input = info_byte[7];    var low_battery = info_byte[6];    var periodic = info_byte[0];    var adc_values = buf.readUIntBE(9, 3).toString(2).padStart(24, '0');    var temperatura = parseInt(adc_values.substr(12, 24), 2) * (165 / 4095) - 40;    var humedad = parseInt(adc_values.substr(0, 12), 2) / 40.95;    return_json = {        "position": { "value": 1, "context": { "lat": lat, "lng": lng } },        "digital-input": digital_input,        "low-battery": low_battery,        "periodic": periodic,        "temperatura": temperatura,        "humedad": humedad,    }    return return_json;}// Sensor tipo 2: Temperatura, Humedadfunction build_payload_type_2(params) {    var buf = new Buffer.from(params.data, 'hex');    var info_byte = buf.readUInt8(8).toString(2).padStart(8, '0');    var digital_input = info_byte[7];    var low_battery = info_byte[6];    var periodic = info_byte[0];    var adc_values = buf.readUIntBE(9, 3).toString(2).padStart(24, '0');    var temperatura = parseInt(adc_values.substr(12, 24), 2) * (165 / 4095) - 40;    var humedad = parseInt(adc_values.substr(0, 12), 2) / 40.95;    return_json = {        "digital-input": digital_input,        "low-battery": low_battery,        "periodic": periodic,        "temperatura": temperatura,        "humedad": humedad,    }    return return_json;}// Sensor tipo 1: Posiciónfunction build_payload_type_1(params) {    var buf = new Buffer.from(params.data, 'hex');    var lat = buf.readFloatBE(0);    var lng = buf.readFloatBE(4);    var info_byte = buf.readUInt8(8).toString(2).padStart(8, '0');    var digital_input = info_byte[7];    var low_battery = info_byte[6];    var periodic = info_byte[0];    return_json = {        "position": { "value": 1, "context": { "lat": lat, "lng": lng } },        "digital-input": digital_input,        "low-battery": low_battery,        "periodic": periodic,    }    return return_json;}// Sensor tipo 4: Botónfunction build_payload_type_0(params) {    var buf = new Buffer.from(params.data, 'hex');    var periodic = buf[8] >> 7;    var low-battery  = (buf[8] >> 1) & 0x01    var adc_values = buf.readUIntBE(9, 3).toString(2).padStart(24, '0');    var battery = (parseInt(adc_values.substr(12, 24), 2) - 2340) / 58.5;    return_json = {        "battery": battery,        "low_battery": low_battery,        "periodic": periodic    }    return return_json}// Devuelve el tipo de botónfunction button_type(params) {    var buf = new Buffer.from(params.data, 'hex');    var info_byte = buf.readUInt8(8).toString(2).padStart(8, '0');    var button_type = parseInt(info_byte.substr(1, 5), 2);    return button_type;}

Paso 4: Haz clic en el botón ‘Hacerlo en vivo’

2. Configuración de callback de SigFox

Paso 1: Crear un nuevo callback de SigFox para tus Ibuttons de TeCrea como se explica aquí (primero lee todos los pasos).
Paso 2: En el campo ‘Patrón de URL’, ingresa tu URL de UbiFunction.
Paso 3: Selecciona POST como el método HTTP para hacer la solicitud.
Paso 4: Cambia el valor del encabezado ‘Content-type’ a “application/json”.
Paso 5: Ingresa lo siguiente como tu carga útil JSON personalizada que se enviará y procesará por la UbiFunction:

{   "device_id": "{device}",   "data": "{data}",   "rssi": "{rssi}"}

Paso 6: Guarda el callback

3. Resultados

Después de completar la configuración de UbiFunction y el callback de Sigfox, estarás listo para comenzar a recibir datos del dispositivo Ibutton directamente en tu cuenta.

¿Ha quedado contestada tu pregunta?