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 una semana

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?