function DecodeElsysPayload()

in transform_binary_payload/src-payload-decoders/node/elsys.js [59:208]


function DecodeElsysPayload(data){
    var obj = new Object();
    for(i=0;i<data.length;i++){
        //console.log(data[i]);
        switch(data[i]){
            case TYPE_TEMP: //Temperature
                var temp=(data[i+1]<<8)|(data[i+2]);
                temp=bin16dec(temp);
                obj.temperature=temp/10;
                i+=2;
            break
            case TYPE_RH: //Humidity
                var rh=(data[i+1]);
                obj.humidity=rh;
                i+=1;
            break
            case TYPE_ACC: //Acceleration
                obj.x=bin8dec(data[i+1]);
                obj.y=bin8dec(data[i+2]);
                obj.z=bin8dec(data[i+3]);
                i+=3;
            break
            case TYPE_LIGHT: //Light
                obj.light=(data[i+1]<<8)|(data[i+2]);
                i+=2;
            break
            case TYPE_MOTION: //Motion sensor(PIR)
                obj.motion=(data[i+1]);
                i+=1;
            break
            case TYPE_CO2: //CO2
                obj.co2=(data[i+1]<<8)|(data[i+2]);
                i+=2;
            break
            case TYPE_VDD: //Battery level
                obj.vdd=(data[i+1]<<8)|(data[i+2]);
                i+=2;
            break
            case TYPE_ANALOG1: //Analog input 1
                obj.analog1=(data[i+1]<<8)|(data[i+2]);
                i+=2;
            break
            case TYPE_GPS: //gps
                obj.lat=(data[i+1]<<16)|(data[i+2]<<8)|(data[i+3]);
                obj.long=(data[i+4]<<16)|(data[i+5]<<8)|(data[i+6]);
                i+=6;
            break
            case TYPE_PULSE1: //Pulse input 1
                obj.pulse1=(data[i+1]<<8)|(data[i+2]);
                i+=2;
            break
            case TYPE_PULSE1_ABS: //Pulse input 1 absolute value
                var pulseAbs=(data[i+1]<<24)|(data[i+2]<<16)|(data[i+3]<<8)|(data[i+4]);
                obj.pulseAbs=pulseAbs;
                i+=4;
            break
            case TYPE_EXT_TEMP1: //External temp
                var temp=(data[i+1]<<8)|(data[i+2]);
                temp=bin16dec(temp);
                obj.externalTemperature=temp/10;
                i+=2;
            break
            case TYPE_EXT_DIGITAL: //Digital input
                obj.digital=(data[i+1]);
                i+=1;
            break
            case TYPE_EXT_DISTANCE: //Distance sensor input 
                obj.distance=(data[i+1]<<8)|(data[i+2]);
                i+=2;
            break
            case TYPE_ACC_MOTION: //Acc motion
                obj.accMotion=(data[i+1]);
                i+=1;
            break
            case TYPE_IR_TEMP: //IR temperature
                var iTemp=(data[i+1]<<8)|(data[i+2]);
                iTemp=bin16dec(iTemp);
                var eTemp=(data[i+3]<<8)|(data[i+4]);
                eTemp=bin16dec(eTemp);
                obj.irInternalTemperature=iTemp/10;
                obj.irExternalTemperature=eTemp/10;
                i+=4;
            break
            case TYPE_OCCUPANCY: //Body occupancy
                obj.occupancy=(data[i+1]);
                i+=1;
            break
            case TYPE_WATERLEAK: //Water leak
                obj.waterleak=(data[i+1]);
                i+=1;
            break
            case TYPE_GRIDEYE: //Grideye data
                var ref = data[i+1];
                i++;
                obj.grideye = [];
                for(var j = 0; j < 64; j++) {
                    obj.grideye[j] = ref + (data[1+i+j] / 10.0);
                }
                i += 64;
            break
            case TYPE_PRESSURE: //External Pressure
                var temp=(data[i+1]<<24)|(data[i+2]<<16)|(data[i+3]<<8)|(data[i+4]);
                obj.pressure=temp/1000;
                i+=4;
            break
            case TYPE_SOUND: //Sound
                obj.soundPeak=data[i+1];
                obj.soundAvg=data[i+2];
                i+=2;
            break
            case TYPE_PULSE2: //Pulse 2
                obj.pulse2=(data[i+1]<<8)|(data[i+2]);
                i+=2;
            break
            case TYPE_PULSE2_ABS: //Pulse input 2 absolute value
                obj.pulseAbs2=(data[i+1]<<24)|(data[i+2]<<16)|(data[i+3]<<8)|(data[i+4]);
                i+=4;
            break
            case TYPE_ANALOG2: //Analog input 2
                obj.analog2=(data[i+1]<<8)|(data[i+2]);
                i+=2;
            break
            case TYPE_EXT_TEMP2: //External temp 2
                var temp=(data[i+1]<<8)|(data[i+2]);
                temp=bin16dec(temp);
                if(typeof obj.externalTemperature2 === "number") {
                    obj.externalTemperature2 = [obj.externalTemperature2];
                } 
                if(typeof obj.externalTemperature2 === "object") {
                    obj.externalTemperature2.push(temp / 10);
                } else {
                    obj.externalTemperature2 = temp / 10;
                }
                i+=2;
            break
            case TYPE_EXT_DIGITAL2: //Digital input 2 
                obj.digital2=(data[i+1]); 
                i+=1; 
             break
            case TYPE_EXT_ANALOG_UV: //Load cell analog uV
                obj.analogUv = (data[i + 1] << 24) | (data[i + 2] << 16) | (data[i + 3] << 8) | (data[i + 4]);
                i += 4;
            break
            default: //somthing is wrong with data
                i=data.length;
            break
        }
    }
    return obj;
}