gummiangler: Anmerkungen zum Quelltext:
...
PythonDisplay More#!/usr/bin/env python3 import time from flask import Flask, render_template from RPi import GPIO app = Flask(__name__) GARAGE_DOOR_PIN = 23 INPUT_PINS = [(24, "GPIO 24")] def get_input_pin_states(): return [ {"pin": pin_number, "name": name, "state": GPIO.input(pin_number)} for pin_number, name in INPUT_PINS ] @app.route("/") def index(): return render_template("main.html", pins=get_input_pin_states()) @app.route("/<action>") def action(state): if state in ["on", "off"]: GPIO.output(GARAGE_DOOR_PIN, GPIO.HIGH) time.sleep(0.7) GPIO.output(GARAGE_DOOR_PIN, GPIO.LOW) else: raise ValueError(f"unknown state {state!r}") return index() def main(): try: GPIO.setmode(GPIO.BCM) GPIO.setup(GARAGE_DOOR_PIN, GPIO.OUT) GPIO.setup(24, GPIO.IN) app.run(host="0.0.0.0", port=80, debug=True) finally: GPIO.cleanup() if __name__ == "__main__": main()
Vielen Dank für deine Antwort. Da ich gerne in Python programmiere wollte ich meinen Raspberry Pi mal selbst programmieren und keine App aus dem Store dafür verwenden. Ich kenne mich mit Flask und Jinja nicht besonders gut aus, sodass ich folgendes als Vorlage verwendet habe:
Servieren von Raspberry Pi mit Flask - Matt Richardson, Creative Technologist
Folgendes ist meine Anwendung (Erklärung zu doppelten on/off)
Mein Garagentor benötigt zum Öffnen und Schließen einen Impuls. Da man über einen Impuls den Zustand des Gragentors nicht danach abfragen kann, habe ich über die GPIOS einen einfachen HIGH/LOW Türkontakt angeschlossen. Ich möchte nun auf eine Website (IP des Raspi) gehen und dort wird der Zustand des Garagentors angezeigt und der Button an diesen angepasst. Falls man nun auf diesen Button klickt, wird ein Impuls ausgelöst, welcher dazu führt, dass sich der Zustand des Garagentors ändert. Nun soll sich auch nach einer festgelegten Zeit (5 sek.) der Button und die Zustandsanzeige des Garagentors auf den aktuellen (neuen) Zustand ändern. So soll das immer weiter gehen. Falls sich der Zustand anders ändert (in der Garage ist ein Schalter), soll der Wechsel erkannt und der Zustand auf der Website aktualisiert werden.
Das Programm funktioniert soweit, bis auf einen Punkt:
Sobald ich auf einem Gerät zum ersten mal den Button aktiviere, wechselt er von 000.000.000.00/00 auf 000.000.000.00/00/on
Wenn ich nun also die Seite neu lade (Ich kriege es nicht hin, dass er sie von selbst nach Zustandswechsel neu lädt), wird ein weiterer Impuls gesendet, da wieder die .../on Seite aufgerufen wird. Der off Button funktioniert dann nicht mehr.