UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

75 lines (74 loc) 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("core-js/modules/es.parse-int.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.regexp.to-string.js"); require("core-js/modules/es.string.match.js"); require("core-js/modules/esnext.iterator.map.js"); require("core-js/modules/web.dom-collections.iterator.js"); var _MessageType = _interopRequireDefault(require("./../enum/MessageType")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } class GetRequest { constructor() { let cosemAddress = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; let parameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; this.setType = 0x01; this.invokeIdAndPriority = 0; this.cosemClassId = new Array(2).fill(0); this.cosemObjectInstanceId = new Array(6).fill(0); this.cosemObjectAttributeId = new Array(1).fill(0); this.methodInvocationParameters = 0; this.dlmsData = null; this.value = []; this.parameters = []; if (cosemAddress) { this.insertData(cosemAddress, data, parameters); } } insertData(cosemAddress) { let dlmsData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; let parameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; const invokeId = Math.floor(Math.random() * 15) + 1; // Generate random invokeId this.invokeIdAndPriority = 0xC0 + invokeId; this.cosemClassId = [...cosemAddress.classId]; this.cosemObjectInstanceId = [...cosemAddress.instanceId]; this.cosemObjectAttributeId = [...cosemAddress.attributeId]; if (dlmsData) { this.methodInvocationParameters = 1; this.dlmsData = dlmsData; } else if (parameters) { this.methodInvocationParameters = 1; this.parameters = this._stringToBytes(parameters); } } getBytes() { let relay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; const result = []; result.push(_MessageType.default.GET_REQUEST); result.push(this.setType); result.push(this.invokeIdAndPriority); result.push(...this.cosemClassId); result.push(...this.cosemObjectInstanceId); result.push(...this.cosemObjectAttributeId); result.push(this.methodInvocationParameters); if (this.methodInvocationParameters === 1) { if (relay) { result.push(0x87); // Additional byte for relay } result.push(...(this.dlmsData ? this.dlmsData.rawValue : this.parameters)); } this.value = [...result]; return result; } getHexString() { return this.value.map(byte => byte.toString(16).toUpperCase().padStart(2, '0')).join(' '); } _stringToBytes(hexString) { return hexString.match(/.{1,2}/g).map(byte => parseInt(byte, 16)); } } exports.default = GetRequest;