UNPKG

n8n-nodes-modbus-trigger

Version:

n8n node to trigger Modbus Address on change

66 lines 2.38 kB
"use strict"; 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