added scheduling
This commit is contained in:
@@ -25,3 +25,4 @@ momentjs:moment
|
||||
selaias:meteor-simpleweather
|
||||
u2622:persistent-session
|
||||
percolate:synced-cron
|
||||
rzymek:moment-locale-bs
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
accounts-base@1.2.2
|
||||
accounts-password@1.1.4
|
||||
amplify@1.0.0
|
||||
autopublish@1.0.4
|
||||
autoupdate@1.2.4
|
||||
@@ -25,6 +26,7 @@ diff-sequence@1.0.1
|
||||
ecmascript@0.1.6
|
||||
ecmascript-runtime@0.2.6
|
||||
ejson@1.0.7
|
||||
email@1.0.8
|
||||
es5-shim@4.1.14
|
||||
fastclick@1.0.7
|
||||
geojson-utils@1.0.4
|
||||
@@ -33,8 +35,8 @@ hot-code-push@1.0.0
|
||||
html-tools@1.0.5
|
||||
htmljs@1.0.5
|
||||
http@1.1.1
|
||||
huttonr:bootstrap3@3.3.5_10
|
||||
huttonr:bootstrap3-assets@3.3.5_6
|
||||
huttonr:bootstrap3@3.3.6_6
|
||||
huttonr:bootstrap3-assets@3.3.6_2
|
||||
id-map@1.0.4
|
||||
insecure@1.0.4
|
||||
jquery@1.11.4
|
||||
@@ -50,10 +52,11 @@ minifiers@1.1.7
|
||||
minimongo@1.0.10
|
||||
mobile-experience@1.0.1
|
||||
mobile-status-bar@1.0.6
|
||||
momentjs:moment@2.10.6
|
||||
momentjs:moment@2.11.2
|
||||
mongo@1.1.3
|
||||
mongo-id@1.0.1
|
||||
nimble:restivus@0.8.4
|
||||
nimble:restivus@0.8.7
|
||||
npm-bcrypt@0.7.8_2
|
||||
npm-mongo@1.4.39_1
|
||||
observe-sequence@1.0.7
|
||||
ordered-dict@1.0.4
|
||||
@@ -66,12 +69,15 @@ reactive-var@1.0.6
|
||||
reload@1.1.4
|
||||
retry@1.0.4
|
||||
routepolicy@1.0.6
|
||||
rzymek:moment-locale-bs@2.9.0
|
||||
selaias:meteor-simpleweather@0.6.8
|
||||
service-configuration@1.0.5
|
||||
session@1.1.1
|
||||
simple:json-routes@1.0.4
|
||||
sha@1.0.4
|
||||
simple:json-routes@2.0.1
|
||||
spacebars@1.0.7
|
||||
spacebars-compiler@1.0.7
|
||||
srp@1.0.4
|
||||
standard-minifiers@1.0.2
|
||||
templating@1.1.5
|
||||
templating-tools@1.0.0
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="Amir Smajevic, Adnan Strojil, Senad Uka">
|
||||
<link rel="stylesheet" type="text/css" href="/css/main.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@@ -14,7 +15,7 @@
|
||||
{{> Template.dynamic template=template_name }}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- /container -->
|
||||
|
||||
</body>
|
||||
|
||||
@@ -6,3 +6,8 @@
|
||||
.controller_selection {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
|
||||
#bucket_image {
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
function sensor_data_collection() {
|
||||
var controllerId = Session.get('controller_id');
|
||||
return SensorData.find({
|
||||
controllerId: controllerId
|
||||
}, {
|
||||
sort: {
|
||||
created_at: -1
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Template.log.helpers({
|
||||
sensorDataCollection: function() {
|
||||
var controllerId = Session.get('controller_id');
|
||||
return SensorData.find({ controllerId: controllerId }, {
|
||||
sort: {
|
||||
created_at: -1
|
||||
}
|
||||
});
|
||||
}
|
||||
sensorDataCollection: sensor_data_collection
|
||||
});
|
||||
|
||||
Template.log.events({
|
||||
|
||||
89
app/client/settings.html
Normal file
89
app/client/settings.html
Normal file
@@ -0,0 +1,89 @@
|
||||
<template name="settings">
|
||||
<div class="col-md-3 col-md-offset-4">
|
||||
<h1>Automatsko zaljevanje: </h1>
|
||||
<select name="time_of_day" id="time_of_day">
|
||||
<option value="00:00" selected={{ timeSelected "00:00" }}>00:00</option>
|
||||
<option value="00:30" selected={{ timeSelected "00:30" }}>00:30</option>
|
||||
<option value="01:00" selected={{ timeSelected "01:00" }}>01:00</option>
|
||||
<option value="01:30" selected={{ timeSelected "01:30" }}>01:30</option>
|
||||
<option value="02:00" selected={{ timeSelected "02:00" }}>02:00</option>
|
||||
<option value="02:30" selected={{ timeSelected "02:30" }}>02:30</option>
|
||||
<option value="03:00" selected={{ timeSelected "03:00" }}>03:00</option>
|
||||
<option value="03:30" selected={{ timeSelected "03:30" }}>03:30</option>
|
||||
<option value="04:00" selected={{ timeSelected "04:00" }}>04:00</option>
|
||||
<option value="04:30" selected={{ timeSelected "04:30" }}>04:30</option>
|
||||
<option value="05:00" selected={{ timeSelected "05:00" }}>05:00</option>
|
||||
<option value="05:30" selected={{ timeSelected "05:30" }}>05:30</option>
|
||||
<option value="06:00" selected={{ timeSelected "06:00" }}>06:00</option>
|
||||
<option value="06:30" selected={{ timeSelected "06:30" }}>06:30</option>
|
||||
<option value="07:00" selected={{ timeSelected "07:00" }}>07:00</option>
|
||||
<option value="07:30" selected={{ timeSelected "07:30" }}>07:30</option>
|
||||
<option value="08:00" selected={{ timeSelected "08:00" }}>08:00</option>
|
||||
<option value="08:30" selected={{ timeSelected "08:30" }}>08:30</option>
|
||||
<option value="09:00" selected={{ timeSelected "09:00" }}>09:00</option>
|
||||
<option value="09:30" selected={{ timeSelected "09:30" }}>09:30</option>
|
||||
<option value="10:00" selected={{ timeSelected "10:00" }}>10:00</option>
|
||||
<option value="10:30" selected={{ timeSelected "10:30" }}>10:30</option>
|
||||
<option value="11:00" selected={{ timeSelected "11:00" }}>11:00</option>
|
||||
<option value="11:30" selected={{ timeSelected "11:30" }}>11:30</option>
|
||||
<option value="12:00" selected={{ timeSelected "12:00" }}>12:00</option>
|
||||
<option value="12:30" selected={{ timeSelected "12:30" }}>12:30</option>
|
||||
<option value="13:00" selected={{ timeSelected "13:00" }}>13:00</option>
|
||||
<option value="13:30" selected={{ timeSelected "13:30" }}>13:30</option>
|
||||
<option value="14:00" selected={{ timeSelected "14:00" }}>14:00</option>
|
||||
<option value="14:30" selected={{ timeSelected "14:30" }}>14:30</option>
|
||||
<option value="15:00" selected={{ timeSelected "15:00" }}>15:00</option>
|
||||
<option value="15:30" selected={{ timeSelected "15:30" }}>15:30</option>
|
||||
<option value="16:00" selected={{ timeSelected "16:00" }}>16:00</option>
|
||||
<option value="16:30" selected={{ timeSelected "16:30" }}>16:30</option>
|
||||
<option value="17:00" selected={{ timeSelected "17:00" }}>17:00</option>
|
||||
<option value="17:30" selected={{ timeSelected "17:30" }}>17:30</option>
|
||||
<option value="18:00" selected={{ timeSelected "18:00" }}>18:00</option>
|
||||
<option value="18:30" selected={{ timeSelected "18:30" }}>18:30</option>
|
||||
<option value="19:00" selected={{ timeSelected "19:00" }}>19:00</option>
|
||||
<option value="19:30" selected={{ timeSelected "19:30" }}>19:30</option>
|
||||
<option value="20:00" selected={{ timeSelected "20:00" }}>20:00</option>
|
||||
<option value="20:30" selected={{ timeSelected "20:30" }}>20:30</option>
|
||||
<option value="21:00" selected={{ timeSelected "21:00" }}>21:00</option>
|
||||
<option value="21:30" selected={{ timeSelected "21:30" }}>21:30</option>
|
||||
<option value="22:00" selected={{ timeSelected "22:00" }}>22:00</option>
|
||||
<option value="22:30" selected={{ timeSelected "22:30" }}>22:30</option>
|
||||
<option value="23:00" selected={{ timeSelected "23:00" }}>23:00</option>
|
||||
<option value="23:30" selected={{ timeSelected "23:30" }}>23:30</option>
|
||||
</select>
|
||||
<div>
|
||||
|
||||
<input type="checkbox" id="day_1" name="day_1" value="2" class="day_checkbox" checked="{{ dayChecked '2' }}" />
|
||||
<label for="day_1">Ponedjeljak</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="day_2" name="day_2" value="3" class="day_checkbox" checked="{{ dayChecked '3' }}" />
|
||||
<label for="day_2">Utorak</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="day_3" name="day_3" value="4" class="day_checkbox" checked="{{ dayChecked '4' }}" />
|
||||
<label for="day_3">Srijeda</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="day_4" name="day_4" value="5" class="day_checkbox" checked="{{ dayChecked '5' }}" />
|
||||
<label for="day_4">Četvrtak</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="day_5" name="day_5" value="6" class="day_checkbox" checked="{{ dayChecked '6' }}" />
|
||||
<label for="day_5">Petak</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="day_6" name="day_6" value="7" class="day_checkbox" checked="{{ dayChecked '7' }}" />
|
||||
<label for="day_6">Subota</label>
|
||||
</div>
|
||||
<div>
|
||||
<input type="checkbox" id="day_7" name="day_7" value="1" class="day_checkbox" checked="{{ dayChecked '1' }}" />
|
||||
<label for="day_7">Nedjelja</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button id="save_settings" name="save_settings">Zapamti</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
50
app/client/settings.js
Normal file
50
app/client/settings.js
Normal file
@@ -0,0 +1,50 @@
|
||||
function controller_state() {
|
||||
var controller = Session.get('controller_id');
|
||||
var result = {}
|
||||
if (controller) {
|
||||
result = ControllerState.findOne({
|
||||
controller_id: controller
|
||||
});
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
result = {}
|
||||
};
|
||||
return result;
|
||||
};
|
||||
|
||||
Template.settings.helpers({
|
||||
timeSelected: function(time) {
|
||||
var config = controller_state().config;
|
||||
return config.automaticTimeOfDay == time;
|
||||
},
|
||||
|
||||
dayChecked: function(day) {
|
||||
var config = controller_state().config;
|
||||
var days = config.automaticDaysOfWeek || [];
|
||||
return days.includes(day)
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
|
||||
Template.settings.events({
|
||||
'click #save_settings': function() {
|
||||
var instance = Template.instance();
|
||||
selectedTime = instance.$('#time_of_day').val();
|
||||
selectedDays = [];
|
||||
instance.$('.day_checkbox').each(function() {
|
||||
if (this.checked) {
|
||||
selectedDays.push(instance.$(this).val());
|
||||
}
|
||||
});
|
||||
var controller_id = Session.get('controller_id');
|
||||
Meteor.call('saveControllerConfig', controller_id, selectedTime, selectedDays);
|
||||
}
|
||||
});
|
||||
|
||||
Template.sensorData.helpers({
|
||||
created_at_formatted: function() {
|
||||
return moment(this.created_at).format("DD.MM.YYYY, HH:mm")
|
||||
}
|
||||
});
|
||||
@@ -1,18 +1,24 @@
|
||||
<template name="state">
|
||||
<div class="col-md-3 col-md-offset-4">
|
||||
{{#with controller_state}}
|
||||
<h1>{{controller_id}}</h1>
|
||||
<img src="{{ bucket_image }}" class="img-responsive center-block" id="bucket_image" /> {{#with last_sensor_reading}}
|
||||
<div>
|
||||
<strong>{{ temperatureValue }} °C, {{ humidityValue }} % </strong>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
<h1> Controller state</h1>
|
||||
<div>
|
||||
{{#with controller_state}}
|
||||
<div>Controller broj: {{controller_id}}</div>
|
||||
<div>Otpusni ventil: {{pretty_valve state.out_valve }}</div>
|
||||
<div>Stanje postavio: {{ set_by }}</div>
|
||||
<div>Zadnja komunikacija: {{time}}</div>
|
||||
{{/with}}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button id="water_now" class="{{ water_now_button_class }}">Zalij sada</button>
|
||||
<button id="stop_water_now" class="{{ stop_button_class }}">Prekini zalijevanje</button>
|
||||
</div>
|
||||
</div>
|
||||
{{/with}}
|
||||
<div>Otpusni ventil: {{pretty_valve state.out_valve }}</div>
|
||||
<div>Zadnja komunikacija: {{ last_communication_time }}</div>
|
||||
{{/with}}
|
||||
<div>
|
||||
<button id="water_now" class="{{ water_now_button_class }}">Zalij sada</button>
|
||||
<button id="stop_water_now" class="{{ stop_button_class }}">Prekini zalijevanje</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-1">
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,58 +1,96 @@
|
||||
if (Meteor.isClient) {
|
||||
function controller_state() {
|
||||
var controller = Session.get('controller_id');
|
||||
var result = {}
|
||||
if (controller) {
|
||||
result = ControllerState.findOne({
|
||||
controller_id: controller
|
||||
});
|
||||
}
|
||||
|
||||
function controller_state() {
|
||||
var controller = Session.get('controller_id');
|
||||
var result = {}
|
||||
if (controller) {
|
||||
result = ControllerState.findOne({
|
||||
controller_id: controller
|
||||
});
|
||||
}
|
||||
|
||||
if (!result) {
|
||||
result = {}
|
||||
};
|
||||
return result;
|
||||
if (!result) {
|
||||
result = {}
|
||||
};
|
||||
return result;
|
||||
};
|
||||
|
||||
Template.state.helpers({
|
||||
controller_state: controller_state,
|
||||
pretty_valve: function(state) {
|
||||
if (state === 'open') return "Otvoren";
|
||||
if (state === 'opening') return "Otvara se";
|
||||
if (state === 'closing') return "Zatvara se";
|
||||
if (state === 'closed') return "Zatvoren";
|
||||
},
|
||||
|
||||
water_now_button_class: function () {
|
||||
var stateObject = controller_state();
|
||||
if (stateObject.state && ( stateObject.state.out_valve === 'open' || stateObject.state.out_valve === 'opening' )) {
|
||||
return 'hidden';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
stop_button_class: function () {
|
||||
var stateObject = controller_state();
|
||||
if (stateObject.state && ( stateObject.state.out_valve === 'closed' || stateObject.state.out_valve === 'closing' )) {
|
||||
return 'hidden';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
function sensor_data_collection() {
|
||||
var controllerId = Session.get('controller_id');
|
||||
return SensorData.find({
|
||||
controllerId: controllerId
|
||||
}, {
|
||||
sort: {
|
||||
created_at: -1
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Template.state.events({
|
||||
'click #water_now': function() {
|
||||
var controller_id = Session.get('controller_id');
|
||||
Meteor.call('openOutValve',controller_id )
|
||||
},
|
||||
|
||||
'click #stop_water_now': function() {
|
||||
var controller_id = Session.get('controller_id');
|
||||
Meteor.call('closeOutValve',controller_id )
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
function last_sensor_reading() {
|
||||
var controller = Session.get('controller_id');
|
||||
var result = null;
|
||||
if (controller) {
|
||||
result = sensor_data_collection();
|
||||
}
|
||||
if (result && result.count() > 0) {
|
||||
return result.fetch()[0];
|
||||
} else {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Template.state.helpers({
|
||||
controller_state: controller_state,
|
||||
pretty_valve: function(state) {
|
||||
if (state === 'open') return "Otvoren";
|
||||
if (state === 'opening') return "Otvara se";
|
||||
if (state === 'closing') return "Zatvara se";
|
||||
if (state === 'closed') return "Zatvoren";
|
||||
},
|
||||
|
||||
bucket_image: function() {
|
||||
var sensor = last_sensor_reading();
|
||||
if (sensor && sensor.tankFull === "1") {
|
||||
return "/images/barell_full.png";
|
||||
} else {
|
||||
return "/images/barell_draining.png";
|
||||
}
|
||||
},
|
||||
|
||||
last_sensor_reading: last_sensor_reading,
|
||||
|
||||
last_communication_time: function() {
|
||||
return moment(controller_state().time).fromNow();
|
||||
},
|
||||
|
||||
|
||||
water_now_button_class: function() {
|
||||
var stateObject = controller_state();
|
||||
if (stateObject.state && (stateObject.state.out_valve === 'open' || stateObject.state.out_valve === 'opening')) {
|
||||
return 'hidden';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
stop_button_class: function() {
|
||||
var stateObject = controller_state();
|
||||
if (stateObject.state && (stateObject.state.out_valve === 'closed' || stateObject.state.out_valve === 'closing')) {
|
||||
return 'hidden';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Template.state.events({
|
||||
'click #water_now': function() {
|
||||
var controller_id = Session.get('controller_id');
|
||||
Meteor.call('openOutValve', controller_id)
|
||||
},
|
||||
|
||||
'click #stop_water_now': function() {
|
||||
var controller_id = Session.get('controller_id');
|
||||
Meteor.call('closeOutValve', controller_id)
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
<template name="tabs">
|
||||
<div></div>
|
||||
<ul class="nav nav-tabs">
|
||||
<li role="presentation" class="{{ class_for 'start' }}"><a href="#">Stanje</a></li>
|
||||
<li role="presentation" class="{{ class_for 'weather' }}"><a href="#">Vrijeme</a></li>
|
||||
<li role="presentation" class="{{ class_for 'log' }}"><a href="#">Novosti</a></li>
|
||||
<li role="presentation" class="{{ class_for 'settings' }}"><a href="#">Podešavanje</a></li>
|
||||
<li role="presentation" class="controller_selection"> <input type="number" id="controller" name="controller" value="{{ selected_controller }}" min="1" max="99999"> <button id="switch" name="switch">Prebaci</button>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -1,39 +1,38 @@
|
||||
if (Meteor.isClient) {
|
||||
Template.tabs.helpers({
|
||||
class_for: function(tab_name) {
|
||||
var templateName = Session.get('templateName');
|
||||
|
||||
Template.tabs.helpers({
|
||||
class_for: function(tab_name) {
|
||||
var templateName = Session.get('templateName');
|
||||
|
||||
if (templateName === tab_name) {
|
||||
return tab_name + ' active';
|
||||
} else if (templateName === 'display' && tab_name === 'news') {
|
||||
return tab_name + ' active'
|
||||
} else {
|
||||
return tab_name;
|
||||
}
|
||||
},
|
||||
|
||||
selected_controller: function() {
|
||||
return Session.get('controller_id');
|
||||
},
|
||||
});
|
||||
|
||||
Template.tabs.events({
|
||||
'click .start': function() {
|
||||
Session.set('templateName', 'start');
|
||||
},
|
||||
'click .weather': function() {
|
||||
Session.set('templateName', 'weather');
|
||||
},
|
||||
'click .log': function() {
|
||||
Session.set('templateName', 'log');
|
||||
},
|
||||
|
||||
'click #switch': function() {
|
||||
var instance = Template.instance();
|
||||
controller_id = instance.$('#controller').val();
|
||||
Session.setPersistent('controller_id', controller_id);
|
||||
if (templateName === tab_name) {
|
||||
return tab_name + ' active';
|
||||
} else if (templateName === 'display' && tab_name === 'news') {
|
||||
return tab_name + ' active'
|
||||
} else {
|
||||
return tab_name;
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
}
|
||||
selected_controller: function() {
|
||||
return Session.get('controller_id');
|
||||
},
|
||||
});
|
||||
|
||||
Template.tabs.events({
|
||||
'click .start': function() {
|
||||
Session.set('templateName', 'start');
|
||||
},
|
||||
'click .weather': function() {
|
||||
Session.set('templateName', 'weather');
|
||||
},
|
||||
'click .log': function() {
|
||||
Session.set('templateName', 'log');
|
||||
},
|
||||
'click .settings': function() {
|
||||
Session.set('templateName', 'settings');
|
||||
},
|
||||
|
||||
'click #switch': function() {
|
||||
var instance = Template.instance();
|
||||
controller_id = instance.$('#controller').val();
|
||||
Session.setPersistent('controller_id', controller_id);
|
||||
}
|
||||
});
|
||||
|
||||
BIN
app/public/images/barell_draining.png
Normal file
BIN
app/public/images/barell_draining.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
BIN
app/public/images/barell_full.png
Normal file
BIN
app/public/images/barell_full.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 53 KiB |
@@ -47,7 +47,7 @@ function closeOutValve(controller_id) {
|
||||
var state = controller_state(controller_id);
|
||||
|
||||
var jobName = "Close out valve " + state.controller_id + " after draining";
|
||||
console.log("Closing valve ", controller_id, jobName);
|
||||
console.log("Closing valve ", controller_id, jobName);
|
||||
SyncedCron.remove(jobName);
|
||||
setOutValveTo(controller_id, 'closing');
|
||||
console.log("Finished clearing cron ", controller_id);
|
||||
@@ -58,8 +58,39 @@ function clearLog() {
|
||||
SensorData.remove({});
|
||||
}
|
||||
|
||||
function saveControllerConfig(controller_id, time, days) {
|
||||
var state = controller_state(controller_id);
|
||||
ControllerState.update(state._id, {
|
||||
'$set': {
|
||||
'config.automaticTimeOfDay': time,
|
||||
'config.automaticDaysOfWeek': days
|
||||
}
|
||||
});
|
||||
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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Meteor.methods({
|
||||
openOutValve: openOutValve,
|
||||
closeOutValve: closeOutValve,
|
||||
clearLog: clearLog
|
||||
clearLog: clearLog,
|
||||
saveControllerConfig: saveControllerConfig
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user