GPIO Probleme

  • Hallo ich habe eine Problem mit den GPIO,


    Folgendes zum Ablauf, das Hauptprogramm ist Schalter.py , es importiert die lib GpioBasic.py.

    Wenn ich das Programm standalone (von Terminal) aus aufrufe funktioinert alles Prima.

    Es läuft normal bis zum Ende durch und die entsprechenden Werte werden in der Datenbank richtig gesetzt.

    Doch die eigentlich Anwendung soll aus aus dem Broswer mit PHP gestartet werden, dort wird es

    mit:


    $result = exec("./Schalter.py $Liste");


    gestartet.

    In diesem Fall bricht es in GpioBasic.py in Modul SetGpio nach


    print "G1"


    im der Zeile GPIO.setup ab.


    Bis dahin wird alles andere normal ausgeführt.

    Wenn ich in SetSchalter die Zeile


    SetGpio (data[3], Value)


    auskommentiere wird alles andere auch normal ausgeführt.



    hat jemand eine Idee was die Ursache sein könnte.


    danke vorab

    W.G.

    Files

    • Schalter.py

      (700 Byte, downloaded 38 times, last: )
    • GpioBasic.py

      (1.36 kB, downloaded 39 times, last: )
  • Hallo,

    ließ dir mal folgenden Thread durch:

    Anleitung zum schalten von GPIO

    Vielleicht kann dir dieser weiterhelfen. Mit PHP Erfahrungen kann ich leider nicht dienen,

    aber folgende weitere Tipps möchte ich dir dennoch geben:


    $result = exec("./Schalter.py $Liste");

    • Verwende absolute Pfade!
    • Prüfe, ist der zuständige Benutzer (in PHP normalerweise www-data) berechtigt auf die GPIO zuzugreifen?
  • Danke erstmal für die Antwort,


    aber an de Pfaden liegt es nicht, denn ohne die GPIO proc functioniert ja alles.

    Mir ist klar das es ein Rechteproblem ist. Wenn ich das ganze aus dem Browser starte habe ich natürlich keine root rechte.

    Deshalb habe ich folgende Idee,

    Ich werde die Routine GPIO entkoppeln in eine extra modul, und dieses kann ich dann aus python mit


    exec ("sudo setGPIO param1 param2")


    aufrufen. Ich hofe das dann die Rechte passen.


    Gruss W.G.

  • Wenn du in das Programm GpioBasic reinschaust findest du eine Zeile


    SetGpio (data[3], Value)


    Wenn ich die auskommentiere läuft alles durch, das heist wenn es was mit den Pfaden zu tun haette dürfte er gar nicht bis dahin kommen.

    Mit dieser Zeile bricht er dann bei GPIO.setup ab.

    Ich glaube daher das ein Rechteproblem ist.

    Wie ich gelesen habe braucht GPIO root Rechte, die ich narürlich aus PHP -> python nicht habe, also denke ich mir,

    muss ich mir die irgendwie verschaffen.



    Gruss W.G.

  • Also habe Problem gelöst,


    man muss eben manchmal den Blickwinkel einfach verlassen, dann sieht alles schon anders aus.

    Habe jetzt in GpioBasic.py


    os.system. eingefügt


    hier wird dann CtrlGPIO.py gerufen, dann geht es.


    danke trotzdem für die Hinweise


    Gruss W.G.

    Files

    • CtrlGPIO.py

      (350 Byte, downloaded 34 times, last: )
    • GpioBasic.py

      (1.47 kB, downloaded 41 times, last: )
  • Also root Rechte benötigt man nicht (mehr) um auf die GPIO zugreifen zu können.

    Wichtig ist, dass der entsprechende Benutzer der Gruppe gpio angehört.


    Bei vorliegenden Fehlern ist es immer Hilfreich, diese komplett hier im Forum zu posten.

    Ebenso die Bitte, den Code statt als Anhang bei solchen sachen in Codeblöcke zu posten.


    EDIT:

    Kleine Anmerkungen was ich auf die schnelle in deine Skripts gesehen habe:

    Anstatt mit Python V2 zu programmieren würde ich die V3 empfehlen.

    Statt der RPi.GPIO Bibliothek - gpiozero

    Und Konstanten GROß schreiben


    EDIT EDIT: Ob sudo etwas in deinem Pythonskript zu suchen hat, das kann dir ThomasL am besten erklären ;)

  • Hab noch mal vielen Dank für die Info und die Tips.

    Werde mir das alles mal anschauen und entsprechend mit einbauen.

    Vielleicht nur noch grob was das alles werden soll, ich will mit dem PI eine Handvoll 220V Relais schalten,

    und das jeweils als Timer, Schaltuhr oder in Abhängighkeit von Temp oder Helligkeitssensoren.

    Als Zentrale dient dazu eine MySql Datenbank die von der Weboberfläche gespeisst wird und über entsprechend python jobs

    ausgeführt wird.


    gruss W.G.