First Commit

This commit is contained in:
darthsandmann 2021-03-11 20:48:26 +01:00
commit 8ed13863c3
6 changed files with 465 additions and 0 deletions

248
app.js Normal file
View File

@ -0,0 +1,248 @@
$(document).ready(function () {
var chart24hLabel = [];
var chart24hData = [];
var chart24hColor = [];
var chart24hColorRoom = [];
var chart24hDataRoom = [];
var chartLabel = [];
var chartData = [];
var chartColor = [];
var chartColorRoom = [];
var chartDataRoom = [];
var arr24h = [];
var arr = [];
var entrylist = [];
function unixToFormatted(unixdate, type) {
var date = new Date((unixdate- 3600) * 1000 );
var months = ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'];
var day = date.getDate();
var month = date.getMonth();
if(month=="12"){ month="1"; } else { month=parseInt(month)+parseInt("1");}
var year = date.getFullYear();
var hours = date.getHours();
var minutes = "0" + date.getMinutes();
var formattedTime = hours + ':' + minutes.substr(-2);
//var formattedDate = day + ' ' + month + ' ' + year
var formattedDate = day + "." + month + "." + year;
var formattedDate2 = day + "." + month + ".";
if (type == "time")
return formattedTime;
if (type == "date")
return formattedDate;
if (type == "date2")
return formattedDate2;
}
$.ajax({
type: 'GET',
crossDomain: true,
dataType: 'json',
url: 'https://brauereiapi.truenoobs.de/',
success: function(jsondata){
jQuery.each(jsondata, function() {
entrylist.push(this["time"]);
})
entrylist.sort();
var latestTimestamp = entrylist[entrylist.length-1];
jQuery.each(entrylist, function() {
if(this > latestTimestamp-86400) {
chart24hLabel.push(unixToFormatted(this, "time"));
chart24hColor.push("rgba(223, 63, 63, 1)");
chart24hColorRoom.push("rgba(102, 178, 255, 1)");
chart24hData.push(jsondata[this]["temp"]);
chart24hDataRoom.push(jsondata[this]["temproom"]);
}
chartLabel.push(unixToFormatted(this, "date2"));
chartColor.push("rgba(223, 63, 63, 1)");
chartColorRoom.push("rgba(102, 178, 255, 1)");
chartData.push(jsondata[this]["temp"]);
chartDataRoom.push(jsondata[this]["temproom"]);
});
/*jQuery.each(entrylist, function() {
var date = new Date(this * 1000);
var day = date.getDate();
var month = date.getMonth();
var year = date.getFullYear();
var hours = date.getHours();
var minutes = date.getMinutes();
if(this > latestTimestamp-86400) {
if(!(year in arr24h)){arr24h[year]=[]};
if(!(month in arr24h[year])){arr24h[year][month]=[]};
if(!(day in arr24h[year][month])){arr24h[year][month][day]=[]};
if(!(hours in arr24h[year][month][day])){arr24h[year][month][day][hours]=[]};
arr24h[year][month][day][hours][minutes]=[];
arr24h[year][month][day][hours][minutes].push(jsondata[this]["time"]);
arr24h[year][month][day][hours][minutes].push(unixToFormatted(jsondata[this]["time"], "date"));
arr24h[year][month][day][hours][minutes].push(unixToFormatted(jsondata[this]["time"], "time"));
arr24h[year][month][day][hours][minutes].push(jsondata[this]["temproom"]);
arr24h[year][month][day][hours][minutes].push(jsondata[this]["temp"]);
arr24h[year][month][day][hours][minutes].push(jsondata[this]["bubbles"]);
}
});
for(var i=0;i<arr24h.length;i++){
console.log(arr24h[i]);
}*/
entrylist.reverse();
jQuery.each(entrylist, function() {
$("#table").append(
`<tr>
<td style="display:none">${jsondata[this]["time"]}</td>
<td>${unixToFormatted(jsondata[this]["time"], "date")}</td>
<td>${unixToFormatted(jsondata[this]["time"], "time")}</td>
<td>${jsondata[this]["temproom"]}</td>
<td>${jsondata[this]["temp"]}</td>
<td>${jsondata[this]["bubbles"]}</td>
<!-- <td>0</td> -->
</tr>`
);
});
jQuery.each(entrylist, function() {
if(this > latestTimestamp-86400) {
$("#table24h").append(
`<tr>
<td style="display:none">${jsondata[this]["time"]}</td>
<td>${unixToFormatted(jsondata[this]["time"], "date")}</td>
<td>${unixToFormatted(jsondata[this]["time"], "time")}</td>
<td>${jsondata[this]["temproom"]}</td>
<td>${jsondata[this]["temp"]}</td>
<td>${jsondata[this]["bubbles"]}</td>
<!-- <td>0</td> -->
</tr>`
);
}
});
var ctx = document.getElementById('myChart24h');
var myChart24h = new Chart(ctx, {
type: 'line',
data: {
labels: chart24hLabel,
datasets: [{
label: 'Biertemperatur',
data: chart24hData,
backgroundColor: [
'rgba(223, 63, 63, 0.1)'
],
borderColor: chart24hColor,
borderWidth: 3,
pointRadius: 1
},
{
label: 'Raumtemperatur',
data: chart24hDataRoom,
backgroundColor: [
'rgba(102, 178, 255, 0.1)'
],
borderColor: chart24hColorRoom,
borderWidth: 3,
pointRadius: 1
}]
},
options: {
scales: {
yAxes: [{
stacked: false
}]
}
}
});
var ctx = document.getElementById('myChart');
var myChart = new Chart(ctx, {
type: 'line',
yAxisID: "25",
data: {
labels: chartLabel,
datasets: [{
label: 'Biertemperatur',
data: chartData,
backgroundColor: [
'rgba(223, 63, 63, 0.1)'
],
borderColor: chartColor,
borderWidth: 3,
pointRadius: 1,
},
{
label: 'Raumtemperatur',
data: chartDataRoom,
backgroundColor: [
'rgba(102, 178, 255, 0.1)'
],
borderColor: chartColorRoom,
borderWidth: 3,
pointRadius: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
suggestedMin: 0,
suggestedMax: 30
}
}]
}
}
});
$("#import").click(function(){
var xhr = new XMLHttpRequest();
var url = "https://brauereiapi.truenoobs.de/import";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var json = JSON.parse(xhr.responseText);
}
};
var data = JSON.stringify(jsondata);
xhr.send(data);
});
}
});
$.prototype.kb_table_csv = function() {
var kb_tidy_content = function(text){
text = text.replace(/"/g, '""');
return '"'+text+'"';
};
$(this).each(function(){
var table = $(this);
var caption = $(this).find('caption').text();
var title = [];
var rows = [];
$(this).find('tr').each(function(){
var data = [];
$(this).find('td').each(function(){
var text = kb_tidy_content($(this).text());
if(!text.includes(" ") && !text.includes(":")) {
data.push(text);
}
});
data = data.join(",");
if(data!=""){
rows.push(data);
}
});
title = title.join(",");
rows = rows.join("\n");
var csv = title + rows;
var uri = 'data:text/csv;charset=utf-8,' + encodeURIComponent(csv);
var download_link = document.createElement('a');
download_link.href = uri;
var ts = new Date().getTime();
if(caption==""){
download_link.download = ts+".csv";
} else {
download_link.download = caption+"-"+ts+".csv";
}
document.body.appendChild(download_link);
download_link.click();
document.body.removeChild(download_link);
});
};
$("#export").click(function(){
$("table").kb_table_csv();
});
});

26
database.csv Normal file
View File

@ -0,0 +1,26 @@
1615301362,38.00,88
1615301382,38.00,88
1615301403,38.00,88
1615301423,38.00,88
1615301443,38.00,88
1615301463,38.00,88
1615301483,38.00,88
1615301503,38.00,88
1615301524,38.00,88
1615301544,38.00,88
1615301564,38.00,88
1615301584,38.00,88
1615301604,38.00,88
1615301624,38.00,88
1615301645,38.00,88
1615301665,38.00,88
1615301685,38.00,88
1615301705,38.00,88
1615301725,38.00,88
1615301745,38.00,88
1615301766,38.00,88
1615301786,38.00,88
1615301806,38.00,88
1615301826,38.00,88
1615301846,38.00,88
1615301867,38.00,88
1 1615301362 38.00 88
2 1615301382 38.00 88
3 1615301403 38.00 88
4 1615301423 38.00 88
5 1615301443 38.00 88
6 1615301463 38.00 88
7 1615301483 38.00 88
8 1615301503 38.00 88
9 1615301524 38.00 88
10 1615301544 38.00 88
11 1615301564 38.00 88
12 1615301584 38.00 88
13 1615301604 38.00 88
14 1615301624 38.00 88
15 1615301645 38.00 88
16 1615301665 38.00 88
17 1615301685 38.00 88
18 1615301705 38.00 88
19 1615301725 38.00 88
20 1615301745 38.00 88
21 1615301766 38.00 88
22 1615301786 38.00 88
23 1615301806 38.00 88
24 1615301826 38.00 88
25 1615301846 38.00 88
26 1615301867 38.00 88

17
database.json Normal file
View File

@ -0,0 +1,17 @@
2021/03/09 14:37:20 38.00 88
2021/03/09 14:37:40 39.00 78
2021/03/09 14:38:01 40.00 90
2021/03/09 14:38:21 35.00 88
2021/03/09 14:38:41 36.00 86
2021/03/09 14:39:04 37.00 84
2021/03/09 14:39:24 38.00 85
2021/03/09 14:39:44 31.50 86
2021/03/09 14:40:04 32.00 87
2021/03/09 14:40:25 33.50 88
2021/03/09 14:40:45 34.70 88
2021/03/09 14:41:05 35.00 90
2021/03/09 14:41:25 37.00 91
2021/03/09 14:41:45 41.00 92
2021/03/09 14:42:06 43.00 90
2021/03/09 14:42:26 45.00 70
2021/03/09 14:42:46 47.00 75

84
index.html Normal file
View File

@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="de">
<!--Head-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Brauvorgang</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.1.1.min.js" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://canvasjs.com/assets/script/jquery.canvasjs.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.bundle.min.js "></script>
<script type="text/javascript" src="app.js"></script>
</head>
<body>
<div class="container-fluid h-100">
<div class="row">
<div class="col-12 col-md-6 d-print-none">
<div class="card-header">
<h3>Die letzten 24 Stunden</h3>
</div>
<div class="card card-body">
<canvas id="myChart24h"></canvas>
</div>
</div>
<div class="col-12 col-md-6">
<div class="card-header d-print-none">
<h3>Seit Braubeginn</h3>
</div>
<div class="card card-body">
<canvas id="myChart"></canvas>
</div>
</div>
</div>
<div class="row">
<div class="col-12 col-md-6 d-print-none">
<div class="card-header">
<h3>Die letzten 24 Stunden</h3>
</div>
<div class="card card-body">
<table id="table24h" class="table table-striped table-sm" cellspacing="0" width="100%">
<thead>
<tr>
<th data-field="timestamp" style="display:none">Timestamp</th>
<th data-field="date">Datum</th>
<th data-field="time">Uhrzeit</th>
<th data-field="temp">°C Raum</th>
<th data-field="temp">°C Bier</th>
<th data-field="bubbles">Blasen</th>
</tr>
</thead>
</table>
</div>
</div>
<div class="col-12 col-md-6">
<div class="card-header d-print-none">
<h3>Seit Braubeginn</h3>
</div>
<div class="card card-body">
<table id="table" class="table table-striped table-sm" cellspacing="0" width="100%">
<thead>
<tr>
<th data-field="timestamp" style="display:none">Timestamp</th>
<th data-field="date">Datum</th>
<th data-field="time">Uhrzeit</th>
<th data-field="temp">°C Raum</th>
<th data-field="temp">°C Bier</th>
<th data-field="bubbles">Blasen</th>
</tr>
</thead>
</table>
</div>
</div>
<div class="col-12 col-md-12 d-print-none">
<div class="card card-body">
<button id="export" class="btn btn-secondary" data-export="export">Download CSV</button>
</div>
</div>
</div>
</div>
</body>

64
run.py Normal file
View File

@ -0,0 +1,64 @@
#!/usr/bin/python3
from flask import Flask, json, request
import csv
from collections import OrderedDict
api = Flask(__name__)
database = {}
ordered_dict = {}
def open_csv():
result = ""
with open('database.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
for row in csv_reader:
id = row[0]
database[id] = { "time":row[0], "temproom":row[1], "temp":row[2],"bubbles":row[3]}
#print("Time: " + row[0] + " | Raumtemperatur: " + row[1]+ " | Biertemperatur: " + row[2]+ " | Blasen: " + row[3])
sort_dict()
def sort_dict():
newlist = sorted(database, reverse=True)
#print(newlist)
for entry in newlist:
ordered_dict[entry] = {}
ordered_dict[entry] = database[entry]
#print(ordered_dict)
def write_dict():
f = open('database.csv', 'w')
with f:
fnames = ['time', 'temproom', 'temp', 'bubbles']
writer = csv.DictWriter(f, fieldnames=fnames)
#writer.writeheader()
for entry in ordered_dict:
writer.writerow({"time":ordered_dict[entry]["time"], "temproom":ordered_dict[entry]["temproom"], "temp":ordered_dict[entry]["temp"], "bubbles":ordered_dict[entry]["bubbles"]})
@api.route('/', methods=['GET'])
def get_values():
#print (ordered_dict)
open_csv()
return (ordered_dict)
@api.route('/b6dg4V', methods=['POST'])
def post_values():
s = str(request.data)
s = s.replace("b'", "")
s = s.replace("'", "")
split = s.split(" ")
print("Zeit: " + split[0] )
print("Raumtemp: " + split[1] )
print("Temp: " + split[2] )
print("Blasen: " + split[3] )
database[split[0]] = { "time":split[0], "temproom":split[1], "temp":split[2], "bubbles":split[3] }
sort_dict()
write_dict()
return json.dumps({"success": True}), 201
if __name__ == '__main__':
open_csv()
api.run(host='0.0.0.0', port=5632)

26
webfile.txt Normal file
View File

@ -0,0 +1,26 @@
1615301362,38.00,88
1615301382,38.00,88
1615301403,38.00,88
1615301423,38.00,88
1615301443,38.00,88
1615301463,38.00,88
1615301483,38.00,88
1615301503,38.00,88
1615301524,38.00,88
1615301544,38.00,88
1615301564,38.00,88
1615301584,38.00,88
1615301604,38.00,88
1615301624,38.00,88
1615301645,38.00,88
1615301665,38.00,88
1615301685,38.00,88
1615301705,38.00,88
1615301725,38.00,88
1615301745,38.00,88
1615301766,38.00,88
1615301786,38.00,88
1615301806,38.00,88
1615301826,38.00,88
1615301846,38.00,88
1615301867,38.00,88