Guten Abend alle Zusammen,
vor ca. 2 Jahren habe ich mit einen Raspberry Pi 4 (2GB RAM) einen Webserver gebaut, welcher die GPIOs meines Raspberrys steuert. Die PHP-Webseite führt nach dem drücken entsprechender Buttons Befehle aus (z.B.: gpio -g write 23 0). Das Funktioniert soweit auch alles ganz gut.
Theoretisch möchte ich nun, dass man mit drücken von Buttons auf der Webseite bestimmte Variablen eines Python Skriptes ändern kann. Ziel soll es sein, dass man auf der Webseite einen Button drückt und dieser dann den Wert im Python Skript beeinflusst, allerdings soll das nur ein mal den Wert der Variable verändern. Wenn man dann wieder das "Gegenstück" des Buttons drückt (auch nur einmalige Änderung des Wertes), dann soll der andere Button wieder den Wert verändern können und anders herum. Dies kann auch über einen Schalter bewerkstelligt werden.
Praktisch gesehen möchte ich I2C GPIO Expander (MCP23017) über eine Webseite ansteuern. Allerdings müssen dazu immer wieder alle Pins gesetzt werden: Pin 1 bis 8 = 0 bis 128, 0 bedeutet, dass kein Pin an ist, 4 bedeutet Pin 3 ist an, 7 bedeutet Pin 1, 2 und 3 ist an, 255 bedeutet alle Pins sind an, usw. (letzer Pin = Pin 8 = 128). Wenn ich jetzt also den Button für Anschalten von Pin 6 drücke, dann soll es dem Wert 32 hinzufügen. Wenn jetzt nochmal der gleiche Button gedrückt wird, sollen aber nicht nochmal 32 hinzugefügt werden, da ja sonst (32 + 32 = 64) Pin 6 angehen würde. Anders herum sollen allerdings auch keine 32 abgezogen werden können, wenn zuvor keine 32 hinzugefügt wurden (weil z.B. Pin 7 (64) noch an sein könnte und 64 - 32 = 32). Wenn man aber zuvor den Pin 6 aktiviert hat, dann soll sich dieser auch wieder deaktivieren lassen.
Zur besseren Vorstellung werde ich das hier noch einmal grafisch darstellen:
- Endgerät greift über (W)LAN auf eine Webseite des Raspberrys zu
- auf der Webseite sind Buttons (oder Schalter -> nur Position wird gemerkt (vielleicht einfacher?))
- beim drücken eines Buttons soll in einer Datenbank ein Wert geändert werden
- ein Python Skript liest den Wert (entweder in Wiederholung oder bei Änderung)
- Python Skript ändert darauf hin eine Variable (zählt nur einmal dazu bis "Gegenstück" gedrückt wurde)
- Der Python Skript sendet dann die Daten über I2C Verbindung an den MCP23017
- Wenn das Gerät die Webseite verlässt und/oder das gleiche/ein anderes Gerät (wieder) auf die Webseite geht, dann soll die Button-"Sperre" aktiv bleiben (bzw. die Schalter sollen ihre Position wiederherstellen)
Meine Fragen sind jetzt folgende:
1. Wie mache ich das, dass die Buttons auf meiner Webseite nur den Wert der Variable ändern, wenn zuvor die Bedingung ("Gegenstück" gedrückt) erfüllt worden ist?
2. Wie ändere ich demzufolge den Wert in einer Datenbank über eine Webseite unter genannten Bedingungen?
3. Wie stelle ich das an, dass die Webseite (oder das Python Skript) sich merkt, welche Buttons etwas bewirken dürfen?
4. Wenn Schalter die bessere Variante sind, wie lass ich die Webseite merken, in welcher Position die waren?
Ich hoffe, dass ich mein Problem ausführlich genug geschildert habe, bei Fragen versuche ich so schnell wie möglich zu antworten.
Ich möchte mich im Vorfeld für Ideen, Ratschläge und Lösungen bedanken.
Mit freundlichen Grüßen,
Firefury04