From 656dee3fe6c3ec0f8777bd12815cb6366490b4e4 Mon Sep 17 00:00:00 2001 From: Senad Uka Date: Sat, 2 Jul 2016 10:18:18 +0200 Subject: [PATCH] manual override for pump --- app/client/settings.html | 8 ++++++ app/client/settings.js | 9 ++++++- app/client/state.html | 2 ++ app/client/state.js | 29 +++++++++++++++++++++ app/server/api.js | 26 +++++++++++++++---- app/server/methods.js | 55 ++++++++++++++++++++++++++++++++++++---- 6 files changed, 118 insertions(+), 11 deletions(-) diff --git a/app/client/settings.html b/app/client/settings.html index 0bb57c1..c8bea6e 100644 --- a/app/client/settings.html +++ b/app/client/settings.html @@ -91,6 +91,14 @@ +
+
+ Ručna kontrola pumpe +
+
+ PAŽNJA! Ako pumpa predugo bude radila - rezervoar se može prepuniti. +
+
diff --git a/app/client/state.js b/app/client/state.js index eb05d26..dceeee7 100644 --- a/app/client/state.js +++ b/app/client/state.js @@ -90,6 +90,25 @@ Template.state.helpers({ } }, + start_inflow_button_class: function() { + var stateObject = controller_state(); + if(stateObject.config && stateObject.config.manualInflow && stateObject.state.out_valve === 'closed' && ( stateObject.state.in_valve === 'closed' || stateObject.state.in_valve === 'closing')) { + return 'btn btn-danger' + } else { + return 'hidden btn btn-danger' + } + }, + + stop_inflow_button_class: function() { + var stateObject = controller_state(); + if(stateObject.config && stateObject.config.manualInflow && stateObject.state.out_valve === 'closed' && ( stateObject.state.in_valve === 'open' || stateObject.state.in_valve === 'opening')) { + return 'btn btn-danger' + } else { + return 'hidden btn btn-danger' + } + }, + + pretty_days: function(daysInNumbers) { var days = ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]; if (!daysInNumbers || daysInNumbers.length == 0) { @@ -125,6 +144,16 @@ Template.state.events({ Meteor.call('closeOutValve', controller_id) }, + 'click #start_inflow_now': function() { + var controller_id = Session.get('controller_id'); + Meteor.call('openInValve', controller_id) + }, + + 'click #stop_inflow_now': function() { + var controller_id = Session.get('controller_id'); + Meteor.call('closeInValve', controller_id) + }, + 'click #run_settings': function() { Modal.show('settings'); }, diff --git a/app/server/api.js b/app/server/api.js index 7540ac8..7f654d9 100644 --- a/app/server/api.js +++ b/app/server/api.js @@ -30,10 +30,12 @@ Api.addRoute('sensorData', { }); -function reactToSensorData(nextSensorReading) { +reactToSensorData = function(nextSensorReading) { console.log("reacting to sensor"); var controllerId = nextSensorReading.controllerId; - var state = stateOrDefault(controllerId).state; + var stateObject = stateOrDefault(controllerId); + var state = stateObject.state; + var config = stateObject.config; var startPumpingLevelReached; if (nextSensorReading.startPumpingAt == 'TANKLEVEL0') startPumpingLevelReached = (parseInt(nextSensorReading.tankLevel0) === 0) @@ -43,7 +45,15 @@ function reactToSensorData(nextSensorReading) { else if (nextSensorReading.startPumpingAt == 'TANKLEVEL4') startPumpingLevelReached = (parseInt(nextSensorReading.tankLevel4) === 0) else startPumpingLevelReached = true; - var shouldStartPumping = (!state.in_valve || state.in_valve === 'closed') && ((parseInt(nextSensorReading.tankFull) === 0) && startPumpingLevelReached && (state.out_valve === 'closed' || state.out_valve === 'closing')); + var shouldStartAutomaticPumping = (!state.in_valve || state.in_valve === 'closed') && ((parseInt(nextSensorReading.tankFull) === 0) && startPumpingLevelReached && (state.out_valve === 'closed' || state.out_valve === 'closing')); + + console.log("State: ", state); + + var shouldStartPumping = shouldStartAutomaticPumping && config && !config.manualInflow; + + console.log("shouldStartAutomaticPumping: ", shouldStartAutomaticPumping); + + console.log("shouldStartPumping: ", shouldStartPumping); if (shouldStartPumping) { ControllerState.update({ @@ -65,7 +75,12 @@ function reactToSensorData(nextSensorReading) { else if (nextSensorReading.stopPumpingAt == 'TANKLEVEL4') stopPumpingLevelReached = (parseInt(nextSensorReading.tankLevel4) === 1) else stopPumpingLevelReached = false; - var shouldStopPumping = (state.in_valve === 'open' || state.in_valve === 'opening') && (parseInt(nextSensorReading.tankFull) === 1 || stopPumpingLevelReached || state.out_valve === 'open' || state.out_valve === 'opening'); + var shouldStopAutomaticPumping = (state.in_valve === 'open' || state.in_valve === 'opening') && (parseInt(nextSensorReading.tankFull) === 1 || stopPumpingLevelReached || state.out_valve === 'open' || state.out_valve === 'opening'); + + var shouldStopPumping = shouldStopAutomaticPumping && config && !config.manualInflow; + + console.log("shouldStopPumping: ", shouldStopPumping); + if (shouldStopPumping) { ControllerState.update({ @@ -117,7 +132,8 @@ function stateOrDefault(id) { time: new Date(), config: { draining_period_amount: 40, - draining_period_unit: 'minutes' + draining_period_unit: 'minutes', + manualInflow: true }, set_by: 'server' }); diff --git a/app/server/methods.js b/app/server/methods.js index 0790a21..16d71cb 100644 --- a/app/server/methods.js +++ b/app/server/methods.js @@ -22,7 +22,7 @@ function setOutValveTo(controller_id, nextState) { } }); - if(nextState === "open") { + if (nextState === "open") { ControllerState.update(state._id, { '$set': { 'significantEvents.lastOutValveOpen': new Date(), @@ -32,8 +32,50 @@ function setOutValveTo(controller_id, nextState) { } +function setInValveTo(controller_id, nextState) { + var state = controller_state(controller_id); + ControllerState.update(state._id, { + '$set': { + 'state.in_valve': nextState, + 'time': new Date(), + 'set_by': 'server' + } + }); + + if (nextState === "open") { + ControllerState.update(state._id, { + '$set': { + 'significantEvents.lastInValveOpen': new Date(), + } + }); + } + +} + +function openInValve(controller_id) { + var state = controller_state(controller_id); + var config = state.config; + if (config.manualInflow) { + setInValveTo(controller_id, 'opening'); + } + reactToSensorData(last_sensor_reading(controller_id)); +} + +function closeInValve(controller_id) { + var state = controller_state(controller_id); + var config = state.config; + if (config.manualInflow) { + setInValveTo(controller_id, 'closing'); + } + reactToSensorData(last_sensor_reading(controller_id)); + +} + + + function openOutValve(controller_id) { setOutValveTo(controller_id, 'opening'); + setInValveTo(controller_id, 'closing'); var state = controller_state(controller_id); var config = state.config; var jobName = "Close out valve " + state.controller_id + " after draining"; @@ -51,7 +93,7 @@ function openOutValve(controller_id) { }); console.log(Meteor.sharedFunctions); - Meteor.sharedFunctions.reactToSensorData(last_sensor_reading(controller_id)); + reactToSensorData(last_sensor_reading(controller_id)); } function closeOutValve(controller_id) { @@ -65,7 +107,7 @@ function closeOutValve(controller_id) { console.log(Meteor.sharedFunctions); - Meteor.sharedFunctions.reactToSensorData(last_sensor_reading(controller_id)); + reactToSensorData(last_sensor_reading(controller_id)); } function clearLog() { @@ -73,12 +115,13 @@ function clearLog() { SensorData.remove({}); } -function saveControllerConfig(controller_id, time, days) { +function saveControllerConfig(controller_id, time, days, manualInflow) { var state = controller_state(controller_id); ControllerState.update(state._id, { '$set': { 'config.automaticTimeOfDay': time, - 'config.automaticDaysOfWeek': days + 'config.automaticDaysOfWeek': days, + 'config.manualInflow': manualInflow } }); var jobName = "automatic_" + controller_id; @@ -128,6 +171,8 @@ function last_sensor_reading(controller_id) { Meteor.methods({ openOutValve: openOutValve, closeOutValve: closeOutValve, + openInValve: openInValve, + closeInValve: closeInValve, clearLog: clearLog, saveControllerConfig: saveControllerConfig });