Adeunis Field Test Device v1.0

Adeunis FTD v1.0
var payload = new Buffer(context.payload, "base64");

var metrics = [];
var header = payload.readUInt8(0);
var start = 1;

if((header & 128) !== 0){
    metrics.push({name: "temperature", value: payload.readInt8(start)});
    start+=1;
}
if((header & 16) !== 0){

    var temp = payload.readUInt8(start);
    var lat_deg10 = temp >> 4;
    var lat_deg1 = temp - (lat_deg10 * 16);
    var lat_deg = lat_deg10*10+lat_deg1;

    start+=1;
    temp = payload.readUInt8(start);
    var lat_min = (temp >> 4) * 10 + (temp & 0x0f);
    start+=1;
    temp = payload.readUInt8(start);
    var temp1 = payload.readUInt8(start+1);
    var lat_min_dec = (temp >> 4)/10 + (temp & 0x0f)/100 + (temp1 >> 4)/1000;
    var lat = lat_deg+(lat_min+lat_min_dec)/60;
    if ((temp1 & 0x0f) == 8){
        lat=-lat;
    }
    start+=2;
    
    temp = payload.readUInt8(start);
    temp1 = payload.readUInt8(start+1);
    var long_deg100 = temp >> 4;
    var long_deg10 = temp - (long_deg10 << 4);
    var long_deg1 = temp1 >> 4;
    var long_deg = long_deg100*100+long_deg10*10+long_deg1;
    var long_min10 = temp1 & 0x0f;
    start+=2;
    temp = payload.readUInt8(start);
    temp1 = payload.readUInt8(start+1);
    var long_min1 = temp >> 4;
    var long_min_d1 = temp & 0x0f;
    var long_min_d2 = temp1 >> 4;
    var long = long_deg + (long_min10*10+long_min1+long_min_d1/10+long_min_d2/100)/60;
    if((temp1 &0x01) == 1){
        long = -long;
    }
   var latlong = 1;
}

if(latlong==1){
    context.value = {
        metrics: metrics,
        gps: {
            latitude: lat,
            longitude: long
        }
    };   
} else{
    context.value = {
        metrics: metrics,
        gps: {
            latitude: null,
            longitude: null
        }
    };   
}