-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdashboard.js
More file actions
113 lines (103 loc) · 2.94 KB
/
dashboard.js
File metadata and controls
113 lines (103 loc) · 2.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
const AGWE_DB = "AgWe Data";
const DB_VERSION = 1;
const EVENT_STORES = ["temp", "humid", "light"];
var db;
var temp = [], humid = [], light = [];
var data = [temp, humid, light];
openDB();
var socket = io("http://" + document.domain);
EVENT_STORES.forEach(function(store_name){
socket.on(store_name, function (data) {
document.getElementById(store_name).innerHTML = data[store_name];
if(db){storeReading(store_name, data)}
});
});
function openDB(){
var db_req = indexedDB.open(AGWE_DB, DB_VERSION);
db_req.onsuccess = function () {
db = this.result;
data.forEach(function(store, index){
fetchData(EVENT_STORES[index], store);
});
};
db_req.onerror = function (evt) {
console.error("openDb error:", evt.target.errorCode);
};
db_req.onupgradeneeded = function (event) {
var db = event.target.result;
EVENT_STORES.forEach(function(store_name){
db.createObjectStore(store_name, { keyPath: "timestamp" });
});
};
}
function getObjectStore (store_name, mode) {
var tx = db.transaction(store_name, mode);
return tx.objectStore(store_name);
}
function storeReading (store_name, data) {
//TODO generate timestamps at sensor read time
data.timestamp = Date.now();
var store = getObjectStore(store_name, 'readwrite');
var action = store.add(data);
action.onsuccess = function () {
console.log(store_name, " Insertion in DB successful");
};
action.onerror = function() {
console.error(store_name, " DB Insert error: ", this.error);
};
}
function fetchData (store_name, data_array) {
var store = getObjectStore(store_name, 'readonly');
store.openCursor().onsuccess = function (event) {
var cursor = event.target.result;
if (cursor) {
data_array.push(cursor.value);
cursor.continue();
}else {
displayData(store_name, data_array);
graphData(store_name, data_array);
}
}
}
function graphData(store_name, data_array) {
var data = [];
var labels = [];
data_array.forEach(function(datapt){
data.push(datapt[store_name]);
labels.push(new Date(datapt.timestamp).toLocaleTimeString());
});
var ctx = document.getElementById(store_name + "-chart");
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: labels,
datasets: [{
label: store_name,
data: data,
fill: true,
lineTension: 0,
borderWidth: 1,
pointRadius: 0.1,
pointStyle: 'line',
backgroundColor: 'rgb(38, 90, 136)'
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: false
}
}]
}
}
});
}
function displayData (store_name, data_array) {
var tbodyID = store_name + "-body";
var tbody = document.getElementById(tbodyID);
data_array.forEach(function(dobj){
var formatdate = new Date(dobj.timestamp);
tbody.innerHTML = tbody.innerHTML + "<tr><td>" + formatdate +"</td><td>" + dobj[store_name] + "</td></tr>";
});
}