function decodeUplink(input) {
        return { 
            data: Decode(input.fPort, input.bytes, input.variables)
        };   
}
function Decode(fPort, bytes, variables) {

var mode=(bytes[6] & 0x7C)>>2;

var decode = {};
decode.Node_type="LSN50-D23";

if((mode!=2)&&(mode!=31))

{

  decode.BatV=(bytes[0]<<8 | bytes[1])/1000;

  decode.TempC1= parseFloat(((bytes[2]<<24>>16 | bytes[3])/10).toFixed(2));

  decode.ADC_CH0V=(bytes[4]<<8 | bytes[5])/1000;

  decode.Digital_IStatus=(bytes[6] & 0x02)? "H":"L";

  if(mode!=6)

  {

	 decode.EXTI_Trigger=(bytes[6] & 0x01)? "TRUE":"FALSE";

  decode.Door_status=(bytes[6] & 0x80)? "CLOSE":"OPEN";

  }

}



if(mode=='0')

{

  decode.Work_mode="IIC";

  if((bytes[9]<<8 | bytes[10])===0)

  {

    decode.Illum=(bytes[7]<<24>>16 | bytes[8]);

  }

  else

  {

  decode.TempC_SHT=parseFloat(((bytes[7]<<24>>16 | bytes[8])/10).toFixed(2));

  decode.Hum_SHT=parseFloat(((bytes[9]<<8 | bytes[10])/10).toFixed(1));

  }

}

else if(mode=='1')

{

  decode.Work_mode=" Distance";

  decode.Distance_cm=parseFloat(((bytes[7]<<8 | bytes[8])/10) .toFixed(1));

  if((bytes[9]<<8 | bytes[10])!=65535)

  {

    decode.Distance_signal_strength=parseFloat((bytes[9]<<8 | bytes[10]) .toFixed(0));

  }

}

else if(mode=='2')

{

  decode.Work_mode=" 3ADC";

  decode.BatV=bytes[11]/10;

  decode.ADC_CH0V=(bytes[0]<<8 | bytes[1])/1000;

  decode.ADC_CH1V=(bytes[2]<<8 | bytes[3])/1000;

  decode.ADC_CH4V=(bytes[4]<<8 | bytes[5])/1000;

  decode.Digital_IStatus=(bytes[6] & 0x02)? "H":"L";

  decode.EXTI_Trigger=(bytes[6] & 0x01)? "TRUE":"FALSE";

  decode.Door_status=(bytes[6] & 0x80)? "CLOSE":"OPEN";

  if((bytes[9]<<8 | bytes[10])===0)

  {

    decode.Illum=(bytes[7]<<24>>16 | bytes[8]);

  }

  else

  {

  decode.TempC_SHT=parseFloat(((bytes[7]<<24>>16 | bytes[8])/10).toFixed(2));

  decode.Hum_SHT=parseFloat(((bytes[9]<<8 | bytes[10])/10) .toFixed(1));

  }

}

else if(mode=='3')

{

  decode.Work_mode="3DS18B20";

  decode.TempC2=parseFloat(((bytes[7]<<24>>16 | bytes[8])/10).toFixed(2));

  decode.TempC3=parseFloat(((bytes[9]<<24>>16 | bytes[10])/10) .toFixed(1));

  

}

else if(mode=='4')

{

  decode.Work_mode="Weight";

  decode.Weight=(bytes[7]<<24>>16 | bytes[8]);

}

else if(mode=='5')

{

  decode.Work_mode="Count";

  decode.Count=(bytes[7]<<24 | bytes[8]<<16 | bytes[9]<<8 | bytes[10]);

}

else if(mode=='31')

{

  decode.Work_mode="ALARM";

  decode.BatV=(bytes[0]<<8 | bytes[1])/1000;

  decode.TempC1= parseFloat(((bytes[2]<<24>>16 | bytes[3])/10).toFixed(2));

  decode.TempC1MIN= bytes[4]<<24>>24;

  decode.TempC1MAX= bytes[5]<<24>>24; 

  decode.SHTEMPMIN= bytes[7]<<24>>24;

  decode.SHTEMPMAX= bytes[8]<<24>>24;   

  decode.SHTHUMMIN= bytes[9];

  decode.SHTHUMMAX= bytes[10];    

}



  if((bytes.length==11)||(bytes.length==12))

  {

  return decode;

  }

}