# 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_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=boiler.temperature, 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/") 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()