2020-08-07 16:12:24 +00:00
|
|
|
const dbconnect = window.indexedDB.open('temps', 1);
|
|
|
|
|
var db = null
|
|
|
|
|
|
2020-08-08 19:41:25 +00:00
|
|
|
const interval = setInterval(writeTo, 2000);
|
2020-08-07 16:12:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
dbconnect.onupgradeneeded = ev => {
|
|
|
|
|
console.log('Upgrade DB');
|
|
|
|
|
const db = ev.target.result;
|
|
|
|
|
let store = db.createObjectStore('Temperatures', { keyPath: 'timestamp'});
|
|
|
|
|
store.createIndex("timestamp", "timestamp", { unique: false });
|
|
|
|
|
store.createIndex("temp", "temp", { unique: false });
|
|
|
|
|
|
|
|
|
|
store = db.createObjectStore('Humidities', { keyPath: 'timestamp'});
|
|
|
|
|
store.createIndex("timestamp", "timestamp", { unique: false });
|
|
|
|
|
store.createIndex("humidity", "humidity", { unique: false });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dbconnect.onsuccess = ev => {
|
|
|
|
|
console.log('DB-Upgrade erfolgreich');
|
|
|
|
|
db = ev.target.result;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function write(type, data){
|
|
|
|
|
const transaction = db.transaction(type, 'readwrite');
|
|
|
|
|
const store = transaction.objectStore(type);
|
|
|
|
|
|
|
|
|
|
data.forEach(el => store.add(el));
|
|
|
|
|
|
|
|
|
|
transaction.onerror = ev => {
|
|
|
|
|
console.error('Ein Fehler ist aufgetreten!', ev.target.error.message);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
transaction.oncomplete = ev => {
|
|
|
|
|
//console.log('Daten wurden erfolgreich hinzugefügt! ' + type);
|
|
|
|
|
const store = db.transaction(type, 'readonly').objectStore(type);
|
|
|
|
|
//const query = store.get(1); // Einzel-Query
|
|
|
|
|
const query = store.openCursor()
|
|
|
|
|
query.onerror = ev => {
|
|
|
|
|
console.error('Anfrage fehlgeschlagen!', ev.target.error.message);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
query.onsuccess = ev => {
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function writeTo(){
|
|
|
|
|
|
|
|
|
|
getJSON("/stats",
|
|
|
|
|
function (error, data) {
|
|
|
|
|
let date = new Date()
|
2020-08-08 19:41:25 +00:00
|
|
|
let time = date.toLocaleString()
|
2020-08-07 16:12:24 +00:00
|
|
|
let writeData = [
|
2020-08-08 19:41:25 +00:00
|
|
|
{timestamp: time, temperature: data["temperature"]}
|
2020-08-07 16:12:24 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
write("Temperatures", writeData)
|
|
|
|
|
|
|
|
|
|
writeData = [
|
2020-08-08 19:41:25 +00:00
|
|
|
{timestamp: time, humidity: data["humidity"]}
|
2020-08-07 16:12:24 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
write("Humidities", writeData)
|
|
|
|
|
},
|
|
|
|
|
function(){
|
|
|
|
|
console.log("Error while getting temps")
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
2020-08-08 19:41:25 +00:00
|
|
|
drawChart()
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function drawChart(){
|
|
|
|
|
|
|
|
|
|
let humiditiesDict = readLast("Humidities", 1)
|
|
|
|
|
let temperaturesDict = readLast("Temperatures", 1)
|
|
|
|
|
|
2020-08-07 16:12:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO: replace with fetch
|
|
|
|
|
function getJSON(url, callback, fallback) {
|
|
|
|
|
var xhr = new XMLHttpRequest();
|
|
|
|
|
xhr.open('GET', url, true);
|
|
|
|
|
xhr.responseType = 'json';
|
|
|
|
|
xhr.onload = function () {
|
|
|
|
|
var status = xhr.status;
|
|
|
|
|
if (status < 400) {
|
|
|
|
|
callback(null, xhr.response);
|
|
|
|
|
} else {
|
|
|
|
|
fallback();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
xhr.send();
|
|
|
|
|
};
|
|
|
|
|
|
2020-08-08 19:41:25 +00:00
|
|
|
//https://www.chartjs.org/docs/latest/developers/updates.html
|
|
|
|
|
var chart1 = new Chart(document.getElementById("line-chart"), {
|
|
|
|
|
type: 'line',
|
|
|
|
|
data: {
|
|
|
|
|
labels: [],
|
|
|
|
|
datasets: [{
|
|
|
|
|
data: [],
|
|
|
|
|
label: "Humidity",
|
|
|
|
|
borderColor: "blue",
|
|
|
|
|
fill: false
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
data: [],
|
|
|
|
|
label: "Temperature",
|
|
|
|
|
borderColor: "red",
|
|
|
|
|
fill: false
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
options: {
|
|
|
|
|
title: {
|
|
|
|
|
display: true,
|
|
|
|
|
text: 'Climate'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
2020-08-07 16:12:24 +00:00
|
|
|
|
2020-08-08 19:41:25 +00:00
|
|
|
function readLast(type, n){
|
|
|
|
|
let objectStore = db.transaction(type).objectStore(type);
|
2020-08-07 16:12:24 +00:00
|
|
|
let data = [];
|
|
|
|
|
|
2020-08-08 19:41:25 +00:00
|
|
|
|
2020-08-07 16:12:24 +00:00
|
|
|
objectStore.openCursor(null, "prev").onsuccess = function(event) {
|
|
|
|
|
var cursor = event.target.result;
|
|
|
|
|
if (cursor && data.length < n) {
|
2020-08-08 19:41:25 +00:00
|
|
|
try {
|
|
|
|
|
data.push(cursor.value)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//chart1.data.labels = chart1.data.labels.slice(-n)
|
|
|
|
|
|
|
|
|
|
if (cursor.value["humidity"] != null){
|
|
|
|
|
//chart1.data.datasets[0].data.shift()
|
|
|
|
|
chart1.data.datasets[0].data.push(cursor.value["humidity"])
|
|
|
|
|
//chart1.data.labels.shift()
|
|
|
|
|
chart1.data.labels.push(cursor.value["timestamp"])
|
|
|
|
|
}
|
|
|
|
|
if(cursor.value["temperature"] != null){
|
|
|
|
|
//chart1.data.datasets[1].data.shift()
|
|
|
|
|
chart1.data.datasets[1].data.push(cursor.value["temperature"])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
chart1.update()
|
|
|
|
|
cursor.continue();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.log(error)
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-07 16:12:24 +00:00
|
|
|
}
|
|
|
|
|
};
|
2020-08-08 19:41:25 +00:00
|
|
|
|
|
|
|
|
|
2020-08-07 16:12:24 +00:00
|
|
|
return data
|
|
|
|
|
}
|