Files
old-tfm/app/server/methods.js

191 lines
4.5 KiB
JavaScript
Raw Normal View History

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(),
}
});
}
}
2016-10-08 16:02:59 +02:00
function requestNewPicture(controller_id) {
var state = controller_state(controller_id);
ControllerState.update(state._id, {
'$set': {
'state.picture_requested': 'true',
'time': new Date(),
'set_by': 'server'
}
});
};
2016-07-02 10:18:18 +02:00
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,
2016-10-08 16:02:59 +02:00
saveControllerConfig: saveControllerConfig,
requestNewPicture: requestNewPicture
2016-02-14 10:34:54 +01:00
});