{{#with state}}
{{#if alarmTriggered}}
+
{{ pretty_reasons alarmReasons }}
{{/if}}
diff --git a/app/client/alarm.js b/app/client/alarm.js
index 87c107a..97a1a0a 100644
--- a/app/client/alarm.js
+++ b/app/client/alarm.js
@@ -39,6 +39,22 @@ Template.alarm.helpers({
result += '' + parseFloat(temperatures[i]).toFixed(1) + ' °C ';
}
return result;
+ },
+ pretty_reasons: function(reasons) {
+ var results = "";
+ if(reasons.tooHot) {
+ results += "Temperatura previsoka!";
+ }
+ if(reasons.tooCold) {
+ results += "Temperatura preniska!";
+ }
+ if(reasons.phoneSilent) {
+ results += "Mobitel nedostupan! Provjerite internet!";
+ }
+ if(reasons.boxSilent) {
+ results += "Zoblak kutija se ne javlja! Provjerite internet!";
+ }
+ return results;
}
});
diff --git a/app/client/app.less b/app/client/app.less
index eac6aae..ce0ae1d 100644
--- a/app/client/app.less
+++ b/app/client/app.less
@@ -6,8 +6,12 @@
padding-top: 10px;
}
+.hidden {
+ display: none;
+}
+
.huge_text {
- font-size: 3em;
+ font-size: 2.5em;
}
@media all and (orientation: portrait) {
@@ -28,18 +32,18 @@
@media all and (orientation: portrait) {
#alarm_image {
- width: 90%;
+ width: 70%;
cursor: pointer;
}
}
@media all and (orientation: landscape) {
#alarm_image {
- width: 40%;
+ width: 30%;
cursor: pointer;
}
}
.clickable {
- cursor:pointer;
+ cursor:pointer;
}
diff --git a/app/client/startup.js b/app/client/startup.js
index fabfe9b..4823cbd 100644
--- a/app/client/startup.js
+++ b/app/client/startup.js
@@ -9,6 +9,14 @@ Tracker.autorun(function() {
function safeRoute(route) {
return function () {
+ var controllerId = this.params.query.controller_id;
+
+ if(controllerId) {
+ Session.setPersistent('controller_id', controllerId);
+ Session.setPersistent('hide_controller_selection', true);
+ } else {
+ Session.setPersistent('hide_controller_selection', false);
+ }
console.log('go ', route);
if (Meteor.zoblak.client.accessible(route)) {
Session.set('templateName', route);
diff --git a/app/client/tabs.html b/app/client/tabs.html
index 002f10b..329b939 100644
--- a/app/client/tabs.html
+++ b/app/client/tabs.html
@@ -21,7 +21,7 @@
Alarm
{{/if}}
-
+
diff --git a/app/client/tabs.js b/app/client/tabs.js
index 381513c..d8751d0 100644
--- a/app/client/tabs.js
+++ b/app/client/tabs.js
@@ -11,31 +11,43 @@ Template.tabs.helpers({
}
},
+ class_for_changer: function() {
+ var hide = Session.get('hide_controller_selection');
+ return (hide) ? "controller_selection hidden" : "controller_selection";
+ },
+
selected_controller: function() {
- return Session.get('controller_id');
+ return
},
accessible: Meteor.zoblak.client.accessible
});
-
+function saveParamsAndGo(where) {
+ var hideControllerSelection = Session.get('hide_controller_selection');
+ if (hideControllerSelection) {
+ Router.go(where + "?controller_id=" + Session.get('controller_id'));
+ } else {
+ Router.go(where);
+ }
+}
Template.tabs.events({
'click .start': function() {
- Router.go('/');
+ saveParamsAndGo('/');
},
'click .weather': function() {
- Router.go('/weather');
+ saveParamsAndGo('/weather');
},
'click .log': function() {
- Router.go('/log');
+ saveParamsAndGo('/log');
},
'click .surveillance': function() {
- Router.go('/surveillance');
+ saveParamsAndGo('/surveillance');
},
'click .alarm': function() {
- Router.go('/alarm');
+ saveParamsAndGo('/alarm');
},
'click .settings': function() {
Session.set('templateName', 'settings');
diff --git a/app/server/api.js b/app/server/api.js
index 49c999c..beda432 100644
--- a/app/server/api.js
+++ b/app/server/api.js
@@ -28,6 +28,7 @@ Api.addRoute('sensorData', {
created_at: new Date()
};
SensorData.insert(sensorObject);
+ reactToAlarmData(this.bodyParams.controllerId);
return [];
}
});
@@ -36,13 +37,27 @@ Api.addRoute('alarm/:id/phonePing', {
authRequired: false
}, {
post: function() {
- return ControllerState.update({
+ ControllerState.update({
controller_id: this.urlParams.id
}, {
'$set': {
'lastPhoneContact': new Date(),
}
});
+ var state = stateOrDefault(this.urlParams.id).state;
+
+ if(state.alarmTriggered) {
+ return {
+ 'alarmTriggered': state.alarmTriggered,
+ 'tooHot': state.alarmReasons.tooHot,
+ 'tooCold': state.alarmReasons.tooCold,
+ 'phoneSilent': state.alarmReasons.phoneSilent,
+ 'boxSilent': state.alarmReasons.boxSilent
+ };
+ } else {
+ return {};
+ }
+
}
});
@@ -170,7 +185,14 @@ function stateOrDefault(id) {
controller_id: id,
state: {
out_valve: 'closed',
- in_valve: 'closed'
+ in_valve: 'closed',
+ alarmTriggered: false,
+ alarmReasons: {
+ tooHot: false,
+ tooCold: false,
+ boxSilent: false,
+ phoneSilent: false
+ }
},
time: new Date(),
config: {
diff --git a/app/server/methods.js b/app/server/methods.js
index 80bef82..d601952 100644
--- a/app/server/methods.js
+++ b/app/server/methods.js
@@ -149,8 +149,8 @@ function saveAlarmSettings(controller_id, minTemperature, maxTemperature, timeou
'$set': {
'config.minTemperature': parseFloat(minTemperature),
'config.maxTemperature': parseFloat(maxTemperature),
- 'config.timeoutBox': parseInt(timeoutBox),
- 'config.timeoutPhone': parseInt(timeoutPhone),
+ 'config.timeoutBox': timeoutBox ? parseInt(timeoutBox) : null,
+ 'config.timeoutPhone': timeoutPhone ? parseInt(timeoutPhone) : null,
'config.smsNumbers': smsNumbers,
'config.sms1': smsNumbers[0],
'config.sms2': smsNumbers[1],
@@ -164,12 +164,14 @@ function saveAlarmSettings(controller_id, minTemperature, maxTemperature, timeou
SyncedCron.add({
name: jobName,
schedule: function(parser) {
- return parser.text('every 30 seconds');
+ return parser.text('every 10 seconds');
},
job: function() {
reactToAlarmData(controller_id);
}
});
+
+ reactToAlarmData(controller_id);
}
@@ -178,13 +180,13 @@ function saveAlarmSettings(controller_id, minTemperature, maxTemperature, timeou
// 2. triggered ( state.alarmTriggered: true, state.alarmStopped: null )
// 3. silenced ( state.alarmTriggered: false, state.alarmStopped: (sometime) )
-function reactToAlarmData(controller_id) {
+reactToAlarmData = function(controller_id) {
var reading = last_sensor_reading(controller_id);
var state = Meteor.zoblak.server.controller_state(controller_id);
var config = state.config;
var minTemperature = function(temperatures) {
- // if it gets a lot colder than absolute zero we will
+ // if it gets a lot colder than absolute zero
// we will have more problems than the bug in this code
if (temperatures.length <= 0) return -1000;
var minimal = parseFloat(temperatures[0]);
@@ -218,6 +220,7 @@ function reactToAlarmData(controller_id) {
var minutesSinceLastPhoneContact = state.lastPhoneContact ? moment(new Date()).diff(moment(state.lastPhoneContact), 'minutes') : -1;
var phoneSilent = config.timeoutPhone && minutesSinceLastPhoneContact > config.timeoutPhone;
+ console.log("too ", tooCold, tooHot, boxSilent, phoneSilent);
console.log("lpc", state.lastPhoneContact);
console.log("mslpc", minutesSinceLastPhoneContact);
console.log("phoneSilent", phoneSilent);
@@ -249,7 +252,7 @@ function soundTheAlarm(controller_id, tooCold, tooHot, boxSilent, phoneSilent) {
};
var smsSent = !!state.state.alarmSmsSent;
- var needsToSendSms = !smsSent; // && (boxSilent || phoneSilent);
+ var needsToSendSms = !smsSent && phoneSilent;
var sendSmsPart = needsToSendSms ? { 'state.alarmSmsSent': true } : {};
diff --git a/app/server/publications.js b/app/server/publications.js
index 30ae624..1031bf3 100644
--- a/app/server/publications.js
+++ b/app/server/publications.js
@@ -17,6 +17,10 @@ Meteor.publish("controller_state", function(controllerId) {
});
});
+Meteor.publish("all_controller_states", function() {
+ return ControllerState.find({});
+});
+
// This code only runs on the server
Meteor.publish("pictures", function(controllerId) {