blob: 58d82910f34caf87d476828c2c3e0852835036f9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# Import other functions and classes
import heating
import errors
import sql
import weather
import time
from flask import Flask, render_template, redirect, url_for
from threading import Thread
app = Flask(__name__)
# Paramaterised location of database file
# Use of constant
DBFILE = "data.db"
db = sql.db(DBFILE)
weather = weather.weather_met_no()
# Check if running on correct device : defensive coding against running
# on the wrong device
try:
with open("/sys/firmware/devicetree/base/model", "r") as file:
device = file.read()
except:
errors.device_error()
if device.startswith("Raspberry Pi 4"):
boiler = heating.rpi_heating(db)
else:
errors.device_error()
def main_page():
# paramaterised location of template in 'templates' folder
return render_template(
"main.html",
actual_temp=round(boiler.temperature,2),
target_temp=boiler.target,
forecast_temp=weather.temperature()
)
@app.route("/")
@app.route("/index")
@app.route("/index.html")
def index():
return main_page()
@app.route("/up")
def form():
boiler.up()
return redirect(url_for("index"))
@app.route("/down")
def activity():
boiler.down()
return redirect(url_for("index"))
@app.route("/export")
def export_choice():
return render_template("export_choice.html")
@app.route("/export/<opt>")
def export(opt):
if opt == "txt":
pass
elif opt == "pdf":
pass
else:
return render_template(
"error.html", error="Invalid export type"
)
def updater():
while True:
boiler.update()
time.sleep(5)
def webapp():
app.run(host="0.0.0.0")
if __name__ == "__main__":
t1 = Thread(target=webapp)
t2 = Thread(target=updater)
t1.start()
t2.start()
|