node-red-contrib-powersaver-adapter
Version:
A Node-RED adapter that converts 15-minute (quarterly) electricity price data into hourly values for use with PowerSaver.no nodes.
42 lines (35 loc) • 1.13 kB
JavaScript
module.exports = function (RED) {
function quartersToHours(array) {
if (!Array.isArray(array)) return [];
let hours = [];
for (let i = 0; i < array.length; i += 4) {
let group = array.slice(i, i + 4);
let avg =
group.reduce((sum, obj) => sum + Number(obj.value), 0) / group.length;
hours.push({ value: avg, start: group[0].start });
}
return hours;
}
function PowerSaverAdapterNode(config) {
RED.nodes.createNode(this, config);
const node = this;
node.on("input", function (msg, send, done) {
try {
const data = msg?.payload?.priceData;
if (!Array.isArray(data)) {
node.warn("msg.payload.priceData is not an array");
send ? send(msg) : node.send(msg);
if (done) done();
return;
}
msg.payload.priceData = quartersToHours(data);
send ? send(msg) : node.send(msg);
if (done) done();
} catch (err) {
node.error(err.message, msg);
if (done) done(err);
}
});
}
RED.nodes.registerType("powersaver-adapter", PowerSaverAdapterNode);
};