UNPKG

homebridge-nordpool-baltics

Version:

Plugin exposes virtual accessories (switch, light, presence, temperature) and enables HomeKit automation by Nordpool electricity price in Lithuania, Latvia, Estonia, Sweden, Norway, Denmark.

54 lines 2.58 kB
"use strict"; 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) { const start = luxon_1.DateTime.utc().startOf('day').minus({ hours: 4 }).toISO(); const end = luxon_1.DateTime.utc().plus({ days: 1 }).endOf('day').toISO(); const reqDate = luxon_1.DateTime.now().toFormat('yyyy-MM-dd'); const encodedStart = encodeURIComponent(start); const encodedEnd = encodeURIComponent(end); try { const url = `https://d1scxn3suy8jhc.cloudfront.net/?reqDate=${reqDate}&start=${encodedStart}&end=${encodedEnd}`; const response = await axios_1.default.get(url); if (response.status !== 200) { log.warn(`WARN: Nordpool API provider 1 returned unusual response status ${response.status}`); } if (response.data.data) { const convertedData = eleringEE_convertDataStructure(response.data.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 area = config.area.toLowerCase(); const areaTimeZone = (0, settings_1.defaultAreaTimezone)(config); const decimalPrecision = (_a = config.decimalPrecision) !== null && _a !== void 0 ? _a : 1; return data[area].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