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.
50 lines • 2.3 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.spothinta_convertDataStructure = exports.spothinta_getNordpoolData = void 0;
const axios_1 = __importDefault(require("axios"));
const luxon_1 = require("luxon");
const settings_1 = require("./settings");
async function spothinta_getNordpoolData(log, config) {
const area = config.area.toUpperCase(); // Ensure the area is in uppercase (e.g., SE1, SE2, etc.)
const reqDate = luxon_1.DateTime.now().toFormat('yyyy-MM-dd');
const url = `https://api.spot-hinta.fi/TodayAndDayForward?reqDate=${reqDate}®ion=${area}`;
try {
const response = await axios_1.default.get(url, { timeout: 10000 });
if (response.status !== 200) {
log.warn(`WARN: Nordpool API provider 2 returned unusual response status ${response.status}`);
return null;
}
if (!response.data || response.data.length < 23) {
log.error(`ERR: Nordpool API provider 2 returned unusual data ${JSON.stringify(response.data)}`);
return null;
}
const convertedData = spothinta_convertDataStructure(response.data, config);
return convertedData;
}
catch (error) {
log.error(`ERR: General Nordpool API provider 2 error: ${error}`);
return null;
}
}
exports.spothinta_getNordpoolData = spothinta_getNordpoolData;
function spothinta_convertDataStructure(data, config) {
var _a;
const decimalPrecision = (_a = config.decimalPrecision) !== null && _a !== void 0 ? _a : 1;
return data
.map((item) => {
// Convert timestamp from ISO
const date = luxon_1.DateTime.fromISO(item['DateTime']).setZone((0, settings_1.defaultAreaTimezone)(config));
// Convert price from EUR to Cents per kWh
const price = parseFloat((item['PriceNoTax'] * 100).toFixed(decimalPrecision));
return {
day: date.toFormat('yyyy-MM-dd'),
hour: parseInt(date.toFormat('HH')),
price,
};
});
}
exports.spothinta_convertDataStructure = spothinta_convertDataStructure;
//# sourceMappingURL=funcs_SpotHinta.js.map