diff --git a/app/client/alarm.js b/app/client/alarm.js index 97a1a0a..16a1d12 100644 --- a/app/client/alarm.js +++ b/app/client/alarm.js @@ -36,7 +36,9 @@ Template.alarm.helpers({ var temperatures = last_sensor_reading().temperatures; for (var i in temperatures) { - result += '' + parseFloat(temperatures[i]).toFixed(1) + ' °C '; + var temperature = parseFloat(temperatures[i]).toFixed(1); + var temperatureLabel = (Meteor.zoblak.shared.valid_temperature(temperature)) ? temperature : "XX.X"; + result += '' + temperatureLabel + ' °C '; } return result; }, diff --git a/app/lib/zoblak.js b/app/lib/zoblak.js index 700d55a..07397aa 100644 --- a/app/lib/zoblak.js +++ b/app/lib/zoblak.js @@ -27,6 +27,12 @@ Meteor.zoblak.client = { } } +Meteor.zoblak.shared = { + valid_temperature: function(value) { + return (parseFloat(value) > -40 && parseFloat(value) < 50); + } +} + Meteor.zoblak.server = { controller_state: function(controller_id) { var result = {} diff --git a/app/server/methods.js b/app/server/methods.js index 7171cb1..c4e8d8b 100644 --- a/app/server/methods.js +++ b/app/server/methods.js @@ -158,7 +158,7 @@ function saveAlarmSettings(controller_id, minTemperature, maxTemperature, timeou 'config.sms4': smsNumbers[3] } }); - + var jobName = "automatic_alarm_" + controller_id; SyncedCron.remove(jobName); @@ -186,6 +186,7 @@ reactToAlarmData = function(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 have more problems than the bug in this code @@ -197,7 +198,7 @@ reactToAlarmData = function(controller_id) { } } return minimal; - } + }; var maxTemperature = function(temperatures) { // obviously - hell is not supported in this version @@ -209,11 +210,13 @@ reactToAlarmData = function(controller_id) { } } return maximal; - } + }; - var tooCold = config.minTemperature && (minTemperature(reading.temperatures) < config.minTemperature); + var temperatures = (reading.temperatures || []).filter(Meteor.zoblak.shared.valid_temperature); - var tooHot = config.maxTemperature && (maxTemperature(reading.temperatures) > config.maxTemperature); + var tooCold = config.minTemperature && (minTemperature(temperatures) < config.minTemperature); + + var tooHot = config.maxTemperature && (maxTemperature(temperatures) > config.maxTemperature); var minutesSinceLastBoxContact = reading.lastBoxContact ? moment(new Date()).diff(moment(reading.lastBoxContact), 'minutes') : -1; var boxSilent = config.timeoutBox && minutesSinceLastBoxContact > config.timeoutBox;