WEBSERVER Variablen wiedergeben

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
marco_b91
User
Beiträge: 1
Registriert: Dienstag 16. Oktober 2018, 10:05

Hallo Miteinander

Ich bin neu hier und ich denke meine Frage ist relativ einfach. Ich sitze jedoch seit Stunden daran und bin echt verzweifelt. Die Grundidee ist eine Bewässerungsanlage über einen Webserver anzusteuern. Ich habe mich hierfür bei den Codes von CyberOmlette bedient und diese etwas angepasst.
http://www.cyber-omelette.com/2017/09/a ... ering.html
Ich muss auf dem Webserver Variablen von Sensorwerten ausgeben. Zu sehen unter web_plants.py funktion lese_sensoren():
Das funktioniert, weil ja beim Start des Webservers die "erste" Seite ('/') aufgerufen wird. Sobald ich aber mit einem Button vorwärts gehe z.B. in ("/wasser1") verschwindet die Anzeige der Variable von lese_sensoren(): mein Ziel ist jedoch den Wert des Sensors immer anzuzeigen. Was muss ich tun?

PS: Wie kann ich hier schlau files hochladen? ^^

Besten Dank.

####### web_plants.py #######

from flask import Flask, render_template, redirect, url_for
import psutil
import datetime
import water
import os

app = Flask(__name__)



def template(title = "AutomaticBotanic", text = ""):
now = datetime.datetime.now()
timeString = now
templateDate = {
'title' : title,
'time' : timeString,
'text' : text
}
return templateDate


@app.route("/")
def lese_sensoren():
status = water.get_status(7)
if (status == 0):
wert = "Trocken!"
else:
wert = "Feucht"

return render_template ("main.html", sensor1 = wert)



@app.route("/last_watered")
def check_last_watered():
templateData = template(text = water.get_last_watered())
return render_template('main.html', **templateData)

@app.route("/wasser1")
def ventil1():
water.pump_on(29,31,1)
templateData = template(text = "Watered Once")
return render_template('main.html', **templateData)

@app.route("/wasser2")
def ventil2():
water.pump_on(29,33,1)
templateData = template(text = "Watered Once")
return render_template('main.html', **templateData)

@app.route("/wasser3")
def ventil3():
water.pump_on(29,35,1)
templateData = template(text = "Watered Once")
return render_template('main.html', **templateData)

@app.route("/wasser4")
def ventil4():
water.pump_on(29,37,1)
templateData = template(text = "Watered Once")
return render_template('main.html', **templateData)

@app.route("/wasser5")
def ventil5():
water.pump_on(29,40,1)
templateData = template(text = "Watered Once")
return render_template('main.html', **templateData)

@app.route("/auto/water/<toggle>")
def auto_water(toggle):
running = False
if toggle == "ON":
templateData = template(text = "Auto Watering On")
for process in psutil.process_iter():
try:
if process.cmdline()[1] == 'auto_water.py':
templateData = template(text = "Already running")
running = True
except:
pass
if not running:
os.system("python auto_water.py&")
else:
templateData = template(text = "Auto Watering Off")
water.cleanup()
os.system("pkill -f water.py")

return render_template('main.html', **templateData)

if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte deinen Code in den dazugehoerigen Tags posten, so ist der unlesbar. Dazu den vollstaendigen Editor bemuehen & den </>-Knopf druecken, nachdem du den Quellcode markiert hast.

Und zu deinem Problem: es gibt verschiedene Loesungen, wenn es bei einer simplen reinen HTML/HTTP-Loesung ohne Javascript und AJAX bleiben soll, dann musst du eben in jeder deiner Routen immer die Daten abfragen und an das Template uebergeben.
Antworten