homebridge-nordpool-baltics
Version:
Plugin exposes virtual accessories (switch, light, presence, temperature) and enables HomeKit automation by Nordpool electricity price in Lithuania, Latvia, Estonia, Finland, Sweden, Norway, Denmark, Germany, Luxembourg, Austria.
49 lines • 2.29 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.eleringEE_convertDataStructure = exports.eleringEE_getNordpoolData = void 0;
const luxon_1 = require("luxon");
const settings_1 = require("./settings");
const axios_1 = __importDefault(require("axios"));
async function eleringEE_getNordpoolData(log, config) {
// logic and format resembles elering implementation on nordpool-cf/src/worker.js
const url = `https://pub-460c981173fb4262a268d6f273d18dd2.r2.dev/elering_${config.area.toUpperCase()}.json`;
try {
const response = await axios_1.default.get(url, { timeout: 10000 });
if (response.status !== 200) {
log.warn(`WARN: Nordpool API provider 1 returned unusual response status ${response.status}`);
}
if (response.data) {
const convertedData = eleringEE_convertDataStructure(response.data, config);
return convertedData;
}
else {
log.error(`ERR: Nordpool API provider 1 returned unusual data ${JSON.stringify(response.data)}`);
}
}
catch (error) {
log.error(`ERR: General Nordpool API provider 1 error: ${error}`);
}
return null;
}
exports.eleringEE_getNordpoolData = eleringEE_getNordpoolData;
function eleringEE_convertDataStructure(data, config) {
var _a;
const areaTimeZone = (0, settings_1.defaultAreaTimezone)(config);
const decimalPrecision = (_a = config.decimalPrecision) !== null && _a !== void 0 ? _a : 1;
return data.map((item) => {
// convert the timestamp to ISO string, then to timezone in the area
const date = luxon_1.DateTime.fromISO(new Date(item.timestamp * 1000).toISOString()).setZone(areaTimeZone);
// divide by 10 to convert price to cents per kWh
item.price = parseFloat((item.price / 10).toFixed(decimalPrecision));
return {
day: date.toFormat('yyyy-MM-dd'),
hour: parseInt(date.toFormat('HH')),
price: item.price,
};
});
}
exports.eleringEE_convertDataStructure = eleringEE_convertDataStructure;
//# sourceMappingURL=funcs_Elering.js.map