Code: Alles auswählen
from flask import Flask, render_template, url_for, request, make_response
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt #Csv Daten plotten
import datetime #Uhrzeit
import pytz #Zeitzone
import csv #Csv Datei schreiben
import io
import pandas as pd
PLOTS = {
'luftfeuchtigkeit': {
'title': 'Luftfeuchtigkeit',
'ylabel': 'Luftfeuchtigkeit in %',
'plots': [('luftfeuchtedrin', 1), ('luftfeuchteausen', 3)]
},
'temperatur': {
'title': 'Temperatur',
'ylabel': 'Temperatur in °C',
'plots': [("Temperatur drin", 2), ("Temperatur ausen", 4)]
},
'erdfeuchtigkeit': {
'title': 'Erdfeuchtigkeit',
'ylabel': 'Erdfeuchtigkeit in %',
'plots': [('Erdfeuchtigkeit', 5)]
},
'lux': {
'title': 'Lichtitensität',
'ylabel': 'Lichtitensität in Lux',
'plots': [('Lichtitensität(lux)', 6)]
},
}
app = Flask(__name__)
@app.route('/')
@app.route('/index')
def index():
return render_template('index.html')
@app.route('/test')
def test():
return render_template('test.html')
@app.route('/getdata', methods=['GET', 'POST'])
def getdata():
if request.method == 'POST':
file = open('test.txt', "a")
data = request.data
my_date = datetime.datetime.now(pytz.timezone('Europe/Berlin'))
fmt = "%Y-%m-%d %H:%M:%S"
for i in data:
file.write(my_date.strftime(fmt) + "; ")
file.write(str(data) + '\n')
return data
return render_template('getdata.html')
@app.route('/image/<filename>', methods=['GET'])
def daten(filename):
data_one = filename.split('.')[0]
with open('data/data.csv') as lines:
reader = csv.reader(lines, delimiter=',')
tabelle = [
row[:1] + [float(c) for c in row[1:]]
for row in reader
]
time = [zeile[0] for zeile in tabelle]
plot = PLOTS[data_one]
fig, ax = plt.subplots()
for label, idx in plot['plots']:
ax.plot(time, [zeile[idx] for zeile in tabelle], label=label)
ax.grid(True)
fig.legend()
ax.set_title(plot['title'])
ax.set_ylabel(plot['ylabel'])
ax.set_xlabel('Uhrzeit')
buffer = io.BytesIO()
plt.savefig(buffer, format = 'png')
plot_data = buffer.getvalue()
response = make_response(plot_data)
response.headers['Content-type'] = 'image/png'
return response
@app.route('/data', methods=['GET', 'POST'])
def data():
data_one = ""
src = '/image/' + data_one + '.png'
if request.method == 'POST':
data_one = request.form['data_one']
src = '/image/' + data_one + '.png'
else:
data_one = None
return render_template('benutzer.html', data_one=data_one, src=src)
if __name__ == '__main__': app.run(debug=True)
Code: Alles auswählen
{% extends "base.html" %}
{% block content %}
<h1>Upload new Data</h1>
<br>
<form method = "post">
<div class="row">
<div class="col-25">
<label for="data_one">Messdaten:</label>
</div>
<div class="col-75">
<select id="data_one" name="data_one">
<option value="luftfeuchtigkeit">Luftfeuchtigkeit</option>
<option value="temperatur">Temperatur</option>
<option value="erdfeuchtigkeit">Erdfeuchtigkeit</option>
<option value="lux">Lux</option>
</select>
</div>
</div>
<input type = "submit" value = "submit" />
</form>
{%if data_one %}<img src={{src}}>{%endif%}
{% endblock %}