// Décodeur LoRaWAN officiel : WSC2-LB (Dragino) // Source : https://github.com/TheThingsNetwork/lorawan-devices/blob/master/vendor/dragino/wsc2-lb.js // The Things Network Device Repository, fichier publié par le constructeur, distribué sans modification. // Format : decodeUplink(input) (TTN v3 / ChirpStack v4). Hébergé par smartbuildings.fr. function decodeUplink(input) {\n return { \n data: Decode(input.fPort, input.bytes, input.variables)\n }; \n}\nfunction Decode(fPort, bytes, variables) {\n var data = {};\n var decode = {};\n var value;\n var mod=(bytes[33]>>7)&0x01;\n var factor=(bytes[33])&0x0F; \n var divisor=bytes[34]; \nif(fPort==0x02)\n {\n decode.battery=((bytes[0]<<8 | bytes[1]) & 0x3FFF)/1000; decode.Payload_Ver=bytes[2];\n decode.rain=(bytes[3]<<24 |bytes[4]<<16 |bytes[5]<<8 | bytes[6])*(factor/divisor); \n value=bytes[7]<<8 | bytes[8];\n if(bytes[7] & 0x80)\n {value |= 0xFFFF0000;}\n decode.temperature_pro=(value/10).toFixed(2);\n decode.wind_speed=((bytes[9]<<8 | bytes[10])/100).toFixed(2);\n decode.wind_level=bytes[11]<<8 | bytes[12];\n decode.wind_direction=bytes[13]<<8 | bytes[14];\n decode.wind_angle=bytes[15]<<8 | bytes[16];\n\n decode.humidity=((bytes[17]<<8 | bytes[18])/10).toFixed(1);\n decode.temperature=((bytes[19]<<8 | bytes[20])/10).toFixed(1);\n \n decode.noise=((bytes[21]<<8 | bytes[22])/10).toFixed(1);\n if(mod===0)\n decode.co2=bytes[23]<<8 | bytes[24];\n else\n {\n decode.pm2_5=bytes[23]<<8 | bytes[24];\n decode.pm10=bytes[25]<<8 | bytes[26];\n }\n decode.pressure=((bytes[27]<<8 | bytes[28])/10).toFixed(1);\n decode.illumination=(bytes[29]<<24 |bytes[30]<<16 |bytes[31]<<8 | bytes[32]) >>>0; \n \n decode.s_flag = (bytes[33]>>6)&0x01;\n decode.i_flag = (bytes[33]>>5)&0x01;\n decode.mod = mod;\n \n decode.A1 = bytes[36]<<8 | bytes[37];\n decode.A2 = bytes[40]<<8 | bytes[41];\n decode.A3 = bytes[44]<<8 | bytes[45];\n decode.A4 = bytes[48]<<8 | bytes[49];\n \n return decode;\n }\n\nelse if(fPort==0x05)\n {\n var sub_band;\n var freq_band;\n var sensor;\n \n if(bytes[0]==0x2E)\n sensor= \"WSC2-L\";\n \n if(bytes[4]==0xff)\n sub_band=\"NULL\";\n else\n sub_band=bytes[4];\n \n if(bytes[3]==0x01)\n freq_band=\"EU868\";\n else if(bytes[3]==0x02)\n freq_band=\"US915\";\n else if(bytes[3]==0x03)\n freq_band=\"IN865\";\n else if(bytes[3]==0x04)\n freq_band=\"AU915\";\n else if(bytes[3]==0x05)\n freq_band=\"KZ865\";\n else if(bytes[3]==0x06)\n freq_band=\"RU864\";\n else if(bytes[3]==0x07)\n freq_band=\"AS923\";\n else if(bytes[3]==0x08)\n freq_band=\"AS923_1\";\n else if(bytes[3]==0x09)\n freq_band=\"AS923_2\";\n else if(bytes[3]==0x0A)\n freq_band=\"AS923_3\";\n else if(bytes[3]==0x0F)\n freq_band=\"AS923_4\";\n else if(bytes[3]==0x0B)\n freq_band=\"CN470\";\n else if(bytes[3]==0x0C)\n freq_band=\"EU433\";\n else if(bytes[3]==0x0D)\n freq_band=\"KR920\";\n else if(bytes[3]==0x0E)\n freq_band=\"MA869\";\n \n var firm_ver= (bytes[1]&0x0f)+'.'+(bytes[2]>>4&0x0f)+'.'+(bytes[2]&0x0f);\n bat= (bytes[5]<<8 | bytes[6])/1000;\n return {\n SENSOR_MODEL:sensor,\n FIRMWARE_VERSION:firm_ver,\n FREQUENCY_BAND:freq_band,\n SUB_BAND:sub_band,\n battery:bat,\n };\n }\n}