Liebe Community,
ich bin seit einiger Zeit dabei einen Webserver zur Steuerung der Garage zu programmieren. Ich nutze dafür Flask und Jinja und leider komme ich nicht mehr weiter. Ich habe einen Türkontakt an meinem Garagentor. Dieser soll über GPIO 24 seinen Status an den Raspberry Pi übermitteln und auf dem Webserver angezeigt werden. Auf der Website gibt es einen Button. Auf ihm steht "auf" wenn das Garagentor zu ist und "zu" wenn das Garagentor auf ist. Wenn man auf diesen Button klickt, soll auf dem Output (GPIO 23) ein Impuls erfolgen, der das Garagentor öffnet. Der "Refresh" Button ist für eine spätere Schnittstelle von einem Temperatursensor. Ich habe mein Programm mithilfe von diesem Beispiel geschrieben. Hier die Fehlermeldung
Dies ist der Python Code
import time
import RPi.GPIO as GPIO
from flask import Flask, render_template, request
app = Flask(__name__)
GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(24, GPIO.IN)
pins = {
24 : {'name' : 'GPIO 24', 'state' : GPIO.LOW
}
@app.route("/")
def main():
# For each pin, read the pin state and store it in the pins dictionary:
for pin in pins:
pins[pin]['state'] = GPIO.input(pin)
# Put the pin dictionary into the template data dictionary:
templateData = {
'pins' : pins
}
# Pass the template data into the template main.html and return it to the user
return render_template('main.html', **templateData)
@app.route("/<changePin>/<action>")
def action(changePin, action):
changePin = int(changePin)
if action == "on":
GPIO.output(23, GPIO.HIGH)
time.sleep(0.7)
GPIO.output(23, GPIO.LOW)
message = "Turned Garagentor on."
if action == "off":
GPIO.output(23, GPIO.HIGH)
time.sleep(0.7)
GPIO.output(23, GPIO.LOW)
message = "Turned Garagentor off."
for pin in pins:
pins[pin]['state'] = GPIO.input(pin)
return render_template('main.html', **templateData)
templateData = {
'pins' : pins
}
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80, debug=True)
Display More
Hier main.html
<!DOCTYPE html>
<html>
<head>
<style>
.button {
border: none;
color: white;
padding: 16px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
transition-duration: 0.4s;
cursor: pointer;
}
.button1 {
background-color: white;
color: black;
border: 2px solid #4CAF50;
}
.button1:hover {
background-color: #4CAF50;
color: white;
}
.button2 {
background-color: white;
color: black;
border: 2px solid #008CBA;
}
.button2:hover {
background-color: #008CBA;
color: wHite;
}
img {
-webkit-box-reflect: below 10px;
</style>
</head>
<body>
<h1 style="color:orange;">Garagentor</h1>
<p>Experience</p>
{% for pin in pins %}
{% if pins[pin].state == true %}
<h2>{{ pins[pin].name }} ist aktuell <strong>auf</strong></h2><dv class="row"><div class="col-md-2">
<a href="/{{pin}}/off" class="btn btn-block btn-lg btn-default" class="button.button2">Turn off</a></div></div>
{% else %}
<h2>{{ pins[pin].name }} ist aktuell <strong>zu</strong></h2><div <button class="button button1">Auf</button> <br> class="row"><div class="col-md-2">
<a href="/{{pin}}/on" class="btn btn-block btn-lg btn-primary" class="button button2">Turn on</a></div></div>
{% endif %}
{% endfor %}
<br>
<button class="button button2">Refresh</button>
</body>
</html>
Display More