function Decoder(bytes, port) {
//Payload Formats of LSN50 Deceive, for TTN/ChirpStack
return {

    //Work mode 
    Work_mode:
    {
      "0":"IIC",
      "1":"Distance",
      "2":"3ADC",
      "3":"3DS18B20",
      "4":"Weight",
    }[(bytes[6] & 0x7C)>>2],

    //Battery,units:V
    BatV:
    {
      "0": (bytes[0]<<8 | bytes[1])/1000,
      "1": (bytes[0]<<8 | bytes[1])/1000,
      "2": bytes[11]/10,
      "3": (bytes[0]<<8 | bytes[1])/1000,
      "4": (bytes[0]<<8 | bytes[1])/1000,
    }[(bytes[6] & 0x7C)>>2],
    
    //DS18B20,PB3,units:℃
    TempC1:
    {
      "0": ((bytes[2]<<24>>16 | bytes[3])/10).toFixed(2),
      "1": ((bytes[2]<<24>>16 | bytes[3])/10).toFixed(2),
      "3": ((bytes[2]<<24>>16 | bytes[3])/10).toFixed(2),
      "4": ((bytes[2]<<24>>16 | bytes[3])/10).toFixed(2),
    }[(bytes[6] & 0x7C)>>2],
    
    //ADC Channel 0,PA0,units:V
    ADC_CH0V:
    {
      "0":(bytes[4]<<8 | bytes[5])/1000,
      "1":(bytes[4]<<8 | bytes[5])/1000,
      "2": (bytes[0]<<8 | bytes[1])/1000,
      "3":(bytes[4]<<8 | bytes[5])/1000,
      "4":(bytes[4]<<8 | bytes[5])/1000,
    }[(bytes[6] & 0x7C)>>2],
    
    //Digital Input Status,PA12
    Digital_IStatus:
    {
      "0":(bytes[6] & 0x02)? "H":"L",
      "1":(bytes[6] & 0x02)? "H":"L",
      "2":(bytes[6] & 0x02)? "H":"L",
      "3":(bytes[6] & 0x02)? "H":"L",
      "4":(bytes[6] & 0x02)? "H":"L",
    }[(bytes[6] & 0x7C)>>2],    
    
    //GPIO_MODE_IT_FALLING,PB14
    EXTI_Trigger:
    {
      "0":(bytes[6] & 0x01)? "TRUE":"FALSE",
      "1":(bytes[6] & 0x01)? "TRUE":"FALSE",
      "2":(bytes[6] & 0x01)? "TRUE":"FALSE",
      "3":(bytes[6] & 0x01)? "TRUE":"FALSE",
      "4":(bytes[6] & 0x01)? "TRUE":"FALSE",
    }[(bytes[6] & 0x7C)>>2],    
    
    //Status of door sensor,PB14 
    Door_status:
    {
      "0": (bytes[6] & 0x80)? "CLOSE":"OPEN",
      "1": (bytes[6] & 0x80)? "CLOSE":"OPEN",
      "2": (bytes[6] & 0x80)? "CLOSE":"OPEN",
      "3": (bytes[6] & 0x80)? "CLOSE":"OPEN",
      "4": (bytes[6] & 0x80)? "CLOSE":"OPEN",
    }[(bytes[6] & 0x7C)>>2],
    
    //SHT2X,SHT3X temperature,PB6,PB7,units:℃
    TempC_SHT:
    {
      "0":((bytes[7]<<24>>16 | bytes[8])/10).toFixed(2),
      "2":((bytes[7]<<24>>16 | bytes[8])/10).toFixed(2),
    }[(bytes[6] & 0x7C)>>2],    
    //SHT2X,SHT3X Humidity,PB6,PB7,units:%
    Hum_SHT:
    {
      "0": ((bytes[9]<<8 | bytes[10])/10) .toFixed(1),
      "2": ((bytes[9]<<8 | bytes[10])/10) .toFixed(1),
    }[(bytes[6] & 0x7C)>>2],
    
    //Distance,PA11,PB12,units:cm;
    Distance:
    {
      "1":((bytes[7]<<8 | bytes[8])/10) .toFixed(1),
    }[(bytes[6] & 0x7C)>>2],
    
    //ADC Channel 1,PA1,units:V
    ADC_CH1V:
    {
      "2":(bytes[2]<<8 | bytes[3])/1000,
    }[(bytes[6] & 0x7C)>>2],
    //ADC Channel 4,PA4,units:V
    ADC_CH4V:
    {
      "2":(bytes[4]<<8 | bytes[5])/1000,
    }[(bytes[6] & 0x7C)>>2],
  
    //DS18B20,PA9,units:℃
    TempC2:
    {
      "3":((bytes[7]<<24>>16 | bytes[8])/10).toFixed(2),
    }[(bytes[6] & 0x7C)>>2],
    //DS18B20,PA10,units:℃
    TempC3:
    {
      "3":((bytes[9]<<24>>16 | bytes[10])/10).toFixed(2),
    }[(bytes[6] & 0x7C)>>2],
  
    //Weight,PA11,PB12,units:g;
    Weight:
    {
      "4":(bytes[7]<<24>>16 | bytes[8]),
    }[(bytes[6] & 0x7C)>>2],
  
    };
    
  }