2016-02-14 10:34:54 +01:00
|
|
|
function controller_state(controller_id) {
|
|
|
|
|
var result = {}
|
|
|
|
|
if (controller_id) {
|
|
|
|
|
result = ControllerState.findOne({
|
|
|
|
|
controller_id: controller_id
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!result) {
|
|
|
|
|
result = {}
|
|
|
|
|
};
|
|
|
|
|
return result;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
function setOutValveTo(controller_id, nextState) {
|
|
|
|
|
var state = controller_state(controller_id);
|
|
|
|
|
ControllerState.update(state._id, {
|
|
|
|
|
'$set': {
|
|
|
|
|
'state.out_valve': nextState,
|
|
|
|
|
'time': new Date(),
|
|
|
|
|
'set_by': 'server'
|
|
|
|
|
}
|
|
|
|
|
});
|
2016-05-08 05:17:12 +02:00
|
|
|
|
2016-07-02 10:18:18 +02:00
|
|
|
if (nextState === "open") {
|
2016-05-08 05:17:12 +02:00
|
|
|
ControllerState.update(state._id, {
|
|
|
|
|
'$set': {
|
|
|
|
|
'significantEvents.lastOutValveOpen': new Date(),
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2016-02-14 10:34:54 +01:00
|
|
|
}
|
|
|
|
|
|
2016-07-02 10:18:18 +02:00
|
|
|
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));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-14 10:34:54 +01:00
|
|
|
function openOutValve(controller_id) {
|
|
|
|
|
setOutValveTo(controller_id, 'opening');
|
2016-07-02 10:18:18 +02:00
|
|
|
setInValveTo(controller_id, 'closing');
|
2016-02-14 10:34:54 +01:00
|
|
|
var state = controller_state(controller_id);
|
|
|
|
|
var config = state.config;
|
|
|
|
|
var jobName = "Close out valve " + state.controller_id + " after draining";
|
|
|
|
|
console.log("Opening valve ", controller_id, jobName);
|
|
|
|
|
SyncedCron.remove(jobName);
|
|
|
|
|
SyncedCron.add({
|
|
|
|
|
name: jobName,
|
|
|
|
|
schedule: function(parser) {
|
|
|
|
|
var time = moment().add(config.draining_period_amount, config.draining_period_unit).toDate();
|
|
|
|
|
return parser.recur().on(time).fullDate();
|
|
|
|
|
},
|
|
|
|
|
job: function() {
|
|
|
|
|
closeOutValve(controller_id);
|
|
|
|
|
}
|
|
|
|
|
});
|
2016-03-26 07:11:52 +01:00
|
|
|
console.log(Meteor.sharedFunctions);
|
|
|
|
|
|
2016-07-02 10:18:18 +02:00
|
|
|
reactToSensorData(last_sensor_reading(controller_id));
|
2016-02-14 10:34:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function closeOutValve(controller_id) {
|
|
|
|
|
var state = controller_state(controller_id);
|
|
|
|
|
|
|
|
|
|
var jobName = "Close out valve " + state.controller_id + " after draining";
|
2016-02-28 10:05:14 +01:00
|
|
|
console.log("Closing valve ", controller_id, jobName);
|
2016-02-14 10:34:54 +01:00
|
|
|
SyncedCron.remove(jobName);
|
|
|
|
|
setOutValveTo(controller_id, 'closing');
|
|
|
|
|
console.log("Finished clearing cron ", controller_id);
|
2016-03-26 07:11:52 +01:00
|
|
|
|
|
|
|
|
console.log(Meteor.sharedFunctions);
|
|
|
|
|
|
2016-07-02 10:18:18 +02:00
|
|
|
reactToSensorData(last_sensor_reading(controller_id));
|
2016-02-14 10:34:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function clearLog() {
|
|
|
|
|
console.log("Removing sensor data");
|
|
|
|
|
SensorData.remove({});
|
|
|
|
|
}
|
|
|
|
|
|
2016-07-02 10:18:18 +02:00
|
|
|
function saveControllerConfig(controller_id, time, days, manualInflow) {
|
2016-02-28 10:05:14 +01:00
|
|
|
var state = controller_state(controller_id);
|
|
|
|
|
ControllerState.update(state._id, {
|
|
|
|
|
'$set': {
|
|
|
|
|
'config.automaticTimeOfDay': time,
|
2016-07-02 10:18:18 +02:00
|
|
|
'config.automaticDaysOfWeek': days,
|
|
|
|
|
'config.manualInflow': manualInflow
|
2016-02-28 10:05:14 +01:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
var jobName = "automatic_" + controller_id;
|
|
|
|
|
var times = time.split(":");
|
|
|
|
|
var hours = parseInt(times[0]);
|
|
|
|
|
var minutes = parseInt(times[1]);
|
|
|
|
|
|
|
|
|
|
SyncedCron.remove(jobName);
|
|
|
|
|
SyncedCron.add({
|
|
|
|
|
name: jobName,
|
|
|
|
|
schedule: function(parser) {
|
|
|
|
|
|
|
|
|
|
var period = parser.recur();
|
|
|
|
|
for (var i = 0; i < days.length; i++) {
|
|
|
|
|
period = period.and().on(parseInt(days[i])).dayOfWeek().on(hours).hour().on(minutes).minute();
|
|
|
|
|
}
|
|
|
|
|
return period;
|
|
|
|
|
},
|
|
|
|
|
job: function() {
|
|
|
|
|
openOutValve(controller_id);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2016-03-26 07:11:52 +01:00
|
|
|
|
|
|
|
|
function last_sensor_reading(controller_id) {
|
|
|
|
|
var result = null;
|
|
|
|
|
|
|
|
|
|
if (controller_id) {
|
|
|
|
|
result = SensorData.find({
|
|
|
|
|
controllerId: controller_id
|
|
|
|
|
}, {
|
|
|
|
|
sort: {
|
|
|
|
|
created_at: -1
|
|
|
|
|
},
|
|
|
|
|
limit: 1
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
if (result && result.count() > 0) {
|
|
|
|
|
return result.fetch()[0];
|
|
|
|
|
} else {
|
|
|
|
|
return {}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2016-02-14 10:34:54 +01:00
|
|
|
Meteor.methods({
|
|
|
|
|
openOutValve: openOutValve,
|
|
|
|
|
closeOutValve: closeOutValve,
|
2016-07-02 10:18:18 +02:00
|
|
|
openInValve: openInValve,
|
|
|
|
|
closeInValve: closeInValve,
|
2016-02-28 10:05:14 +01:00
|
|
|
clearLog: clearLog,
|
|
|
|
|
saveControllerConfig: saveControllerConfig
|
2016-02-14 10:34:54 +01:00
|
|
|
});
|