node-red-mpb10
Version:
Nodes para processamento MPB10
40 lines (35 loc) • 1.35 kB
JavaScript
module.exports = function(RED) {
function MPB104AxisNode(config) {
RED.nodes.createNode(this, config);
const node = this;
node.on('input', function(msg) {
const binaryToFloat = bin => {
const buffer = Buffer.alloc(4);
buffer.writeUInt32BE(parseInt(bin, 2), 0);
return buffer.readFloatBE(0);
};
try {
const rawData = msg.payload.slice(10, -2).split(',').slice(0, 16);
const bytes = rawData.map(b =>
parseInt(b,10).toString(2).padStart(8,'0')
);
const axis = [
bytes.slice(0,4),
bytes.slice(4,8),
bytes.slice(8,12),
bytes.slice(12,16)
].map(group => group.join(''));
const outputs = axis.map((bin, idx) => {
const newMsg = RED.util.cloneMessage(msg);
newMsg.payload = binaryToFloat(bin);
newMsg.topic = ['X','Y','Z','A'][idx];
return newMsg;
});
node.send(outputs);
} catch (err) {
node.error("Erro: " + err);
}
});
}
RED.nodes.registerType("mpb10-4axis", MPB104AxisNode);
}