From 4e3c5e25e42f889fcc1ee99c7ec76c7d07d31064 Mon Sep 17 00:00:00 2001 From: James Nylen Date: Mon, 16 Oct 2017 13:42:44 +0800 Subject: [PATCH 1/2] Add the ability to set an explicit ramp start temperature --- lib/Scheduler.js | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/Scheduler.js b/lib/Scheduler.js index 301e6d2..a4a2ea2 100644 --- a/lib/Scheduler.js +++ b/lib/Scheduler.js @@ -75,14 +75,10 @@ Scheduler.prototype.update = function() { if (minutesThisStep < step.rampMinutes) { // Ramp - var previousTemperature = ( - self.status.stepIndex > 0 - ? self.schedule[self.status.stepIndex - 1].temperature - : self.settings.minTemperature - ); + var startTemperature = step.rampStartTemperature; desiredTemperature = ( - previousTemperature + - (step.temperature - previousTemperature) * (minutesThisStep / step.rampMinutes) + startTemperature + + (step.temperature - startTemperature) * (minutesThisStep / step.rampMinutes) ); } else if (minutesThisStep < step.rampMinutes + step.soakMinutes) { // Soak @@ -153,8 +149,8 @@ Scheduler.prototype.validateSchedule = function(schedule) { schedule.forEach(function(step) { if ( typeof step.temperature !== 'number' || - schedule.temperature < self.settings.minTemperature || - schedule.temperature > self.settings.maxTemperature + step.temperature < self.settings.minTemperature || + step.temperature > self.settings.maxTemperature ) { throw new Error(util.format( 'Step temperature must be a number between %d and %d', @@ -189,6 +185,26 @@ Scheduler.prototype.validateSchedule = function(schedule) { if (step.rampMinutes === 0 && step.soakMinutes === 0) { throw new Error('Step ramp and soak times cannot both be zero'); } + + if (step.rampMinutes > 0) { + if (typeof step.rampStartTemperature === 'undefined') { + step.rampStartTemperature = self.settings.minTemperature; + } + + if ( + typeof step.rampStartTemperature !== 'number' || + step.rampStartTemperature < self.settings.minTemperature || + step.rampStartTemperature > self.settings.maxTemperature + ) { + throw new Error(util.format( + 'Step temperature must be a number between %d and %d', + self.settings.minTemperature, + self.settings.maxTemperature + )); + } + } else { + delete step.rampStartTemperature; + } }); return schedule; From d40f49140190a444e9ff7c3294f81221238931c3 Mon Sep 17 00:00:00 2001 From: James Nylen Date: Mon, 16 Oct 2017 13:47:00 +0800 Subject: [PATCH 2/2] Restore previous default behavior: ramp from last step's temperature --- lib/Scheduler.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/Scheduler.js b/lib/Scheduler.js index a4a2ea2..f2b38c7 100644 --- a/lib/Scheduler.js +++ b/lib/Scheduler.js @@ -146,7 +146,7 @@ Scheduler.prototype.validateSchedule = function(schedule) { throw new Error('Schedule must have at least one step'); } - schedule.forEach(function(step) { + schedule.forEach(function(step, index) { if ( typeof step.temperature !== 'number' || step.temperature < self.settings.minTemperature || @@ -188,7 +188,11 @@ Scheduler.prototype.validateSchedule = function(schedule) { if (step.rampMinutes > 0) { if (typeof step.rampStartTemperature === 'undefined') { - step.rampStartTemperature = self.settings.minTemperature; + if (index === 0) { + step.rampStartTemperature = self.settings.minTemperature; + } else { + step.rampStartTemperature = schedule[index - 1].temperature; + } } if (