From 5fac63cf5fa974d9723617bc2bfa8f4e668fe342 Mon Sep 17 00:00:00 2001 From: James Barnett Date: Sun, 1 Apr 2018 23:18:28 +0100 Subject: Show total and average usage for current day and month --- public/javascripts/dash.js | 96 ++++++++++++++++++++++++++++++++++---------- public/stylesheets/style.css | 6 +++ routes/energy-usage.js | 4 +- views/index.hbs | 12 +++--- 4 files changed, 87 insertions(+), 31 deletions(-) diff --git a/public/javascripts/dash.js b/public/javascripts/dash.js index 4ac25b5..2dab0de 100644 --- a/public/javascripts/dash.js +++ b/public/javascripts/dash.js @@ -1,6 +1,7 @@ var dash = { realtimeUsagePollRateMs: 1000, - powerStatePollRateMs: 10000, + powerStatePollRateMs: 60000, + historicalStatsPollRateMs: 300000, pollingEnabled: true, realtimeGauge: null, @@ -17,8 +18,6 @@ var dash = { this.initMonthlyUsageChart(); this.startPolling(); - this.getDailyUsageData(); - this.getMonthlyUsageData(); }, initRealtimeGauge: function() { @@ -200,6 +199,8 @@ var dash = { this.pollUsage(); this.pollPowerStatus(); + this.pollDayStats(); + this.pollMonthStats(); }, stopPolling: function() { @@ -207,19 +208,29 @@ var dash = { this.realtimeTrendChart.options.plugins.streaming = false; }, - getDailyUsageData: function() { - $.ajax({ - url: "/energy-usage/1/day-stats", - type: "GET", - success: function(data) { - dash.parseDailyUsageData(data); - }, - dataType: "json", - timeout: 4000 - }); + pollDayStats: function() { + if(this.pollingEnabled) { + $.ajax({ + url: "/energy-usage/1/day-stats", + type: "GET", + success: function(data) { + dash.parseDailyUsageData(data); + }, + dataType: "json", + complete: setTimeout(function() {dash.pollDayStats()}, dash.historicalStatsPollRateMs), + timeout: 4000 + }); + } }, parseDailyUsageData: function(usageData) { + + // Clear previous data + dash.dailyUsageChart.data.labels = []; + dash.dailyUsageChart.data.datasets.forEach(function(dataset) { + dataset.data = []; + }); + usageData.forEach(function(entry) { // Months from API response are 1 based var day = moment([entry.year, entry.month - 1, entry.day]); @@ -231,21 +242,47 @@ var dash = { }); dash.dailyUsageChart.update(); + dash.setDailyUsageStats(usageData); }, - getMonthlyUsageData: function() { - $.ajax({ - url: "/energy-usage/1/month-stats", - type: "GET", - success: function(data) { - dash.parseMonthlyUsageData(data); - }, - dataType: "json", - timeout: 4000 + setDailyUsageStats: function(usageData) { + + var dailyTotal = usageData.find(function(d) { + return d.day === moment().date() && d.month === (moment().month()+1) && d.year === moment().year() }); + + $("#total-day").text(dailyTotal.energy.toFixed(2)); + + var total = usageData.reduce(function(t, d) {return t + d.energy}, 0); + var avg = total/usageData.length; + + $("#avg-day").text(avg.toFixed(2)); + + }, + + pollMonthStats: function() { + if(this.pollingEnabled) { + $.ajax({ + url: "/energy-usage/1/month-stats", + type: "GET", + success: function(data) { + dash.parseMonthlyUsageData(data); + }, + dataType: "json", + complete: setTimeout(function() {dash.pollMonthStats()}, dash.historicalStatsPollRateMs), + timeout: 4000 + }); + } }, parseMonthlyUsageData: function(usageData) { + + // Clear previous data + dash.monthlyUsageChart.data.labels = []; + dash.monthlyUsageChart.data.datasets.forEach(function(dataset) { + dataset.data = []; + }); + usageData.forEach(function(entry) { // Months from API response are 1 based var month = moment().month(entry.month -1); @@ -257,6 +294,21 @@ var dash = { }); dash.monthlyUsageChart.update(); + dash.setMonthlyUsageStats(usageData); + }, + + setMonthlyUsageStats: function(usageData) { + + var monthlyTotal = usageData.find(function(m) { + return m.month === (moment().month()+1) && m.year === moment().year() + }); + + $("#total-month").text(monthlyTotal.energy.toFixed(2)); + + var total = usageData.reduce(function(t, m) {return t + m.energy}, 0); + var avg = total/usageData.length; + + $("#avg-month").text(avg.toFixed(2)); }, pollPowerStatus: function() { diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 919696c..3f4c1ca 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -20,3 +20,9 @@ footer ul { justify-content: center; margin-top: 0; } + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} \ No newline at end of file diff --git a/routes/energy-usage.js b/routes/energy-usage.js index 740e29e..eb21eb9 100644 --- a/routes/energy-usage.js +++ b/routes/energy-usage.js @@ -130,9 +130,9 @@ function fillMissingMonths(sparseMonthStats, statsMoment) { let denseMonthStats = []; let maxMonths; - // Dont fill months in months which havent happened yet + // Dont fill in months which exist in the future if(statsMoment.year() === moment().year()) { - maxMonths = moment().month(); + maxMonths = moment().month() + 1; // API months are 1 based } else { maxMonths = 12; diff --git a/views/index.hbs b/views/index.hbs index 3f023e6..7b2806d 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -40,7 +40,7 @@

- +

@@ -99,8 +99,6 @@ - -
@@ -142,7 +140,7 @@
-

- kWH

+

- kWH

@@ -156,7 +154,7 @@
-

- kWH

+

- kWH

@@ -170,7 +168,7 @@
-

- kWH

+

- kWH

@@ -184,7 +182,7 @@
-

- kWH

+

- kWH

-- cgit v1.2.3