From 74c49244e725e880924fa0b39ab3c00cff4e948d Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Thu, 2 Jun 2016 17:50:25 +0200 Subject: [PATCH] PowerChalange uses Ajax now and will update minute and hourly charts periodically. --- resource/web/pc_overview.tmpl | 65 ++++++--------- src/se/hal/page/PCOverviewHttpPage.java | 82 +++++++++---------- .../hal/util/AggregateDataListSqlResult.java | 8 +- 3 files changed, 67 insertions(+), 88 deletions(-) diff --git a/resource/web/pc_overview.tmpl b/resource/web/pc_overview.tmpl index cce2aad2..e66c0643 100755 --- a/resource/web/pc_overview.tmpl +++ b/resource/web/pc_overview.tmpl @@ -2,70 +2,53 @@

Last 24 hours (kWh/5min)

-
+

Last Week (kWh/h)

-
+

All History (kWh/day)

-
+

All History (kWh/week)

-
+
diff --git a/src/se/hal/page/PCOverviewHttpPage.java b/src/se/hal/page/PCOverviewHttpPage.java index 8019d9b3..48a0618e 100755 --- a/src/se/hal/page/PCOverviewHttpPage.java +++ b/src/se/hal/page/PCOverviewHttpPage.java @@ -41,26 +41,11 @@ public class PCOverviewHttpPage extends HalHttpPage implements HalHttpPage.HalJs ArrayList hourDataList = new ArrayList<>(); ArrayList dayDataList = new ArrayList<>(); ArrayList weekDataList = new ArrayList<>(); - List sensors = getSensorList(db); - for (Sensor sensor : sensors) { - minDataList.addAll(AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.FIVE_MINUTES, UTCTimeUtility.DAY_IN_MS)); - - hourDataList.addAll(AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.HOUR, UTCTimeUtility.WEEK_IN_MS)); - - dayDataList.addAll(AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.DAY, UTCTimeUtility.INFINITY)); - - weekDataList.addAll(AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.WEEK, UTCTimeUtility.INFINITY)); - } - Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); tmpl.set("users", User.getUsers(db)); tmpl.set("sensors", sensors); - tmpl.set("minData", minDataList); - tmpl.set("hourData", hourDataList); - tmpl.set("dayData", dayDataList); - tmpl.set("weekData", weekDataList); return tmpl; } @@ -75,33 +60,40 @@ public class PCOverviewHttpPage extends HalHttpPage implements HalHttpPage.HalJs DBConnection db = HalContext.getDB(); List sensors = getSensorList(db); - if (request.get("data").contains("minute")) { + if (request.containsKey("data")) { DataNode node = new DataNode(DataNode.DataType.List); - for (Sensor sensor : sensors) - addAggregateDataToDataNode(node, - AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.FIVE_MINUTES, UTCTimeUtility.DAY_IN_MS)); - root.set("minuteData", node); - } - if (request.get("data").contains("hour")) { - DataNode node = new DataNode(DataNode.DataType.List); - for (Sensor sensor : sensors) - addAggregateDataToDataNode(node, - AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.HOUR, UTCTimeUtility.WEEK_IN_MS)); - root.set("minuteData", node); - } - if (request.get("data").contains("day")) { - DataNode node = new DataNode(DataNode.DataType.List); - for (Sensor sensor : sensors) - addAggregateDataToDataNode(node, - AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.DAY, UTCTimeUtility.INFINITY)); - root.set("minuteData", node); - } - if (request.get("data").contains("week")) { - DataNode node = new DataNode(DataNode.DataType.List); - for (Sensor sensor : sensors) - addAggregateDataToDataNode(node, - AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.WEEK, UTCTimeUtility.INFINITY)); - root.set("minuteData", node); + if (request.get("data").equals("minute")) { + DataNode nowTime = new DataNode(DataNode.DataType.Map); + nowTime.set("time", System.currentTimeMillis()-24*60*60*1000); + node.add(nowTime); + for (Sensor sensor : sensors) + addAggregateDataToDataNode(node, + AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.FIVE_MINUTES, UTCTimeUtility.DAY_IN_MS)); + } + else if (request.get("data").equals("hour")) { + DataNode nowTime = new DataNode(DataNode.DataType.Map); + nowTime.set("time", System.currentTimeMillis()-7*24*60*60*1000); + node.add(nowTime); + for (Sensor sensor : sensors) + addAggregateDataToDataNode(node, + AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.HOUR, UTCTimeUtility.WEEK_IN_MS)); + } + else if (request.get("data").equals("day")) { + for (Sensor sensor : sensors) + addAggregateDataToDataNode(node, + AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.DAY, UTCTimeUtility.INFINITY)); + } + else if (request.get("data").equals("week")) { + for (Sensor sensor : sensors) + addAggregateDataToDataNode(node, + AggregateDataListSqlResult.getAggregateDataForPeriod(db, sensor, AggregationPeriodLength.WEEK, UTCTimeUtility.INFINITY)); + } + + DataNode nowTime = new DataNode(DataNode.DataType.Map); + nowTime.set("time", System.currentTimeMillis()); + node.add(nowTime); + + root.set("data", node); } return root; @@ -111,7 +103,10 @@ public class PCOverviewHttpPage extends HalHttpPage implements HalHttpPage.HalJs for (AggregateDataListSqlResult.AggregateData data : dataList) { DataNode dataNode = new DataNode(DataNode.DataType.Map); dataNode.set("time", data.timestamp); - dataNode.set("" + data.id, data.data); + if (data.data == Float.NaN) + dataNode.set("" + data.id, (String)null); + else + dataNode.set("" + data.id, data.data); root.add(dataNode); } } @@ -122,7 +117,8 @@ public class PCOverviewHttpPage extends HalHttpPage implements HalHttpPage.HalJs private List getSensorList(DBConnection db) throws SQLException { List sensors = new ArrayList<>(); for (Sensor sensor : Sensor.getSensors(db)) { - if (sensor instanceof PowerConsumptionSensorData) + if (sensor.getDeviceData() != null && + sensor.getDeviceData() instanceof PowerConsumptionSensorData) sensors.add(sensor); } return sensors; diff --git a/src/se/hal/util/AggregateDataListSqlResult.java b/src/se/hal/util/AggregateDataListSqlResult.java index 3a5c972c..2f98554d 100755 --- a/src/se/hal/util/AggregateDataListSqlResult.java +++ b/src/se/hal/util/AggregateDataListSqlResult.java @@ -17,10 +17,10 @@ public class AggregateDataListSqlResult implements SQLResultHandler