From e336c4f9f2aec212eb77e6466d3aeb08a0d87cfd Mon Sep 17 00:00:00 2001 From: charithag Date: Mon, 6 Jul 2015 17:53:47 +0530 Subject: [PATCH] Add sensor types for CPU Load and RAM Usage --- .../jaggeryapps/iotserver/api/stats-api.jag | 69 +++++++++++---- .../iotserver/units/analytics/analytics.hbs | 54 ++---------- .../units/analytics/public/js/graph_util.js | 16 ++++ .../analytics/public/js/graphs/cpu_graph.js | 69 +++++++++++++++ .../analytics/public/js/graphs/ram_graph.js | 69 +++++++++++++++ .../public/img/device_icons/raspberrypi.png | Bin 0 -> 8006 bytes .../public/images/raspberrypi.png | Bin 0 -> 8006 bytes .../devices/android_sense/android_sense.hbs | 82 ++++++++---------- .../units/devices/raspberrypi/raspberrypi.hbs | 4 +- .../iotserver/units/downloads/downloads.hbs | 0 .../iotserver/units/downloads/downloads.json | 3 + .../units/downloads/public/android-app.apk | 0 12 files changed, 252 insertions(+), 114 deletions(-) create mode 100644 modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graphs/cpu_graph.js create mode 100644 modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graphs/ram_graph.js create mode 100644 modules/distribution/src/repository/jaggeryapps/iotserver/units/device-detail/public/img/device_icons/raspberrypi.png create mode 100644 modules/distribution/src/repository/jaggeryapps/iotserver/units/device-listing/public/images/raspberrypi.png create mode 100644 modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/downloads.hbs create mode 100644 modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/downloads.json create mode 100644 modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/public/android-app.apk diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/api/stats-api.jag b/modules/distribution/src/repository/jaggeryapps/iotserver/api/stats-api.jag index 0fafe9cb..bcd3e72c 100644 --- a/modules/distribution/src/repository/jaggeryapps/iotserver/api/stats-api.jag +++ b/modules/distribution/src/repository/jaggeryapps/iotserver/api/stats-api.jag @@ -43,12 +43,28 @@ if (uriMatcher.match("/{context}/api/stats")) { } log.info("deviceId : " + deviceId + " from : " + from + " to : " + to); - if(deviceType=="firealarm"){ - result = getFireAlarmData(user.username, deviceId, from, to); - }else if(deviceType=="sensebot"){ - result = getSensebotData(user.username, deviceId, from, to); - }else if(deviceType=="arduino"){ - result = getArduinoData(user.username, deviceId, from, to); + + switch (deviceType){ + case "firealarm": + result = getFireAlarmData(user.username, deviceId, from, to); + break; + case "sensebot": + result = getSensebotData(user.username, deviceId, from, to); + break; + case "arduino": + result = getArduinoData(user.username, deviceId, from, to); + break; + case "digital_display": + result = getDigitalDisplayData(user.username, deviceId, from, to); + break; + case "android_sense": + result = getAndroidSenseData(user.username, deviceId, from, to); + break; + case "raspberrypi": + result = getDigitalDisplayData(user.username, deviceId, from, to); + break; + default: + result = new Object(); } } @@ -57,6 +73,14 @@ if (result) { print(result); } +function getFireAlarmData(user, deviceId, from, to){ + result = new Object(); + result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); + result['fanData'] = getSensorData("DEVICE_FAN_USAGE_SUMMARY","status",user, deviceId, from, to); + result['bulbData'] = getSensorData("DEVICE_BULB_USAGE_SUMMARY","status",user, deviceId, from, to); + return result; +} + function getSensebotData(user, deviceId, from, to){ result = new Object(); result['sonarData'] = getSensorData("SONAR_SENSOR_SUMMARY","sonar",user, deviceId, from, to); @@ -66,22 +90,33 @@ function getSensebotData(user, deviceId, from, to){ return result; } - -function getFireAlarmData(user, deviceId, from, to){ +function getArduinoData(user, deviceId, from, to){ result = new Object(); + result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); + return result; +} - //result['sonarData'] = getSensorData("SONAR_SENSOR_SUMMARY","sonar",user, deviceId, from, to); - //result['motionData'] = getSensorData("PIR_MOTION_SENSOR_SUMMARY","motion",user, deviceId, from, to); - //result['lightData'] = getSensorData("LDR_LIGHT_SENSOR_SUMMARY","light",user, deviceId, from, to); +function getDigitalDisplayData(user, deviceId, from, to){ + result = new Object(); + result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to); + result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to); + result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); + return result; +} +function getAndroidSenseData(user, deviceId, from, to){ + result = new Object(); + result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to); + result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to); result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); - result['fanData'] = getSensorData("DEVICE_FAN_USAGE_SUMMARY","status",user, deviceId, from, to); - result['bulbData'] = getSensorData("DEVICE_BULB_USAGE_SUMMARY","status",user, deviceId, from, to); + result['motionData'] = getSensorData("PIR_MOTION_SENSOR_SUMMARY","motion",user, deviceId, from, to); return result; } -function getArduinoData(user, deviceId, from, to){ +function getDigitalDisplayData(user, deviceId, from, to){ result = new Object(); + result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to); + result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to); result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); return result; } @@ -96,18 +131,18 @@ function getSensorData(table, column, user, deviceId, from, to) { log.info(error); } - var temperatureData = []; + var sensorData = []; if(fetchedData==null) return []; for (var i = 0; i < fetchedData.size(); i++) { - temperatureData.push({ + sensorData.push({ time: fetchedData.get(i).getTime(), value: fetchedData.get(i).getValue() }); } - return temperatureData; + return sensorData; } %> \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/analytics.hbs b/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/analytics.hbs index 557d1a9c..9575d03e 100644 --- a/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/analytics.hbs +++ b/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/analytics.hbs @@ -37,64 +37,20 @@
-
-
-

Temperature

-
-
No data available...
-
-
-
-
-
-

Light

-
-
No data available...
-
-
-
-
-
-

Motion

-
-
No data available...
-
-
-
-
-
-

Sonar

-
-
No data available...
-
-
-
-
-
-

Fan Status

-
-
No data available...
-
-
-
-
-
-

Bulb Status

-
-
No data available...
-
-
-
+
+
+
+
@@ -112,4 +68,6 @@ + + {{/zone}} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graph_util.js b/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graph_util.js index c49d5843..c8dbd110 100644 --- a/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graph_util.js +++ b/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graph_util.js @@ -195,6 +195,22 @@ function updateGraphs(stats) { $('#div-bulbData').html(""); } + var cpuData = stats['cpuData']; + if (typeof cpuData != 'undefined'){ + $('#div-CPUData').html("").html("

CPU Load



"); + updateCPUGraph(convertStateStatsToGraphData(cpuData)); + }else{ + $('#div-CPUData').html(""); + } + + var ramData = stats['ramData']; + if (typeof ramData != 'undefined'){ + $('#div-RAMData').html("").html("

RAM Usage



"); + updateRAMGraph(convertStateStatsToGraphData(ramData)); + }else{ + $('#div-RAMData').html(""); + } + scaleGraphs(); } diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graphs/cpu_graph.js b/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graphs/cpu_graph.js new file mode 100644 index 00000000..cdaf9b2a --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graphs/cpu_graph.js @@ -0,0 +1,69 @@ +function updateCPUGraph(CPUData) { + renderCPUChart(CPUData); +} + +function renderCPUChart(chartDataRaw){ + var chartWrapperElmId = "#canvas-wrapper7"; + var graphWidth = $(chartWrapperElmId).width() - 50; + if (chartDataRaw.length == 0) { + $(chartWrapperElmId).html("No data available..."); + return; + } + + var chartData = []; + for (var i = 0; i < chartDataRaw.length; i++){ + chartData.push({x:parseInt(chartDataRaw[i].x), y:parseInt(chartDataRaw[i].y)}); + } + + //var i = parseInt(fromDate); + //while (i < parseInt(toDate)){ + // var rnd = Math.random() * (30 - 20) + 20; + // chartData.push({x:i * 1000, y:rnd}); + // i += 60 * 5; + //} + + var chartDiv = "chart7"; + var sliderDiv = "slider7"; + var x_axis = "x_axis7"; + var y_axis = "y_axis7"; + $(chartWrapperElmId).html("").html('
'); + + var graph = new Rickshaw.Graph({ + element: document.getElementById(chartDiv), + width: graphWidth, + height: 400, + strokeWidth: 1, + renderer: 'line', + xScale: d3.time.scale(), + padding: {top: 0.2, left: 0.02, right: 0.02, bottom: 0}, + series:[ + { color: '#2F0B3A', data: chartData } + ] + }); + + graph.render(); + + var xAxis = new Rickshaw.Graph.Axis.X({ + graph: graph, + orientation: 'bottom', + element: document.getElementById(x_axis), + tickFormat: graph.x.tickFormat() + }); + + xAxis.render(); + + var yAxis = new Rickshaw.Graph.Axis.Y({ + graph: graph, + orientation: 'left', + element: document.getElementById(y_axis), + width: 40, + height: 410 + }); + + yAxis.render(); + + var slider = new Rickshaw.Graph.RangeSlider.Preview({ + graph: graph, + element: document.getElementById(sliderDiv) + }); +} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graphs/ram_graph.js b/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graphs/ram_graph.js new file mode 100644 index 00000000..5b6953e8 --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iotserver/units/analytics/public/js/graphs/ram_graph.js @@ -0,0 +1,69 @@ +function updateRAMGraph(RAMData) { + renderRAMChart(RAMData); +} + +function renderRAMChart(chartDataRaw){ + var chartWrapperElmId = "#canvas-wrapper8"; + var graphWidth = $(chartWrapperElmId).width() - 50; + if (chartDataRaw.length == 0) { + $(chartWrapperElmId).html("No data available..."); + return; + } + + var chartData = []; + for (var i = 0; i < chartDataRaw.length; i++){ + chartData.push({x:parseInt(chartDataRaw[i].x), y:parseInt(chartDataRaw[i].y)}); + } + + //var i = parseInt(fromDate); + //while (i < parseInt(toDate)){ + // var rnd = Math.random() * (30 - 20) + 20; + // chartData.push({x:i * 1000, y:rnd}); + // i += 60 * 5; + //} + + var chartDiv = "chart8"; + var sliderDiv = "slider8"; + var x_axis = "x_axis8"; + var y_axis = "y_axis8"; + $(chartWrapperElmId).html("").html('
'); + + var graph = new Rickshaw.Graph({ + element: document.getElementById(chartDiv), + width: graphWidth, + height: 400, + strokeWidth: 1, + renderer: 'line', + xScale: d3.time.scale(), + padding: {top: 0.2, left: 0.02, right: 0.02, bottom: 0}, + series:[ + { color: '#170B3B', data: chartData } + ] + }); + + graph.render(); + + var xAxis = new Rickshaw.Graph.Axis.X({ + graph: graph, + orientation: 'bottom', + element: document.getElementById(x_axis), + tickFormat: graph.x.tickFormat() + }); + + xAxis.render(); + + var yAxis = new Rickshaw.Graph.Axis.Y({ + graph: graph, + orientation: 'left', + element: document.getElementById(y_axis), + width: 40, + height: 410 + }); + + yAxis.render(); + + var slider = new Rickshaw.Graph.RangeSlider.Preview({ + graph: graph, + element: document.getElementById(sliderDiv) + }); +} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/device-detail/public/img/device_icons/raspberrypi.png b/modules/distribution/src/repository/jaggeryapps/iotserver/units/device-detail/public/img/device_icons/raspberrypi.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0e28cb26fd12e71a6645a8f35be731e2e268a1 GIT binary patch literal 8006 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 +

Android Sense


-

Connect your Android Sense - to the WSO2 device cloud.

+

Connect your Android Sense + to the WSO2 device cloud.

- -
+ +

Ingredients


@@ -21,70 +21,58 @@ - Arduino Uno

- - - - Arduino Ethernet / WiFi Shield -

-
- - - -
- -
+ Android Phone

+

+ +
+ + + +
+
-
-

Prepare


-

Get your device ready

-
- 01 Mount the Ethernet / Wifi shield on the Arduino Uno device. -
+
+

Prepare

+
+

Get your device ready

+ +
+ 01 Go to android device security settings. +
- 02 Mount the Ethernet / Wifi shield on the Arduino Uno device. + 02 Check unknown sources.
-
- 03 Mount the Ethernet / Wifi shield on the Arduino Uno device. -

Connect (Quickstart)


-

Internet of Things Foundation Quickstart connection

+

Internet of Things Foundation Quickstart connection

+
01 Use the following command to download the installer from GitHub:
- 02 Download the Sketch installer from the Arduino website http://arduino.cc/en/Main/Software
-
-
- 03 Install the Sketch program
+ 02 Copy downloaded apk in to device
- 04 Use the Sketch program to open the samples code: http://tinyurl.com/EUHackathonRobot
+ 03 Install apk in the device.
- 05 View the lower part of the Sketch pad window to check that the COM connection is shown as active
+ 04 Open Android Sense application.
+
{{/zone}} {{#zone "topCss"}} - - + + {{/zone}} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/devices/raspberrypi/raspberrypi.hbs b/modules/distribution/src/repository/jaggeryapps/iotserver/units/devices/raspberrypi/raspberrypi.hbs index 9b324792..5f373ef9 100644 --- a/modules/distribution/src/repository/jaggeryapps/iotserver/units/devices/raspberrypi/raspberrypi.hbs +++ b/modules/distribution/src/repository/jaggeryapps/iotserver/units/devices/raspberrypi/raspberrypi.hbs @@ -24,8 +24,8 @@ Raspberry Pi


diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/downloads.hbs b/modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/downloads.hbs new file mode 100644 index 00000000..e69de29b diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/downloads.json b/modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/downloads.json new file mode 100644 index 00000000..0e0dcd23 --- /dev/null +++ b/modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/downloads.json @@ -0,0 +1,3 @@ +{ + +} \ No newline at end of file diff --git a/modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/public/android-app.apk b/modules/distribution/src/repository/jaggeryapps/iotserver/units/downloads/public/android-app.apk new file mode 100644 index 00000000..e69de29b