Multitech Box/EVB Payload Decoder for LoRa Demo

sharing payload decoder for Multitech Box/EVB LoRa Demo… two days of research and forum trawling… quite relieved and learnt a lot. Let me know if it could be better. Nick

function decodeUplink(input) {
var data = {};

var acc_x = input.bytes[1];
var acc_y = input.bytes[2];
var acc_z = input.bytes[3];
var press = (input.bytes[5]<<16) | (input.bytes[6]<<8) | input.bytes[7];
var lux = (input.bytes[9]<<8) | input.bytes[10];
var temp = (input.bytes[12]<<8) | input.bytes[13];
data.acc_x = acc_x * .0625;
data.acc_y = acc_y * .0625;
data.acc_z = acc_z * .0625;
data.press = +((press * 0.25 / 1000).toFixed(2));
data.lux = lux;
data.temp = +((temp * 0.0625).toFixed(1));

return {
data: data
};
}

data format reference: MultiTech Developer Resources » Data Packet Format

updated:

function decodeUplink(input) {

  var data = {};
  // GPS Survey
  if(input.bytes.length == 11) {
    var boardtemp = input.bytes[1];
    var lat = ((input.bytes[3] << 24) | (input.bytes[4] << 16) | (input.bytes[5] << 8 ) || input.bytes[6]);  
    var long = ((input.bytes[7] << 24) | (input.bytes[8] << 16) | (input.bytes[9] << 8 ) | input.bytes[10]);
    data.boardtemp = boardtemp;
    data.lat = lat / 2147483648*90; // 2^31 * 90
    data.long = long / 2147483648*180; // 2^31 * 180
  }
  // Lora Demo
  else if(input.bytes.length == 14) {
     var acc_x = input.bytes[1];
     var acc_y = input.bytes[2];
    var acc_z = input.bytes[3];
    var press = (input.bytes[5]<<16) | (input.bytes[6]<<8) | input.bytes[7];
    var lux = (input.bytes[9]<<8) | input.bytes[10];
    var temp = (input.bytes[12]<<8) | input.bytes[13];
    data.acc_x = acc_x * .0625;
    data.acc_y = acc_y * .0625;
    data.acc_z = acc_z * .0625;
    data.press = +((press * 0.25 / 1000).toFixed(2));
    data.lux = lux;
    data.temp = +((temp * 0.0625).toFixed(1));
  }

  return {
     data: data
   };
}
1 Like