UNPKG

@lora-contrib/node-red-contrib-payload-parser

Version:

Parse Lora payload

69 lines (64 loc) 2.34 kB
function converter(buffer, type){ var bufferValue = null; switch (type) { case 'int': if (buffer.length == 1){ bufferValue = buffer.readUInt8(0); }else if (buffer.length == 2){ bufferValue = buffer.readUInt16BE(0); }else if (buffer.length == 3){ buffer = Buffer.concat([new Buffer([0x00]), buffer], 4); bufferValue = buffer.readUInt32BE(0); }else if (buffer.length == 4){ bufferValue = buffer.readUInt32BE(0); }else{ bufferValue = buffer.readUIntBE(0, buffer.length); } break; case 'sint': if (buffer.length == 1){ bufferValue = buffer.readInt8(0); }else if (buffer.length == 2){ bufferValue = buffer.readInt16BE(0); }else if (buffer.length == 3){ buffer = Buffer.concat([new Buffer([0x00]), buffer], 4); bufferValue = buffer.readInt32BE(0); }else if (buffer.length == 4){ bufferValue = buffer.readInt32BE(0); }else{ bufferValue = buffer.readIntBE(0, message.length); } break; case 'float32': case 'float': bufferValue = Math.round(buffer.readFloatBE(0) * 100) / 100 ; break; case 'float64': case 'double': bufferValue = Math.round(buffer.readDoubleBE(0) * 100) / 100 ; break; case 'bin': bufferValue = hex2Bin(buffer.toString('hex')); break; case 'boolean': bufferValue = hexToBool(buffer.toString('hex'), 0); break; case 'hex': bufferValue = buffer.toString('hex'); break; default: /* 'txt' */ bufferValue = buffer.toString(); break; } return bufferValue; } function hexToBool(hex, index){ if (index >= hex.length*4) return null; return Boolean(parseInt(hex2Bin(hex).charAt(index))); } function hex2Bin(n){ if(!checkHex(n))return null; return parseInt(n,16).toString(2); } function checkHex(n){return/^[0-9A-Fa-f]{1,64}$/.test(n)} exports.converter = converter;