diff --git a/bin/www b/bin/www index 87ffb43..d2484eb 100755 --- a/bin/www +++ b/bin/www @@ -12,7 +12,7 @@ var http = require('http'); * Get port from environment and store in Express. */ -var port = normalizePort(process.env.PORT || '3000'); +var port = normalizePort(process.env.PORT || '80'); app.set('port', port); /** diff --git a/public/javascripts/custom.js b/public/javascripts/custom.js index 89e4e32..a3873f9 100644 --- a/public/javascripts/custom.js +++ b/public/javascripts/custom.js @@ -13,5 +13,5 @@ $(document).ready(function(){ $(function() { $( "#datepicker" ).datepicker(); }); - + }); \ No newline at end of file diff --git a/public/javascripts/sensor_information.js b/public/javascripts/sensor_information.js new file mode 100644 index 0000000..475bcb5 --- /dev/null +++ b/public/javascripts/sensor_information.js @@ -0,0 +1,78 @@ +$(document).ready(function(){ + + Chart.defaults.global.responsive = true; + + var loc = $("#sensor-location").text(); + console.log(loc); + loc = loc.split().join("+"); + + $.get("/api/sensorbylocation?location=" + loc, function(request){ + + var json = request; + var data = {labels : [], datasets : []}; + + data.datasets.push({ + label: "Max Temperature", + fillColor: "rgba(220,220,220,0.2)", + strokeColor: "rgba(220,220,220,1)", + pointColor: "rgba(220,220,220,1)", + pointStrokeColor: "#fff", + pointHighlightFill: "#fff", + pointHighlightStroke: "rgba(220,220,220,1)", + data: [] + }, + { + label: "Min Temperature", + fillColor: "rgba(151,187,205,0.2)", + strokeColor: "rgba(151,187,205,1)", + pointColor: "rgba(151,187,205,1)", + pointStrokeColor: "#fff", + pointHighlightFill: "#fff", + pointHighlightStroke: "rgba(151,187,205,1)", + data: [] + }); + + for (var i in json){ + data.labels.push(json[i]._id.month + "/" + json[i]._id.day + "/" + json[i]._id.year); + data.datasets[0].data.push(json[i].max); + data.datasets[1].data.push(json[i].min); + } + + + + + // Get context with jQuery - using jQuery's .get() method. + var ctx = $("#info-chart").get(0).getContext("2d"); + // This will get the first returned node in the jQuery collection. + var myLineChart = new Chart(ctx).Line(data); + + }); + + +}); + +var test123 = { + labels: ["January", "February", "March", "April", "May", "June", "July"], + datasets: [ + { + label: "My First dataset", + fillColor: "rgba(220,220,220,0.2)", + strokeColor: "rgba(220,220,220,1)", + pointColor: "rgba(220,220,220,1)", + pointStrokeColor: "#fff", + pointHighlightFill: "#fff", + pointHighlightStroke: "rgba(220,220,220,1)", + data: [65, 59, 80, 81, 56, 55, 40] + }, + { + label: "My Second dataset", + fillColor: "rgba(151,187,205,0.2)", + strokeColor: "rgba(151,187,205,1)", + pointColor: "rgba(151,187,205,1)", + pointStrokeColor: "#fff", + pointHighlightFill: "#fff", + pointHighlightStroke: "rgba(151,187,205,1)", + data: [28, 48, 40, 19, 86, 27, 90] + } + ] +}; \ No newline at end of file diff --git a/routes/api.js b/routes/api.js index 844f9f4..e33d5d2 100644 --- a/routes/api.js +++ b/routes/api.js @@ -6,14 +6,14 @@ require("../models/temperature"); var temperature = mongoose.model('temperature'); -/* GET sensors page. */ +//api to return the max and min temps of each day based on location router.get('/allsensors', function(req, res, next) { //var location = req.query.location; temperature.aggregate([{$group : { _id : {location : "$location", month: {$month: "$updated" }, day: { $dayOfMonth: "$updated" }, year: { $year: "$updated" }}, max : {$max : "$temperature"}, min : {$min : "$temperature"}}}, - {$sort : {"_id.month" : -1, "_id.day" : -1, "_id.year" : -1}}]).exec(function(err, info){ + {$sort : {"_id.month" : 1, "_id.day" : 1, "_id.year" : 1}}]).exec(function(err, info){ console.log(info); res.setHeader('Content-Type', 'application/json'); @@ -26,13 +26,20 @@ router.get('/allsensors', function(req, res, next) { router.get('/sensorbylocation', function(req, res, next) { var loc = req.query.location; - console.log(loc); - //var location = req.query.location; - temperature.aggregate([ {$match : {location : loc}}, + var year = req.query.year; + + if (year == null){ + var date = new Date(); + year = date.getFullYear(); + } + + //query finds a entries in a collection based on location and the year specified + //they are then grouped by date and sorted by date as well + temperature.aggregate([ {$match : {location : loc, updated : {$gte : new Date('1 Jan, ' + year), $lt : new Date('1 Jan ' + year +1)}}}, {$group : { _id : {location : "$location", month: {$month: "$updated" }, day: { $dayOfMonth: "$updated" }, year: { $year: "$updated" }}, max : {$max : "$temperature"}, min : {$min : "$temperature"}}}, - {$sort : {"_id.month" : -1, "_id.day" : -1, "_id.year" : -1}}]).exec(function(err, info){ + {$sort : {"_id.month" : 1, "_id.day" : 1, "_id.year" : 1}}]).exec(function(err, info){ console.log(info); res.setHeader('Content-Type', 'application/json'); diff --git a/routes/sensors.js b/routes/sensors.js index 79d5b74..ccf567e 100644 --- a/routes/sensors.js +++ b/routes/sensors.js @@ -11,6 +11,9 @@ router.get('/', function(req, res, next) { temperature.aggregate( [ {$sort : {location : -1, updated : -1}}, { $group : { _id : "$location", temperature : {$first : "$temperature"}, humidity : {$first : "$humidity"}, updated : {$first : "$updated"}} } ] ).exec(function(err, info){ + //get month for each entry and convert 24 hour time to US time + //also check to see if device has sent a data point in past 5 minutes + //if not will show up as disconnected for (var i = 0; i < info.length; i++){ var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; @@ -23,6 +26,17 @@ router.get('/', function(req, res, next) { var dateString = month + " " + date + ", " + year; + var loc = info[i]._id; + + var info_link = "/sensors/information?location=" + + if (loc != null){ + loc = loc.split().join("+"); + info_link += loc; + } + + info[i].info_link = info_link; + //converting 24 hours time to AM or PM if (hours < 12){ info[i].lastUpdate = dateString + " - " + hours + ":" + minutes + " AM (ET)"; @@ -36,7 +50,7 @@ router.get('/', function(req, res, next) { } //compared current time to last db entry - 1200000 milliseconds is 2 minutes - if(info[i].updated.getTime() > (Date.now() - 120000)){ + if(info[i].updated.getTime() > (Date.now() - 350000)){ info[i].connected = true; } else { @@ -53,7 +67,15 @@ router.get('/', function(req, res, next) { }); -router.post('/', function(req, res,next) { +router.get('/information', function(req, res, err){ + + var sensor_location = req.query.location; + + if (sensor_location == null){ + res.redirect('/404'); + } + + res.render('sensor_information', {info : {location : sensor_location}}); }); diff --git a/views/sensor_information.ejs b/views/sensor_information.ejs new file mode 100644 index 0000000..b3dd967 --- /dev/null +++ b/views/sensor_information.ejs @@ -0,0 +1,59 @@ + + + +
+ <% include layout.ejs %> + + + + + + + +<% include ../public/html/navbar.html %> + +