ToastFreeware
/
chrisu
/
seepark.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2f5ddda
)
Produce PDF with real data.
author
Philipp Spitzer
<philipp@spitzer.priv.at>
Mon, 28 Jan 2019 21:41:54 +0000
(22:41 +0100)
committer
Philipp Spitzer
<philipp@spitzer.priv.at>
Mon, 28 Jan 2019 21:41:54 +0000
(22:41 +0100)
web/seepark_web.py
patch
|
blob
|
history
diff --git
a/web/seepark_web.py
b/web/seepark_web.py
index acec9c55c4db9aa3a4dd659ef3d8042e19d20585..131489bd1dbc5a4dfd4b9372de8ccc41307bf783 100644
(file)
--- a/
web/seepark_web.py
+++ b/
web/seepark_web.py
@@
-4,11
+4,32
@@
import configparser
import os
import sys
from collections import defaultdict
import os
import sys
from collections import defaultdict
+import io
+import numpy as np
+import matplotlib
+matplotlib.use('pdf')
+import matplotlib.pyplot as plt
+from matplotlib.backends.backend_pdf import PdfPages
+
from flask import Flask, render_template, jsonify, request, abort, Response, make_response
import flask.json
from flask_sqlalchemy import SQLAlchemy, inspect
from sqlalchemy import func
from flask import Flask, render_template, jsonify, request, abort, Response, make_response
import flask.json
from flask_sqlalchemy import SQLAlchemy, inspect
from sqlalchemy import func
+MONTH_DE = [
+ 'Jänner',
+ 'Februar',
+ 'März',
+ 'April',
+ 'Mai',
+ 'Juni',
+ 'Juli',
+ 'August',
+ 'September',
+ 'Oktober',
+ 'November',
+ 'Dezember']
+
# https://stackoverflow.com/a/37350445
def sqlalchemy_model_to_dict(model):
# https://stackoverflow.com/a/37350445
def sqlalchemy_model_to_dict(model):
@@
-214,6
+235,10
@@
def currentwatertemperature(sensorid):
return result.value, result.timestamp
return result.value, result.timestamp
+def add_month(date):
+ return (date + datetime.timedelta(days=42)).replace(day=1)
+
+
@app.route('/api/<version>/sensors/')
def sensors(version):
"""List all sensors found in the database"""
@app.route('/api/<version>/sensors/')
def sensors(version):
"""List all sensors found in the database"""
@@
-277,19
+302,42
@@
def currentwater(version):
@app.route('/report/<int:year>-<int:month>')
def report(year, month):
@app.route('/report/<int:year>-<int:month>')
def report(year, month):
- import io
- import numpy as np
- import matplotlib.pyplot as plt
- from matplotlib.backends.backend_pdf import PdfPages
+
+ begin = datetime.datetime(year, month, 1)
+ end = add_month(begin)
+ data = list(select_sensordata_grouped(mainsensor, 'Wassertemperatur', begin, end))
+ x = [d.timestamp for d in data]
+ y = [d.value for d in data]
+
+ days_datetime = []
+ d = begin
+ while d < end:
+ days_datetime.append(d)
+ d = d + datetime.timedelta(1)
+ days_str = [d.strftime('%d') for d in days_datetime]
binary_pdf = io.BytesIO()
with PdfPages(binary_pdf) as pdf:
a4 = (21./2.54, 29.7/2.54)
plt.figure(figsize=a4)
binary_pdf = io.BytesIO()
with PdfPages(binary_pdf) as pdf:
a4 = (21./2.54, 29.7/2.54)
plt.figure(figsize=a4)
- x = np.arange(100)
- y = np.sin(x/4)
plt.plot(x, y)
plt.plot(x, y)
+ plt.xticks(days_datetime, days_str, rotation='vertical')
+ plt.xlabel('Tag')
+ plt.ylabel('Temparatur in °C')
+ plt.axis(xmin=begin, xmax=end)
+ plt.grid()
+ title = 'Seepark Wassertemperatur {} {}'.format(MONTH_DE[begin.month-1], begin.year)
+ plt.title(title)
pdf.savefig()
pdf.savefig()
+
+ pdf_info = pdf.infodict()
+ pdf_info['Title'] = title
+ pdf_info['Author'] = 'Chrisu Jähnl'
+ pdf_info['Subject'] = 'Wassertemperatur'
+ pdf_info['Keywords'] = 'Seepark Wassertemperatur'
+ pdf_info['CreationDate'] = datetime.datetime.now()
+ pdf_info['ModDate'] = datetime.datetime.today()
+
response = make_response(binary_pdf.getvalue())
response.headers['Content-Type'] = 'application/pdf'
response.headers['Content-Disposition'] = 'attachment; filename=seepark_{:04d}-{:02d}.pdf'.format(year, month)
response = make_response(binary_pdf.getvalue())
response.headers['Content-Type'] = 'application/pdf'
response.headers['Content-Disposition'] = 'attachment; filename=seepark_{:04d}-{:02d}.pdf'.format(year, month)