// Décodeur LoRaWAN officiel : DDS20-LB (Dragino) // Source : https://github.com/TheThingsNetwork/lorawan-devices/blob/master/vendor/dragino/dds20-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 datalog(i,bytes){\n var aa=(bytes[0+i]<<8 |bytes[1+i])/1000\n var bb=bytes[2+i]<<8 |bytes[3+i]\n var cc=bytes[4+i]<<8 |bytes[5+i]\n var dd=(bytes[6+i]&0x01)?\"YES\":\"NO\"; \n var ee=((bytes[6+i]>>1)&0x01)?\"TRUE\":\"FALSE\"; \n var ff=(bytes[6+i]&0x40)?\"1\":\"0\"; \n var gg= getMyDate((bytes[7+i]<<24 | bytes[8+i]<<16 | bytes[9+i]<<8 | bytes[10+i]).toString(10));\n var string='['+aa+','+bb+','+cc+','+dd+','+ee+','+ff+','+gg+']'+','; \n \n return string;\n}\nfunction getzf(c_num){ \n if(parseInt(c_num) < 10)\n c_num = '0' + c_num; \n\n return c_num; \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}\nfunction Decode(fPort, bytes, variables) {\n // Decode an uplink message from a buffer\n // (array) of bytes to an object of fields.\n if(fPort==0x02) \n {\nvar value=(bytes[0]<<8 | bytes[1]) & 0x3FFF;\n var batV=value/1000;//Battery,units:V\n \n value=bytes[2]<<8 | bytes[3];\n var distance=(value);//distance,units:mm\n\n var i_flag = bytes[4]; \n \n value=bytes[5]<<8 | bytes[6];\n if(bytes[5] & 0x80)\n {value |= 0xFFFF0000;}\n var temp_DS18B20=(value/10).toFixed(2);//DS18B20,temperature \n \n var s_flag = bytes[7]; \n return {\n battery:batV,\n distance:distance,\n interrupt_flag:i_flag,\n temperature_pro:temp_DS18B20,\n sensor_flag:s_flag,\n };\n}\n else if(fPort==0x03) \n {\n var pnack= ((bytes[0]>>7)&0x01) ? \"True\":\"False\";\n for(var i=0;i>4&0x0f)+'.'+(bytes[2]&0x0f);\n var bat= ((bytes[5]<<8 | bytes[6]) & 0x3FFF)/1000\n \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 }