from flask import Flask, render_template, request, redirect, url_for from flask_navigation import Navigation from Webserver.Translater import Translater, Language class Webserver: def __init__(self, zoneManager, port=80): self.port = port self.zoneManager = zoneManager self.translater_EN = Translater(Language.ENGLISH) self.translater_DE = Translater(Language.GERMAN) self.translater = self.translater_EN def startWebserver(self): app = Flask("Bewässerungssystem", template_folder="Webserver/templates", static_folder="Webserver/static") nav = Navigation(app) nav.Bar('top', [ nav.Item(self.translater.getTranslation('Dashboard'), 'showDashboard'), nav.Item(self.translater.getTranslation('irrigation zones'), 'showZones'), nav.Item(self.translater.getTranslation('blocking times'), 'showTimes'), nav.Item(self.translater.getTranslation('system settings'), 'showSystem') # nav.Item('Gfg', 'gfg', {'page': 5}), #(example with pages) ]) # Example Route with pages: # @app.route('/gfg/') # def gfg(page): # return render_template('gfg.html', page=page) @app.route('/') def startPage(): return redirect(url_for('showDashboard')) @app.route('/action', methods=['GET', 'POST']) @app.route('/action/', methods=['GET', 'POST']) @app.route('/action//', methods=['GET', 'POST']) @app.route('/action///', methods=['GET', 'POST']) def executeAction(command=False, index_str=False, value_str=False): sucess = False try: index = int(index_str) value = int(value_str) except: pass match command: case "switch_zone_on": if (index and value): self.zoneManager.switchZoneIndexState(zoneIndex=index, state=True, duration=value) sucess = True elif(index): self.zoneManager.switchZoneIndexState(zoneIndex=index, state=True, duration=self.zoneManager.systemSettings.defaultManualIrrigationDuration) sucess = True case "switch_zone_off": if (index and value): self.zoneManager.switchZoneIndexState(zoneIndex=index, state=False, duration=value, instant=True) sucess = True elif(index): self.zoneManager.switchZoneIndexState(zoneIndex=index, state=False, duration=self.zoneManager.systemSettings.defaultManualOffDuration, instant=True) sucess = True case "switch_zone_mode": if (index and value_str): zone = self.zoneManager.getZone(index) match value_str: case "automatic": zone.switchMode(autoMode=True) sucess = True case "manual": zone.switchMode(autoMode=False) sucess = True case "set_desired_humidity": if (index and value): zone = self.zoneManager.getZone(index) zone.desiredHumidity = value sucess = True return render_template('action.html', translater=self.translater, zones=self.zoneManager.zones, sucess=sucess) @app.route('/dashboard') def showDashboard(): return render_template('dashboard.html', translater=self.translater, zoneManager=self.zoneManager) @app.route('/zones') @app.route('/zones/') def showZones(zoneNumber=False): if (zoneNumber): return render_template('zone.html', translater=self.translater, zone=self.zoneManager.getZone(zoneNumber)) else: return render_template('zones.html', translater=self.translater, zones=self.zoneManager.zones) @app.route('/times') def showTimes(): return render_template('times.html', translater=self.translater) @app.route('/system') def showSystem(): return render_template('system.html', translater=self.translater) app.run(debug=True, port=self.port)