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
Cualquiera de los 3 tipos de Ibutton enviando datos al backend de SigFox.
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.