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.14 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) { let res = true; if (!equalSchedule(expected.schedule, actual.schedule)) { res = false; } if (!equalHours(expected.hours, actual.hours)) { 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 equalHours(expected, actual, properties = ["price", "onOff", "start", "saving"]) { let res = true; if (expected.length !== actual.length) { console.log("Hours have different lengths: Expected " + expected.hours.length + ", got " + actual.hours.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, equalHours, equalSchedule, };