UNPKG

node-red-contrib-power-saver

Version:

A module for Node-RED that you can use to turn on and off a switch based on power prices

108 lines (94 loc) 3.21 kB
const cloneDeep = require("lodash.clonedeep"); const { DateTime } = require("luxon"); const testPlan = { schedule: [ { time: "2021-06-20T01:50:00.000+02:00", value: true }, { time: "2021-06-20T01:50:00.020+02:00", value: false }, { time: "2021-06-20T01:50:00.040+02:00", value: true }, { time: "2021-06-20T01:50:00.050+02:00", value: false }, { time: "2021-06-20T01:50:00.080+02:00", value: true }, { time: "2021-06-20T01:50:00.100+02:00", value: false }, { time: "2021-06-20T01:50:00.120+02:00", value: true }, { time: "2021-06-20T01:50:00.130+02:00", value: false }, { time: "2021-06-20T01:50:00.140+02:00", value: true }, { time: "2021-06-20T01:50:00.150+02:00", value: false }, { time: "2021-06-20T01:50:00.180+02:00", value: true }, ], time: "2021-06-20T01:50:00+02:00", }; function makePayload(prices, time) { const payload = cloneDeep(prices); payload.time = time; let entryTime = DateTime.fromISO(payload.time); payload.today.forEach((e) => { e.start = entryTime.toISO(); entryTime = entryTime.plus({ milliseconds: 10 }); e.end = entryTime.toISO(); }); payload.tomorrow?.forEach((e) => { e.start = entryTime.toISO(); entryTime = entryTime.plus({ milliseconds: 10 }); e.end = entryTime.toISO(); }); return payload; } function equalPlan(expected, actual, compareHours = false) { let res = true; if (!equalSchedule(expected.schedule, actual.schedule)) { res = false; } if (compareHours && !equalMinutes(expected.minutes, actual.minutes)) { res = false; } // ["maxHoursToSaveInSequence", "minHoursOnAfterMaxSequenceSaved", "minSaving", "outputIfNoSchedule"].forEach((key) => { // if (expected.config[key] != actual.config[key]) { // console.log( // "Different config values for " + key + ": Expected " + expected.config[key] + ", got " + actual.config[key] // ); // res = false; // } // }); return res; } function equalSchedule(expected, actual) { let res = true; if (expected.length !== actual.length) { console.log("Schedules have different lengths: Expected " + expected.length + ", got " + actual.length); res = false; } expected.forEach((s, i) => { ["time", "value"].forEach((key) => { if (s[key] != actual[i][key]) { console.log( "Different schedule values for " + key + " at index " + i + ": Expected " + s[key] + ", got " + actual[i][key] ); res = false; } }); }); return res; } function equalMinutes(expected, actual, properties = ["price", "onOff", "start", "saving"]) { let res = true; if (expected.length !== actual.length) { console.log("Hours have different lengths: Expected " + expected.minutes.length + ", got " + actual.minutes.length); } expected.forEach((s, i) => { properties.forEach((key) => { if (s[key] != actual[i][key]) { console.log( "Different hour values for " + key + " at index " + i + ": Expected " + s[key] + ", got " + actual[i][key] ); res = false; } }); }); return res; } module.exports = { testPlan, makePayload, equalPlan, equalMinutes, equalSchedule, };