Requisitos
Una cuenta activa de Ubidots.
Una cuenta activa en The Things Network.
Un teléfono celular que ejecute Android o iOS.
El LW001-BG PRO LoRaWAN Tracker de MOKOSmart.
1. Obtén las credenciales del dispositivo
1. Enciende el Bluetooth de tu teléfono celular y luego enciende tu MOKOSmart LW001-BG PRO siguiendo el procedimiento que se muestra en la siguiente imagen:
Consejo Profesional: Si el procedimiento fue exitoso, el LED de encendido verde parpadeará una vez seguido por el LED azul parpadeando intermitentemente, lo que significa que el dispositivo ahora es detectable.
2. Abre la "MKLora" app en tu celular
3. Toca el botón "Conectar" en la esquina superior derecha
4. Cuando se te pida una contraseña, escribe "Moko4321" (contraseña predeterminada) y presiona "OK":
5. Selecciona la pestaña "LORA" y luego la opción "Configuración de Conexión" como se muestra a continuación:
6. Copia/guarda los siguientes valores ya que los necesitarás para los pasos posteriores:
DevEUI
AppEUI
AppKey
7. Haz clic en la configuración de "Región/Subred" y selecciona "US915"
2. Conectar el dispositivo al Servidor de Red
Sigue los pasos a continuación para conectar tu dispositivo al Servidor de Red LoRaWAN de TTN:
Inicia sesión en tu Consola TTN
Elige la región
Haz clic en "Ir a aplicaciones"
Agrega una aplicación haciendo clic en "+ Agregar aplicación"
Completa la información de la aplicación (ID, nombre y descripción)
Haz clic en "Crear aplicación"
7. Haz clic en el botón "+ Agregar dispositivo final":
8. Establece los parámetros como muestra el siguiente GIF (haz clic en él para abrir en otra pestaña):
Banda/región
Versión LoRAWAN
DevEui
AppEui
9. Haz clic en "Formateadores de carga útil" → "Uplink"
10. selecciona "Formateador Javascript personalizado"
11. Elimina todo el código en "Código del formateador" y Pega el siguiente código:
function decodeUplink(input) { var payload = {}; payload = buildPayload(input.bytes, input.fPort); return { data: payload, warnings: [], errors: [] };}function buildPayload(bytes, port){ var payload = buildCommonPayload(bytes, port); let callables = { 1:payload, 2:locationHandler(bytes, payload), 3:payload["status"]["context"]["error"] = noLocationHandler(bytes, payload) }; callables[port]; return payload;}function buildCommonPayload(_bytes, _port){ var payload = {}; var _deviceStatus = _bytes[0]; var _temperature = _bytes[1]; var _ACKAndBatteryVoltage = _bytes[2]; var _operationMode = _deviceStatus & 0x3;//bit0~1 var _batteryStatus = _deviceStatus & 0x4;//bi2 var _motionState = _deviceStatus & (1 << 4);//bit5 //corrección para el signo if(_temperature > 128){_temperature -= 256;} var _ACK = _ACKAndBatteryVoltage & 0xF; var _batteryVoltage = ((_ACKAndBatteryVoltage & 0xF0)>>4)*0.1 + 2.2; var payloadType; if(_port == 0x1){payloadType = "heartbeat-payload";} else if(_port == 0x2){payloadType = "location-fixed-payload";} else if(_port == 0x3){payloadType = "no-location-fixed-payload";} payload = { "temperature":{ "value":_temperature }, "battery-voltage":{ "value":_batteryVoltage }, "status": { "value":_port, "context":{ "payload-type":payloadType, "battery-status":_batteryStatus, "operation-mode":_operationMode, "motion-status":_motionState, "error":"none" } }, }; return payload;}function noLocationHandler(bytes){ const ERROR_MESSAGES = { 0: "Tiempo de posicionamiento WIFI no suficiente", 1: "Tiempo de espera de estrategias de posición WIFI", 2: "Módulo WIFI no detectado", 3: "Tiempo de posicionamiento BlueTooth no suficiente", 4: "Tiempo de espera de estrategias de posición BlueTooth", 5: "Difusión de BlueTooth en progreso", 6: "Tiempo de presupuesto de posición GPS excedido", 7: "Tiempo de espera de posicionamiento GPS grueso", 8: "Tiempo de espera de posicionamiento GPS fino", 9: "Tiempo de posición GPS no es suficiente", 10: "Tiempo de espera de posicionamiento asistido GPS", 11: "Tiempo de espera de posicionamiento en frío GPS", 12: "Interrumpido por enlace descendente para posición", 13: "Interrumpido posicionamiento al inicio del movimiento" } return ERROR_MESSAGES[bytes[3]];}function timeStampParser(bytes){ var timeStamp = 0; var years = bytes[4] << 8 | bytes[5] << 0; var months = bytes[6] - 1; var days = bytes[7]; var hours = bytes[8]; var minutes = bytes[9]; var seconds = bytes[10]; var timezone = bytes[11]; timeStamp = (Date.UTC(years, months, days, hours, minutes, seconds)); if(timezone > 128) { timezone = timezone -256; timeStamp = timeStamp + timezone * (-1) * 60 * 60 * 1000; } else { timeStamp = timeStamp - timezone * 60 * 60 * 1000; } return timeStamp;}function coordinatesParser(coordinate){ //2147483648=0x80000000 //4294967296=0x100000000 if(coordinate > 2147483648){coordinate -= 4294967296}; coordinate /= 10000000; return coordinate;}function locationHandler(bytes, payload){ var fixedType; var positioningType = bytes[3]; var timeStamp = 0; timeStamp = timeStampParser(bytes); if(positioningType === 0x00){fixedType = "Wifi";} else if(positioningType == 0x01){fixedType = "BlueTooth";} else if(positioningType == 0x02){fixedType = "GPS";} else { payload["status"]["context"]["error"] = "valor de posicionamiento inválido"; return; } Object.assign(payload.temperature, {"context": {"timestamp": timeStamp}}); Object.assign(payload["battery-voltage"], {"context": {"timestamp": timeStamp}}); Object.assign(payload["status"]["context"], {"timestamp": timeStamp}); if(positioningType == 0x02) { var lat = (bytes[13]<< 24 | bytes[14]<< 16 | bytes[15]<< 8 | bytes[16]<< 0); var lng = (bytes[17]<< 24 | bytes[18]<< 16 | bytes[19]<< 8 | bytes[20]<< 0); lat = coordinatesParser(lat); lng = coordinatesParser(lng); var positionPayload = { "position":{ "value":1, "timestamp":timeStamp, "context":{ "lat":lat, "lng":lng, "fixed-type":"GPS", } }, }; Object.assign(payload, positionPayload); }}
3. Configurar la Integración de Ubidots
1. Ve a la sección de Plugins de tu cuenta de Ubidots
2. Crea una nueva integración "The Things Stack".
3. Haz clic en el Plugin
4. Busca su sección "Decodificador"
5. Copia la "URL de Endpoint HTTPs" del plugin
6. Regresa a tu aplicación TTN
7. En el lado izquierdo de la pantalla busca "Integraciones" → "Webhooks"
8. Elige "Webhook personalizado"
9. Edita la siguiente configuración:
Completa el "ID del Webhook" con la etiqueta deseada para él
Establece "URL Base:" a https://dataplugin.ubidots.com
Haz clic en "Agregar entrada de encabezado" y escribe "X-Auth-Token" seguido de tu token en el siguiente campo de texto
Haz clic en "Agregar entrada de encabezado" y escribe "Content-Type" seguido de "application/json" en el siguiente campo de texto
Marca la casilla debajo de "Mensaje de Uplink"
Pega la parte de la URL de endpoint HTTP de tu plugin después de "/api....". Ej., "/api/web-hook/....."
Debería verse así:
4. Visualizando Datos en Ubidots
Dirígete a la sección de "Dispositivos" de tu cuenta de Ubidots, allí podrás ver un nuevo dispositivo creado con datos siendo ingeridos.
5. Solución de Problemas
Si estás recibiendo constantemente retroalimentación de "no-location-fixed" del dispositivo, puedes intentar lo siguiente:
Apaga tu dispositivo y enciéndelo nuevamente para que el dispositivo sea detectable por Bluetooth. Luego, usa la app móvil para acceder a la configuración del dispositivo como se describe en la primera sección. Luego, dirígete a la pestaña "POSICIÓN" como se ilustra a continuación:
Una vez allí, verás la opción "GPS Fix".
Toca en "GPS Fix" para cambiar el parámetro de configuración. Primero, puedes intentar modificar el "Tiempo Presupuestado" estableciéndolo a un período más largo. Usa 76200 s y presiona el botón de guardar en la esquina superior derecha para guardar los cambios.
Si esto no soluciona el problema, puedes intentar cambiar el "Tiempo de Espera Fino" como se muestra a continuación.
6. Comentarios, Sugerencias y Artículos Relacionados
No dudes en publicar preguntas o sugerencias en nuestro portal comunitario, o contáctanos a través de support@ubidots.com.
Otros usuarios también encontraron útil...