smartmeter2mqtt
Version:
Publish data from your Smartmeter with a P1 interface to your MQTT server.
113 lines • 5.9 kB
JavaScript
;
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