thermo-pwa/app/static/js/ui.js

165 lines
3.9 KiB
JavaScript
Raw Normal View History

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
}