UNPKG

smartmeter2mqtt

Version:

Publish data from your Smartmeter with a P1 interface to your MQTT server.

113 lines 5.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var P1Map = /** @class */ (function () { function P1Map() { } P1Map.parseLine = function (line) { if (line && line.length > 0) { var identifier_1 = line.substr(0, line.indexOf('(')); var values = P1Map.stringsInBrackets(line); var result = { id: identifier_1, rawValues: values }; var mapping = P1Map.mapping.find(function (m) { return m.id === identifier_1; }); if (mapping) { result.name = mapping.name; if (mapping.valueRetriever) { result.value = mapping.valueRetriever(values); delete result.rawValues; } } return result; } return undefined; }; P1Map.stringsInBrackets = function (line) { var matches = line.match(/\((.*?)\)/g); if (matches) { return matches.map(function (value) { return value.replace(/[()]/g, ''); }); } return undefined; }; P1Map.getFirstString = function (values) { if (values) return values[0]; return undefined; }; P1Map.parseFirstFloat = function (values) { return P1Map.parseFloat(P1Map.getFirstString(values)); }; P1Map.parseFloat = function (input) { if (input === undefined) { return undefined; } var parsableValue = input.substr(0, input.indexOf('*')); return parseFloat(parsableValue); }; P1Map.parseFirstInt = function (values) { var _a; return parseInt((_a = P1Map.getFirstString(values)) !== null && _a !== void 0 ? _a : '0', 10); }; P1Map.parseFirstTimestamp = function (values) { return P1Map.parseTimestamp(P1Map.getFirstString(values)); }; P1Map.parseTimestamp = function (value) { if (value === undefined) { return undefined; } var parts = value.match(/.{1,2}/g); if (parts === null) { return undefined; } var dateString = "20" + parts[0] + "-" + parts[1] + "-" + parts[2] + "T" + parts[3] + ":" + parts[4] + ":" + parts[5]; return dateString; }; P1Map.parseGasValue = function (values) { if (values !== undefined && values.length >= 2) { return { ts: P1Map.parseTimestamp(values[0]), totalUse: P1Map.parseFloat(values[1]), }; } return undefined; }; P1Map.mapping = [ { id: '0-0:1.0.0', name: 'powerTs', valueRetriever: P1Map.parseFirstTimestamp }, { id: '0-0:96.1.1', name: 'powerSn', valueRetriever: P1Map.getFirstString }, { id: '0-0:96.14.0', name: 'currentTarrif', valueRetriever: P1Map.parseFirstInt }, { id: '0-0:96.7.21', name: 'powerFailures', valueRetriever: P1Map.parseFirstInt }, { id: '0-0:96.7.9', name: 'longPowerFailures', valueRetriever: P1Map.parseFirstInt }, { id: '0-1:24.1.0', name: 'xDeviceType', valueRetriever: P1Map.getFirstString }, { id: '0-1:24.2.1', name: 'xGas', valueRetriever: P1Map.parseGasValue }, { id: '0-1:96.1.0', name: 'xGasSn', valueRetriever: P1Map.getFirstString }, { id: '0-2:24.1.0', name: 'deviceType', valueRetriever: P1Map.getFirstString }, { id: '0-2:24.2.1', name: 'gas', valueRetriever: P1Map.parseGasValue }, { id: '0-2:96.1.0', name: 'gasSn', valueRetriever: P1Map.getFirstString }, { id: '1-0:1.7.0', name: 'currentUsage', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:1.8.1', name: 'totalT1Use', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:1.8.2', name: 'totalT2Use', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:2.7.0', name: 'currentDelivery', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:2.8.1', name: 'totalT1Delivered', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:2.8.2', name: 'totalT2Delivered', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:21.7.0', name: 'currentUsageL1', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:22.7.0', name: 'currentDeliveryL1', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:31.7.0', name: 'currentL1', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:32.32.0', name: 'voltageSagsL1', valueRetriever: P1Map.parseFirstInt }, { id: '1-0:32.36.0', name: 'voltageSwellsL1', valueRetriever: P1Map.parseFirstInt }, { id: '1-0:32.7.0', name: 'voltageL1', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:41.7.0', name: 'currentUsageL2', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:42.7.0', name: 'currentDeliveryL2', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:51.7.0', name: 'currentL2', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:52.32.0', name: 'voltageSagsL2', valueRetriever: P1Map.parseFirstInt }, { id: '1-0:52.36.0', name: 'voltageSwellsL2', valueRetriever: P1Map.parseFirstInt }, { id: '1-0:52.7.0', name: 'voltageL2', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:61.7.0', name: 'currentUsageL3', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:62.7.0', name: 'currentDeliveryL3', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:71.7.0', name: 'currentL3', valueRetriever: P1Map.parseFirstFloat }, { id: '1-0:72.32.0', name: 'voltageSagsL3', valueRetriever: P1Map.parseFirstInt }, { id: '1-0:72.36.0', name: 'voltageSwellsL3', valueRetriever: P1Map.parseFirstInt }, { id: '1-0:72.7.0', name: 'voltageL3', valueRetriever: P1Map.parseFirstFloat }, { id: '1-3:0.2.8', name: 'p1Version', valueRetriever: P1Map.getFirstString }, ]; return P1Map; }()); exports.default = P1Map; //# sourceMappingURL=p1-map.js.map