UNPKG

@svrooij/sunspec

Version:
58 lines 1.75 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SunspecConverter = void 0; class SunspecConverter { static computeWithFactor(value, factor) { const decimals = SunspecConverter.int16(factor); const actualValue = value * SunspecConverter.factor(decimals); if (decimals < 0) { const rounding = Math.pow(10, decimals * -1); return Math.round(actualValue * rounding) / rounding; } return actualValue; } static int16(uint) { return (uint << 16) >> 16; } static factor(int16) { return Math.pow(10, int16); } /** * Convert a uint to 2 letters * * @static * @param {number} uint Value from a register * @returns {string} * @memberof SunspecConverter */ static chars(uint) { if (uint === 0) { return ""; } // Sample input: 21359 becomes 'So' // Take the first letter by shifting 8 bytes const first = uint >> 8; // holds 83 = ascii 'S' let last = uint % 256; // Take the remainder holds 111 = ascii 'o' if (last === 0) { return String.fromCharCode(first); } return String.fromCharCode(first, last); } /** * Converts multiple numbers containing a string to the original string * * @static * @param {number[]} uints * @returns {string} * @memberof SunspecConverter */ static string(uints) { let output = ""; uints.forEach(v => { output += SunspecConverter.chars(v); }); return output.trim(); } } exports.SunspecConverter = SunspecConverter; //# sourceMappingURL=sunspec-converter.js.map