diff --git a/android/FarmAlarm/.idea/vcs.xml b/android/FarmAlarm/.idea/vcs.xml
new file mode 100644
index 0000000..b2bdec2
--- /dev/null
+++ b/android/FarmAlarm/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.meteor/packages b/app/.meteor/packages
index 0e0dbf0..26572e0 100644
--- a/app/.meteor/packages
+++ b/app/.meteor/packages
@@ -28,3 +28,4 @@ fortawesome:fontawesome
mfpierre:chartist-js
standard-minifier-css
standard-minifier-js
+iron:router
diff --git a/app/.meteor/versions b/app/.meteor/versions
index 3243f0e..7e24b5d 100644
--- a/app/.meteor/versions
+++ b/app/.meteor/versions
@@ -39,6 +39,14 @@ http@1.1.4
huttonr:bootstrap3@3.3.6_10
huttonr:bootstrap3-assets@3.3.6_3
id-map@1.0.6
+iron:controller@1.0.12
+iron:core@1.0.11
+iron:dynamic-template@1.0.12
+iron:layout@1.0.12
+iron:location@1.0.11
+iron:middleware-stack@1.1.0
+iron:router@1.0.13
+iron:url@1.0.11
jquery@1.11.7
launch-screen@1.0.10
less@2.5.7
diff --git a/app/client/alarm/alarm.html b/app/client/alarm/alarm.html
new file mode 100644
index 0000000..a22ee6b
--- /dev/null
+++ b/app/client/alarm/alarm.html
@@ -0,0 +1,14 @@
+
+
+
+
Temperatura
+
+ {{#with last_reading}}
+
{{temperatureValue}}°C
+
{{pretty_time created_at}}
+ {{/with}}
+
+
+
+
+
diff --git a/app/client/alarm/alarm.js b/app/client/alarm/alarm.js
new file mode 100644
index 0000000..805d5c5
--- /dev/null
+++ b/app/client/alarm/alarm.js
@@ -0,0 +1,41 @@
+function sensor_data_collection() {
+ var controllerId = Session.get('controller_id');
+ return SensorData.find({
+ controllerId: controllerId
+ }, {
+ sort: {
+ created_at: -1
+ },
+ limit: 3
+ });
+}
+
+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.alarm.helpers({
+ last_reading: last_sensor_reading,
+ pretty_time: function(time) {
+ return moment(time).format("DD.MM.YYYY, HH:mm")
+ }
+});
+
+Template.alarm.events({
+ 'click #run_alarm_settings': function() {
+ Modal.show('alarm_settings');
+ }
+});
+
+Template.alarm.helpers({
+
+});
diff --git a/app/client/alarm/alarm_settings.html b/app/client/alarm/alarm_settings.html
new file mode 100644
index 0000000..f6706ad
--- /dev/null
+++ b/app/client/alarm/alarm_settings.html
@@ -0,0 +1,84 @@
+
+
+
+
diff --git a/app/client/alarm/alarm_settings.js b/app/client/alarm/alarm_settings.js
new file mode 100644
index 0000000..6b7118d
--- /dev/null
+++ b/app/client/alarm/alarm_settings.js
@@ -0,0 +1,43 @@
+
+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)
+ },
+
+ manualInflowChecked: function(day) {
+ var config = controller_state().config;
+ return config.manualInflow;
+ }
+
+
+});
+
+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 manualInflow = instance.$('#manual_inflow').is(':checked');
+ console.log("MI ", manualInflow);
+ var controller_id = Session.get('controller_id');
+ Meteor.call('saveControllerConfig', controller_id, selectedTime, selectedDays, manualInflow);
+ }
+});
+
+Template.sensorData.helpers({
+ created_at_formatted: function() {
+ return moment(this.created_at).format("DD.MM.YYYY, HH:mm")
+ }
+});
diff --git a/app/client/app.html b/app/client/app.html
index c9acb5a..6a310ba 100644
--- a/app/client/app.html
+++ b/app/client/app.html
@@ -12,7 +12,7 @@
{{> tabs}}
- {{> Template.dynamic template=template_name }}
+ {{> Template.dynamic template=template_name }}
diff --git a/app/client/app.js b/app/client/app.js
index a54400f..77bfb8c 100644
--- a/app/client/app.js
+++ b/app/client/app.js
@@ -6,3 +6,27 @@ Template.body.helpers({
return Session.get("templateName");
}
});
+
+controller_state = function() {
+ var controller = Session.get('controller_id');
+ var result = {}
+ if (controller) {
+ result = ControllerState.findOne({
+ controller_id: controller
+ });
+ }
+
+ if (!result) {
+ result = {}
+ };
+ return result;
+};
+
+accessible = function(feature) {
+ var controller = controller_state();
+
+ console.log('cotnroller ', controller);
+ if (!controller.features) return false;
+
+ return controller.features[feature] === true;
+}
diff --git a/app/client/app.less b/app/client/app.less
index 19a102c..d0eab3f 100644
--- a/app/client/app.less
+++ b/app/client/app.less
@@ -6,6 +6,10 @@
padding-top: 10px;
}
+.huge_text {
+ font-size: 3em;
+}
+
@media all and (orientation: portrait) {
#bucket_image {
width: 90%;
diff --git a/app/client/settings.js b/app/client/settings.js
index 6d7bb6b..6b7118d 100644
--- a/app/client/settings.js
+++ b/app/client/settings.js
@@ -1,17 +1,3 @@
-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) {
diff --git a/app/client/startup.js b/app/client/startup.js
index e4d6914..862d092 100644
--- a/app/client/startup.js
+++ b/app/client/startup.js
@@ -1,4 +1,4 @@
-Tracker.autorun(function () {
+Tracker.autorun(function() {
var id = Session.get('controller_id');
if (id) {
Meteor.subscribe("sensor_data", id);
@@ -6,3 +6,15 @@ Tracker.autorun(function () {
Meteor.subscribe('pictures', id);
}
});
+
+Router.route('/', function() {
+ if (accessible('start')) {
+ Session.set('templateName', 'start');
+ } else {
+ Session.set('templateName', 'no_access')
+ }
+});
+
+Router.route('/farmalarm', function() {
+
+});
diff --git a/app/client/tabs.html b/app/client/tabs.html
index accaac7..f313608 100644
--- a/app/client/tabs.html
+++ b/app/client/tabs.html
@@ -1,10 +1,26 @@
diff --git a/app/client/tabs.js b/app/client/tabs.js
index ff1bd86..199fca6 100644
--- a/app/client/tabs.js
+++ b/app/client/tabs.js
@@ -14,6 +14,8 @@ Template.tabs.helpers({
selected_controller: function() {
return Session.get('controller_id');
},
+
+ accessible: accessible
});
Template.tabs.events({
@@ -32,6 +34,11 @@ Template.tabs.events({
'click .settings': function() {
Session.set('templateName', 'settings');
},
+
+ 'click .alarm': function() {
+ Session.set('templateName', 'alarm');
+ },
+
'click #switch': function() {
var instance = Template.instance();
controller_id = instance.$('#controller').val();
diff --git a/app/server/api.js b/app/server/api.js
index ed6b715..f34d63a 100644
--- a/app/server/api.js
+++ b/app/server/api.js
@@ -162,6 +162,13 @@ function stateOrDefault(id) {
draining_period_unit: 'minutes',
manualInflow: true
},
+ features: {
+ start: true,
+ weather: true,
+ surveillance: true,
+ log: true,
+ alarm: true
+ },
set_by: 'server'
});
};