n8n-nodes-modbus-trigger
Version:
n8n node to trigger Modbus Address on change
66 lines • 2.38 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractModbusData = exports.registerCount = exports.createClient = void 0;
const modbus_stream_1 = __importDefault(require("modbus-stream"));
const n8n_workflow_1 = require("n8n-workflow");
const createClient = async (credentials) => {
const { host, port, timeout = 5000 } = credentials;
return new Promise((resolve, reject) => {
modbus_stream_1.default.tcp.connect(port, host, { debug: null, connectTimeout: timeout }, (err, client) => {
if (err) {
reject(new n8n_workflow_1.ApplicationError(err.message));
return;
}
resolve(client);
});
});
};
exports.createClient = createClient;
function registerCount(dataType) {
if (dataType.endsWith('32'))
return 2;
if (dataType.endsWith('64'))
return 4;
return 1;
}
exports.registerCount = registerCount;
function extractModbusData(node, data, dataType) {
const registersPerItem = registerCount(dataType);
if (data.length % registersPerItem !== 0) {
throw new n8n_workflow_1.NodeOperationError(node, 'MODBUS Error: data is not aligned');
}
const mergedData = [];
for (let i = 0; i < data.length; i += registersPerItem) {
if (registersPerItem === 1) {
mergedData.push(data[i]);
}
else {
const buf = Buffer.alloc(registersPerItem * 2);
for (let j = 0; j < registersPerItem; j++) {
data[i + j].copy(buf, j * 2);
}
mergedData.push(buf);
}
}
return mergedData.map((buffer) => {
switch (dataType) {
case 'int16':
return buffer.readInt16BE();
case 'uint16':
return buffer.readUInt16BE();
case 'int32':
return buffer.readInt32BE();
case 'uint32':
return buffer.readUInt32BE();
case 'int64':
return buffer.readBigInt64BE();
case 'uint64':
return buffer.readBigUInt64BE();
}
});
}
exports.extractModbusData = extractModbusData;
//# sourceMappingURL=GenericFunctions.js.map