Add temperature course image
This commit is contained in:
parent
055f632c96
commit
85d8ba58b4
@ -1,6 +1,9 @@
|
|||||||
"""Flask application for greenhouse"""
|
"""Flask application for greenhouse"""
|
||||||
|
from datetime import datetime, timedelta
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
import xmlrpc.client
|
import xmlrpc.client
|
||||||
|
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
@ -9,6 +12,11 @@ from flask import make_response
|
|||||||
from flask import request
|
from flask import request
|
||||||
from flask import jsonify
|
from flask import jsonify
|
||||||
|
|
||||||
|
import matplotlib
|
||||||
|
matplotlib.use('Agg')
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.dates as mdates
|
||||||
|
|
||||||
LOG_LEVEL = logging.INFO
|
LOG_LEVEL = logging.INFO
|
||||||
LOG_FILE = "/var/log/greenhouseui.log"
|
LOG_FILE = "/var/log/greenhouseui.log"
|
||||||
LOG_FORMAT = "%(asctime)s %(levelname)s %(message)s"
|
LOG_FORMAT = "%(asctime)s %(levelname)s %(message)s"
|
||||||
@ -17,16 +25,78 @@ HOST = "localhost"
|
|||||||
PORT = 64001
|
PORT = 64001
|
||||||
URL = f"http://{HOST}:{PORT}"
|
URL = f"http://{HOST}:{PORT}"
|
||||||
|
|
||||||
# logging.basicConfig(format=LOG_FORMAT, level=LOG_LEVEL, filename=LOG_FILE)
|
logging.basicConfig(format=LOG_FORMAT, level=LOG_LEVEL, filename=LOG_FILE)
|
||||||
logging.basicConfig(format=LOG_FORMAT, level=LOG_LEVEL)
|
# logging.basicConfig(format=LOG_FORMAT, level=LOG_LEVEL)
|
||||||
log = logging.getLogger()
|
log = logging.getLogger()
|
||||||
|
|
||||||
|
def get_image_install_path():
|
||||||
|
"""Get the path where to install dynamically created images to"""
|
||||||
|
for path in sys.path:
|
||||||
|
try:
|
||||||
|
content = os.listdir(path)
|
||||||
|
if "greenhouseui" in content:
|
||||||
|
return os.path.join(path, "greenhouseui/static")
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def draw_temperature_image():
|
||||||
|
temperature_dates = []
|
||||||
|
temperatures = []
|
||||||
|
with open("/var/log/gardencontrol.log", "r", encoding="UTF-8") as logfile:
|
||||||
|
for line in logfile:
|
||||||
|
line = line.strip()
|
||||||
|
if "Temperature" in line:
|
||||||
|
chunks = line.split(" ")
|
||||||
|
logtime = chunks[0] + " " + chunks[1]
|
||||||
|
|
||||||
|
logtime = datetime.strptime(logtime, "%Y-%m-%d %H:%M:%S,%f")
|
||||||
|
now = datetime.now()
|
||||||
|
start_time = now - timedelta(hours=24)
|
||||||
|
if logtime >= start_time:
|
||||||
|
temperature_dates.append(logtime)
|
||||||
|
|
||||||
|
temperature = float(chunks[4])
|
||||||
|
temperatures.append(temperature)
|
||||||
|
|
||||||
|
background_color = "#282929"
|
||||||
|
color = "#b6b6b6"
|
||||||
|
|
||||||
|
fig, ax = plt.subplots(1)
|
||||||
|
fig.set_facecolor(background_color)
|
||||||
|
|
||||||
|
ax.set_facecolor(background_color)
|
||||||
|
ax.tick_params(axis="x", colors = color)
|
||||||
|
ax.tick_params(axis="y", colors = color)
|
||||||
|
ax.spines["top"].set_visible(False)
|
||||||
|
ax.spines["left"].set_visible(False)
|
||||||
|
ax.spines["bottom"].set_visible(False)
|
||||||
|
ax.spines["right"].set_visible(False)
|
||||||
|
|
||||||
|
# ax.set_ylabel("°C", rotation=0)
|
||||||
|
ax.yaxis.label.set_color(color)
|
||||||
|
fig.autofmt_xdate()
|
||||||
|
plt.plot(temperature_dates, temperatures, color=color)
|
||||||
|
|
||||||
|
xfmt = mdates.DateFormatter('%H:%M')
|
||||||
|
ax.xaxis.set_major_formatter(xfmt)
|
||||||
|
|
||||||
|
path = get_image_install_path()
|
||||||
|
if path:
|
||||||
|
img_file = os.path.join(path, "greenhouse_temperature.png")
|
||||||
|
if os.path.exists(img_file):
|
||||||
|
os.remove(img_file)
|
||||||
|
plt.savefig(img_file)
|
||||||
|
plt.close("all")
|
||||||
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
|
||||||
@app.route('/', methods=['GET'])
|
@app.route('/', methods=['GET'])
|
||||||
def index():
|
def index():
|
||||||
"""Handle GET to index.html"""
|
"""Handle GET to index.html"""
|
||||||
|
draw_temperature_image()
|
||||||
return render_template('index.html')
|
return render_template('index.html')
|
||||||
|
|
||||||
@app.route('/sample/<idx>', methods=['GET'])
|
@app.route('/sample/<idx>', methods=['GET'])
|
||||||
|
@ -14,8 +14,12 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td><h3>Temperatur </h3></td>
|
<td><h3>Temperatur </h3></td>
|
||||||
<td><h3 id="temperature_value"></h3></td>
|
<td><h3 id="temperature_value"></h3></td>
|
||||||
|
<td><h3> °C</h3></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
<div>
|
||||||
|
<img src="{{url_for('static', filename='greenhouse_temperature.png')}}"/>
|
||||||
|
</div>
|
||||||
<table class="center">
|
<table class="center">
|
||||||
<tr>
|
<tr>
|
||||||
<td class="table_left">Heizung</td>
|
<td class="table_left">Heizung</td>
|
||||||
|
4
setup.py
4
setup.py
@ -6,11 +6,11 @@ from setuptools import setup
|
|||||||
from setuptools.command.install import install
|
from setuptools.command.install import install
|
||||||
|
|
||||||
NAME = 'Greenhouseui'
|
NAME = 'Greenhouseui'
|
||||||
VERSION = '1'
|
VERSION = '2'
|
||||||
AUTHOR = 'Thomas Klaehn'
|
AUTHOR = 'Thomas Klaehn'
|
||||||
EMAIL = 'tkl@blackfinn.de'
|
EMAIL = 'tkl@blackfinn.de'
|
||||||
PACKAGES = ['greenhouseui']
|
PACKAGES = ['greenhouseui']
|
||||||
REQUIRES = ['Flask', 'gunicorn']
|
REQUIRES = ['Flask', 'gunicorn', 'matplotlib']
|
||||||
PACKAGE_DATA = {'greenhouseui': ['templates/*', 'static/css/*', 'static/scripts/*']}
|
PACKAGE_DATA = {'greenhouseui': ['templates/*', 'static/css/*', 'static/scripts/*']}
|
||||||
|
|
||||||
SERVICEDIR = "/lib/systemd/system"
|
SERVICEDIR = "/lib/systemd/system"
|
||||||
|
Loading…
Reference in New Issue
Block a user