// Décodeur LoRaWAN officiel : WQS-LB (Dragino) // Source : https://github.com/TheThingsNetwork/lorawan-devices/blob/master/vendor/dragino/wqs-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}\n\nfunction Str1(str2){\n var str3 =\"\";\n for (var i=0;i>5)&0x01)==1)\n {\n gg=parseFloat(((bytes[0+i+k*2]<<24>>16 | bytes[1+i+k*2])/10).toFixed(1));\n if(k<3)\n {\n bb[k]=gg;\n k++;\n } \n }\n if(((aa>>4)&0x01)==1)\n {\n gg=parseFloat(((bytes[0+i+k*2]<<24>>16 | bytes[1+i+k*2])/100).toFixed(2)); \n if(k<3)\n {\n bb[k]=gg;\n k++;\n } \n }\n if(((aa>>3)&0x01)==1)\n {\n gg=parseFloat(bytes[0+i+k*2]<<24>>16 | bytes[1+i+k*2]);\n if(k<3)\n {\n bb[k]=gg;\n k++;\n } \n }\n if(((aa>>2)&0x01)==1)\n {\n gg=parseFloat((bytes[0+i+k*2]<<24>>16 | bytes[1+i+k*2])*10);\n if(k<3)\n {\n bb[k]=gg;\n k++;\n } \n }\n if(((aa>>1)&0x01)==1)\n {\n gg=parseFloat(bytes[0+i+k*2]<<24>>16 | bytes[1+i+k*2]);\n if(k<3)\n {\n bb[k]=gg;\n k++;\n } \n }\n if(((aa)&0x01)==1)\n {\n gg=parseFloat(((bytes[0+i+k*2]<<24>>16 | bytes[1+i+k*2])/100).toFixed(2));\n if(k<3)\n {\n bb[k]=gg;\n k++;\n } \n } \n \n var ee= getMyDate((bytes[7+i]<<24 | bytes[8+i]<<16 | bytes[9+i]<<8 | bytes[10+i]).toString(10));\n var string='['+bb[0]+','+bb[1]+','+bb[2]+','+ee+']'+','; \n \n return string;\n}\n\nfunction getzf(c_num){ \n if(parseInt(c_num) < 10)\n c_num = '0' + c_num; \n\n return c_num; \n}\n\nfunction getMyDate(str){ \n var c_Date;\n if(str > 9999999999)\n c_Date = new Date(parseInt(str));\n else \n c_Date = new Date(parseInt(str) * 1000);\n \n var c_Year = c_Date.getFullYear(), \n c_Month = c_Date.getMonth()+1, \n c_Day = c_Date.getDate(),\n c_Hour = c_Date.getHours(), \n c_Min = c_Date.getMinutes(), \n c_Sen = c_Date.getSeconds();\n var c_Time = c_Year +'-'+ getzf(c_Month) +'-'+ getzf(c_Day) +' '+ getzf(c_Hour) +':'+ getzf(c_Min) +':'+getzf(c_Sen); \n \n return c_Time;\n}\n\n\nfunction Decode(fPort, bytes, variables) {\n var data = {};\n var decode = {};\n if(fPort==0x02)\n {\n decode.battery=((bytes[0]<<8 | bytes[1]) & 0x3FFF)/1000;//Battery,units:V\n\n var value=bytes[2]<<8 | bytes[3];\n if(bytes[2] & 0x80)\n {value |= 0xFFFF0000;}\n decode.temperature_pro=(value/10).toFixed(2);//DS18B20,temperature\n decode.i_flag = (bytes[4]>>7)&0x01;\n var sensor_type=(bytes[4])&0x3F;\n var j=5;\n if(((sensor_type>>5)&0x01)==1)\n {\n decode.turbidity=(bytes[j]<<8 | bytes[j+1])/10;\n j=2+j;\n }\n if(((sensor_type>>4)&0x01)==1)\n {\n decode.dissolved_oxygen=(bytes[j]<<8 | bytes[j+1])/100;\n j=2+j;\n }\n if(((sensor_type>>3)&0x01)==1)\n {\n decode.ORP=(bytes[j]<<24>>16 | bytes[j+1]); \n j=2+j;\n }\n if(((sensor_type>>2)&0x01)==1)\n {\n decode.EC_K10=(bytes[j]<<8 | bytes[j+1])*10;\n j=2+j; \n }\n if(((sensor_type>>1)&0x01)==1)\n {\n decode.EC_K1=bytes[j]<<8 | bytes[j+1]; \n j=2+j; \n }\n if(((sensor_type)&0x01)==1)\n {\n decode.PH=(bytes[j]<<8 | bytes[j+1])/100; \n j=2+j; \n }\n return decode;\n }\n \n else if(fPort==3) \n {\n var pnack= ((bytes[6]>>7)&0x01) ? \"True\":\"False\";\n for(var i=0;i>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}\n\n }