⚠️ INTEGRACIÓN DESCONTINUADA
La cobertura de la red Sigfox ha sido retirada o reducida significativamente en muchas regiones tras la reestructuración de 2022. Las instrucciones a continuación se mantienen como referencia pero ya no reciben mantenimiento.
Para nuevas implementaciones de bajo consumo y largo alcance, recomendamos LoRaWAN con The Things Stack (TTS).
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.
