UNPKG

@virtualbat/esios-client

Version:

Utility node to get pmh and pvpc readings.

112 lines (111 loc) 5.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EsiosApiClient = void 0; const core_1 = require("@js-joda/core"); const extra_1 = require("@js-joda/extra"); const src_1 = require("@virtualbat/entities/dist/src"); const axios_1 = __importDefault(require("axios")); require("@js-joda/timezone"); class EsiosApiClient { constructor() { this.pricesTables = null; this.hoursOffset = 0; this.pricesTables = new src_1.PricesTables(); } setHoursOffset(hourOffset) { this.hoursOffset = hourOffset; } getHoursOffset() { return this.hoursOffset; } requestPrices(endPoint, apiToken) { console.log(arguments); return axios_1.default .get(endPoint, { params: { date: core_1.LocalDateTime.now().format(core_1.DateTimeFormatter.ofPattern('yyyy-MM-dd')) }, headers: { "x-api-key": apiToken } }) .then(res => { console.log("QUERY PVPC RESOLVED"); res.data.PVPC.forEach((element) => { var _a, _b; (_a = this.pricesTables) === null || _a === void 0 ? void 0 : _a.addPriceToBuy(EsiosApiClient._getPvpC(element, this.hoursOffset)); // this.pricesTables?.addPricetoSell(EsiosApiClient._getPmh(element)); (_b = this.pricesTables) === null || _b === void 0 ? void 0 : _b.addEnergyTerm(EsiosApiClient._getTEU(element, this.hoursOffset)); }); }); } /** * Request esios indicator. * @param endPoint * @param indicator * @param apiToken * @param onSucess * @param onError * @returns */ requestPriceToSellIndicator(endPoint, apiToken) { let start_time = core_1.LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).format(core_1.DateTimeFormatter.ISO_LOCAL_DATE_TIME); let end_time = core_1.LocalDateTime.now().withHour(23).withMinute(0).withSecond(0).format(core_1.DateTimeFormatter.ISO_LOCAL_DATE_TIME); console.log(arguments, { range: { start_time: start_time, end_time: end_time } }); return axios_1.default .get(endPoint, { params: { start_date: start_time, end_date: end_time }, headers: { 'x-api-key': apiToken } }) .then(res => { console.log("RESPONSE:" + JSON.stringify(res.data)); res.data.indicator.values.forEach((element) => { var _a; let item = new src_1.PriceIntervalItem(); item.setInterval(EsiosApiClient._getValueInterval(element)); item.setPrice(element.value); (_a = this.pricesTables) === null || _a === void 0 ? void 0 : _a.addPricetoSell(item); }); }); } static _getPvpC(serItem, hourOffset) { let item = new src_1.PriceIntervalItem(); item.setInterval(EsiosApiClient._getInterval(serItem, hourOffset)); item.setPrice(parseFloat(serItem.PCB.toString().replace(/,/g, '.'))); return item; } static _getPmh(serItem, hourOffset) { let item = new src_1.PriceIntervalItem(); item.setInterval(EsiosApiClient._getInterval(serItem, hourOffset)); if (serItem.PMHPCB !== undefined) { item.setPrice(parseFloat(serItem.PMHPCB.toString().replace(/,/g, '.'))); } return item; } static _getTEU(serItem, hourOffset) { let item = new src_1.PriceIntervalItem(); item.setInterval(EsiosApiClient._getInterval(serItem, hourOffset)); item.setPrice(parseFloat(serItem.TEUPCB.toString().replace(/,/g, '.'))); return item; } static _getInterval(serItem, hourOffset) { let startHour = Number.parseInt(serItem.Hora.split("-")[0]) + hourOffset; let startDateTime = core_1.LocalDate.parse(serItem.Dia, core_1.DateTimeFormatter.ofPattern("dd/MM/yyyy")).atTime(startHour, 0, 0, 0); let endDateTime = startDateTime.plusHours(1); let startInstant = startDateTime.atZone(core_1.ZoneId.of("Europe/Madrid")).toInstant(); let endInstant = endDateTime.atZone(core_1.ZoneId.of("Europe/Madrid")).toInstant(); return extra_1.Interval.of(startInstant, endInstant); } static _getValueInterval(serItem) { let startDateTime = core_1.LocalDateTime.parse(serItem.datetime, core_1.DateTimeFormatter.ISO_OFFSET_DATE_TIME); let endDateTime = startDateTime.plusHours(1); let startInstant = startDateTime.atZone(core_1.ZoneId.of("Europe/Madrid")).toInstant(); let endInstant = endDateTime.atZone(core_1.ZoneId.of("Europe/Madrid")).toInstant(); return extra_1.Interval.of(startInstant, endInstant); } } exports.EsiosApiClient = EsiosApiClient;