das Script funktioniert gut allerding ähneln sich viele Funktionen sehr und es sind zwischen denen Funktionen nur unterschieden wie z.B.: Welche row soll ausgelesen werden oder was für ein Plotlabel angezeigt werden soll. Hat irgendwer eine Idee/Anregung wie ich das ganze Script sauberer Programmieren kann?
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 io #io
import os
from configparser import ConfigParser
import psycopg2
import config
app = Flask(__name__)
@app.route('/senddata', methods=['GET', 'POST'])
def senddata():
if request.method == 'POST':
data = request.data
data = data.decode("utf-8", "replace")
luftfeuchtigkeitdrin,temperaturdrin,luftfeuchtigkeitausen,temperaturausen,erdfeuchtigkeit,lux = data.split(',')
insert_data(luftfeuchtigkeitdrin,temperaturdrin,luftfeuchtigkeitausen,temperaturausen,erdfeuchtigkeit,lux)
return data
return render_template('senddata.html')
@app.route('/image/luftfeuchtigkeit.png/<start>/<end>', methods=['GET', 'POST'])
def dataluft(start, end):
time = []
wertone = []
werttwo = []
rowone = 1
rowtwo = 3
my_dpi=96
conn = psycopg2.connect( port = "5432")
print ("Opened database successfully")
cur = conn.cursor()
cur.execute("SELECT TIMESTAMP, LUFTFEUCHTIGKEITDRIN, TEMPERATURDRIN, LUFTFEUCHTIGKEITAUSEN, TEMPERATURAUSEN, ERDFEUCHTIGKEIT, LUX from MESSDATEN WHERE TIMESTAMP > '{0}' AND TIMESTAMP < '{1}'".format(start, end))
rows = cur.fetchall()
for row in rows:
time.append(row[0])
wertone.append(row[rowone])
werttwo.append(row[rowtwo])
fig, ax = plt.subplots(figsize=(600/my_dpi, 400/my_dpi), dpi=my_dpi)
ax.plot(time, wertone, label='Luftfeuchtigkeit innen')
ax.plot(time, werttwo, label='Luftfeuchtigkeit ausen')
ax.grid(True)
fig.legend()
#ax.set_title('Luftfeuchtigkeit')
ax.set_ylabel('Luftfeuchtigkeit in %')
fig.autofmt_xdate()
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('/image/temperatur.png/<start>/<end>', methods=['GET', 'POST'])
def datatemp(start, end):
time = []
wertone = []
werttwo = []
rowone = 2
rowtwo = 4
my_dpi=96
conn = psycopg2.connect(port = "5432")
print ("Opened database successfully")
cur = conn.cursor()
cur.execute("SELECT TIMESTAMP, LUFTFEUCHTIGKEITDRIN, TEMPERATURDRIN, LUFTFEUCHTIGKEITAUSEN, TEMPERATURAUSEN, ERDFEUCHTIGKEIT, LUX from MESSDATEN WHERE TIMESTAMP > '{0}' AND TIMESTAMP < '{1}'".format(start, end))
rows = cur.fetchall()
for row in rows:
time.append(row[0])
wertone.append(row[rowone])
werttwo.append(row[rowtwo])
fig, ax = plt.subplots(figsize=(600/my_dpi, 400/my_dpi), dpi=my_dpi)
ax.plot(time, wertone, label='Temperatur innen')
ax.plot(time, werttwo, label='Temperatur ausen')
ax.grid(True)
fig.legend()
#ax.set_title('Temperatur')
ax.set_ylabel('Temperatur in °C')
fig.autofmt_xdate()
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('/image/erdfeuchtigkeit.png/<start>/<end>', methods=['GET', 'POST'])
def dataerde(start, end):
time = []
wertone = []
rowone = 5
my_dpi=96
conn = psycopg2.connect( port = "5432")
print ("Opened database successfully")
cur = conn.cursor()
cur.execute("SELECT TIMESTAMP, LUFTFEUCHTIGKEITDRIN, TEMPERATURDRIN, LUFTFEUCHTIGKEITAUSEN, TEMPERATURAUSEN, ERDFEUCHTIGKEIT, LUX from MESSDATEN WHERE TIMESTAMP > '{0}' AND TIMESTAMP < '{1}'".format(start, end))
rows = cur.fetchall()
for row in rows:
time.append(row[0])
wertone.append(row[rowone])
fig, ax = plt.subplots(figsize=(600/my_dpi, 400/my_dpi), dpi=my_dpi)
ax.plot(time, wertone, label='Erdfeuchtigkeit')
ax.grid(True)
fig.legend()
#ax.set_title('Erdfeuchtigkeit')
ax.set_ylabel('Erdfeuchtigkeit in %')
fig.autofmt_xdate()
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('/image/lux.png/<start>/<end>', methods=['GET', 'POST'])
def datalux(start, end):
time = []
wertone = []
rowone = 6
my_dpi=96
conn = psycopg2.connect( port = "5432")
print ("Opened database successfully")
cur = conn.cursor()
cur.execute("SELECT TIMESTAMP, LUFTFEUCHTIGKEITDRIN, TEMPERATURDRIN, LUFTFEUCHTIGKEITAUSEN, TEMPERATURAUSEN, ERDFEUCHTIGKEIT, LUX from MESSDATEN WHERE TIMESTAMP > '{0}' AND TIMESTAMP < '{1}'".format(start, end))
rows = cur.fetchall()
for row in rows:
time.append(row[0])
wertone.append(row[rowone])
fig, ax = plt.subplots(figsize=(600/my_dpi, 400/my_dpi), dpi=my_dpi)
ax.plot(time, wertone, label='Lichtitensität(lux)')
ax.grid(True)
fig.legend()
#ax.set_title('Lichtitensität')
ax.set_ylabel('Lichtitensität in Lux')
fig.autofmt_xdate()
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('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
start_date = "2018-01-01"
start_time = "01:01"
start = start_date + "_" + start_time
end_date = "2019-01-01"
end_time = "01:01"
end = end_date + "_" + end_time
data_one = ""
srcluft = '/image/luftfeuchtigkeit.png/' + start + '/' + end
srctemp = '/image/temperatur.png/' + start + '/' + end
srcerde = '/image/erdfeuchtigkeit.png/' + start + '/' + end
srclux = '/image/lux.png/' + start + '/' + end
if request.method == 'POST':
start_date = request.form['start_date']
start_time = request.form['start_time']
start = start_date + "_" + start_time
end_date = request.form['end_date']
end_time = request.form['end_time']
end = end_date + "_" + end_time
data_one = 2
srcluft = '/image/luftfeuchtigkeit.png/' + start + '/' + end
srctemp = '/image/temperatur.png/' + start + '/' + end
srcerde = '/image/erdfeuchtigkeit.png/' + start + '/' + end
srclux = '/image/lux.png/' + start + '/' + end
dataluft(start, end)
datatemp(start, end)
dataerde(start, end)
datalux(start, end)
return render_template('index.html', data_one=data_one, srcluft=srcluft, srctemp=srctemp, srcerde=srcerde, srclux=srclux, start=start, end=end)
def insert_data(luftfeuchtigkeitdrin,temperaturdrin,luftfeuchtigkeitausen,temperaturausen,erdfeuchtigkeit,lux):
my_date = datetime.datetime.now(pytz.timezone('Europe/Berlin'))
fmt = '%Y-%m-%d %H:%M'
conn = psycopg2.connect( port = "5432")
print ("Opened database successfully")
cur = conn.cursor()
cur.execute("INSERT INTO MESSDATEN (TIMESTAMP,LUFTFEUCHTIGKEITDRIN,TEMPERATURDRIN,LUFTFEUCHTIGKEITAUSEN,TEMPERATURAUSEN,ERDFEUCHTIGKEIT,LUX) \
VALUES (%s, %s, %s, %s, %s, %s, %s)", (my_date.strftime(fmt) ,luftfeuchtigkeitdrin, temperaturdrin, luftfeuchtigkeitausen, temperaturausen, erdfeuchtigkeit, lux))
conn.commit()
print ("Records created successfully")
conn.close()
if __name__ == '__main__': app.run(debug=True)