From 7d3822904d7782b7294501d3b69567e9e0195e09 Mon Sep 17 00:00:00 2001 From: mgerb42 Date: Sat, 19 Dec 2015 03:53:29 -0600 Subject: [PATCH] added graphs --- bin/www | 2 +- public/javascripts/custom.js | 2 +- public/javascripts/sensor_information.js | 78 ++++++++++++++++++++++++ routes/api.js | 19 ++++-- routes/sensors.js | 26 +++++++- views/sensor_information.ejs | 59 ++++++++++++++++++ views/sensors.ejs | 38 ++---------- 7 files changed, 182 insertions(+), 42 deletions(-) create mode 100644 public/javascripts/sensor_information.js create mode 100644 views/sensor_information.ejs 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 %> + +
+
+

<%=info.location%>

+
+
+ + +
+ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + <% include layoutBottom.ejs %> + + + + + diff --git a/views/sensors.ejs b/views/sensors.ejs index 590c1e2..91b80ea 100644 --- a/views/sensors.ejs +++ b/views/sensors.ejs @@ -2,38 +2,13 @@ - mitchellg.me - - - - - + <% include layout.ejs %> -
- -
- - <% if (query[0] != null) { %> - -
- ESP8266 With DHT11 Sensor -
- Location: <%=query[0]._id%> -
- Temperature: <%=query[0].temperature%>°F -
- Humidity: <%=query[0].humidity%>% -
- - <%}%> - -
- -
+
<% include ../public/html/navbar.html %> @@ -53,7 +28,9 @@ <%} else {%> Disconnected <%}%> - +
+
+ <%}%> @@ -86,10 +63,7 @@ - - - - + <% include layoutBottom.ejs %>