Grüss Euch! Habe vor 2 Jahren für meine Ente den Stall automatisiert und über eine Webseite u.a. auch Licht ein-/ausgeschaltet. Jetzt will ich für eine andere Aufgabe so ein Python-Script starten, aber es geht nicht (mehr)?? Programm auf der Webseite des Raspberry (var/www/html ....): ------------------------------------- TEST.PHP <!DOCTYPE HTML> <html> <head> </head> <body> <?php echo "Los geht's<br />"; echo shell_exec('sudo python /var/www/html/carsystem/ledtest.py'); ?> </body> </html> ------------------------------------- startet das Python-Script: ------------------------------------- LEDTEST.PY #!/usr/bin/env python import sys import RPi.GPIO as GPIO import time licht_stall = 25 GPIO.setmode(GPIO.BCM) GPIO.setup(licht_stall, GPIO.OUT) while True: GPIO.output(licht_stall, 1) time.sleep(1) GPIO.output(licht_stall, 0) time.sleep(1) -------------------------------------- Wenn ich das Script vom LXTerminal starte, blinken die LED's. Aus dem Browser gestartet tut sich nix, nur "Los geht's" wird angezeigt. Rechtevergabe: -rwxrwxrwx 1 www-data www-data ... (alle Dateien alle Rechte für www-data) Es dürfte etwas mit den Rechten zu tun haben. Aber ich habe alles Standard gelassen und dem User www-data alle Rechte zugeteilt (ich weiß, das ist eine Sicherheitslücke). Bin schon ganz fertig :-(( Für Eure Tipps bedanke ich mich ganz herzlich!!! Rudi aus Wien
Füge doch mal folgende Zeilen am Anfang des PHP-Teils ein:
1 | ini_set('display_errors', 1); |
2 | ini_set('display_startup_errors', 1); |
3 | error_reporting(E_ALL); |
Das zeigt alle Meldungen des PHP-Interpreters im Browser an.
Darf der Webserver überhaupt sudo benutzen? Und wenn ja, dann hoffentlich nicht generell für beliebige Kommandos. Hast du mal in dessen error logfile geschaut?
Wenn ich noch noch richtig erinnere, der einfachste Weg: Den User unter dem dein PHP läuft zusätzlich in die Gruppe gpio packen und dann direkt aus dem PHP heraus in die "Dateien" unter /sys/class/gpio schreiben.
/sys/class/gpio schrieb: > Wenn ich noch noch richtig erinnere, der einfachste Weg: > Den User unter dem dein PHP läuft zusätzlich in die Gruppe gpio packen > und dann direkt aus dem PHP heraus in die "Dateien" unter > /sys/class/gpio schreiben. Das war ne ganze Zeit lang mein vorgehen bei nem Pi3 oder auch beim Cubieboard. - Funktionierte wunderbar. Mit etwas Ajax hab ich mir auch den aktuellen Stand der Ein- und Ausgänge anzeigen lassen. Muss mal schauen, ob da noch irgendwo die µSD vom Cubie rumliegen habe.
Mario M. schrieb: > Füge doch mal folgende Zeilen am Anfang des PHP-Teils ein: > [pre]ini_set('di............. Servus Mario, vielen Dank für Deinen Tipp! Habe die Zeilen eingefügt, aber keine Meldungen erhalten. Nur die Kontrolltexte, damit ich weiß, dass die Zeilen abgearbeitet wurden.
Stefanus F. schrieb: > Darf der Webserver überhaupt sudo benutzen? Und wenn ja, dann > hoffentlich nicht generell für beliebige Kommandos. > > Hast du mal in dessen error logfile geschaut? Servus Stefanus, Danke für den Hinweis! Bin aber ein Linux-Volldummie und weiß nicht, wo ich diesen Logfile im Linux-Filelabyrinth finde ... Hast Du einen Tipp dafür?
Grüß Euch, sys/class/gpio, Marcel P. und alle anderen Poster! Danke für die Hinweise! Mein Problem ist halt, dass mir eine Anwendung mit der beschriebenen Technik früher gar keine Probleme bereitet hatte, die lief super und jetzt, bei gleicher Aufgabe, spinnt das Ding. Das oben beschriebene LED-Programm verwende ich jetzt nur, um auf ganz simple Weise den Webserver-Zugriff zu testen und das Problem mit so wenig Codezeilen wie möglich zu beschreiben (in Wirklichkeit möchte ich von Adafruit das 16-Kanal PWM-Modul dazu bringen, Servos zu steuern. Dazu habe ich auf einem HTML-Formular Buttons, die bei Klick über Javascript das verbundene Servo zum laufen bringen sollen). Aber nachdem nicht einmal eine dumme LED auf mein Programm reagiert, brauche ich mit dem Servo-Shield gar nicht erst anzufangen. Wie beschrieben, ist das Vorgängerprogramm vor 2-3 Jahren auf einem älteren Raspberry gelaufen. Vielleicht hat sich hier in Linux oder PHP durch Updates etwas geändert? Es kann aber meiner Meinung nach nur mit den Rechten zu tun haben, denn starte ich das LED-Programm (oder das Servoshield-Programm) über die LX-Oberfläche (http://192.168.0.39:8037/carsystem/test.php), läuft es einwandfrei. Auch das PHP-Programm geht. Nur beim Start des Programms im Browser macht der Python-Teil nix. Alle Verzeichnisse und Dateien unterhalb /var/www/... haben alle Rechte und die Gruppe/User ist 'www-data'. Vielleicht hat noch jemand eine Idee?
Rufe das Script doch mal von der Kommandozeile als Benutzer www-data auf:
1 | sudo -u www-data python /var/www/html/carsystem/ledtest.py |
Mario M. schrieb: > Rufe das Script doch mal von der Kommandozeile als Benutzer www-data > auf: >
1 | sudo -u www-data python /var/www/html/carsystem/ledtest.py |
Da erhalte ich die Meldung "Runtime Error: No access to /dev/mem. Try running as Root!" Ich glaube, Du hast die richtige Spürnase! Aber wie soll ich jetzt die Rechte setzen?
Rudi H. schrieb: > Bin aber ein Linux-Volldummie und weiß nicht, wo ich diesen Logfile im > Linux-Filelabyrinth finde ... > Hast Du einen Tipp dafür? Ja: Googeln. cd /var/log/apache2 ls -l
Stefanus F. schrieb: > Rudi H. schrieb: >> Bin aber ein Linux-Volldummie und weiß nicht, wo ich diesen Logfile im >> Linux-Filelabyrinth finde ... >> Hast Du einen Tipp dafür? > > Ja: Googeln. > > cd /var/log/apache2 > ls -l Hab ich getan. Mit "sudo adduser www-data gpio" hab ich mit Mario's Befehl aus der Kommandozeile die LED zum Blinken gebracht. Aber aus dem Browser geht's noch immer nicht :-( und ich hab schon viele Seiten gegoogelt ... Auch rpi-update und update/upgrade haben nix gebracht.
Als root die Datei /etc/sudoers bearbeiten und folgende Zeile anhängen:
1 | www-data ALL=(ALL) NOPASSWD: /var/www/html/carsystem/ledtest.py |
Quelle: https://pi-buch.info/gpio-steuerung-in-php-scripts/
Mario M. schrieb: > Als root die Datei /etc/sudoers bearbeiten und folgende Zeile anhängen: >
1 | www-data ALL=(ALL) NOPASSWD: |
2 | > /var/www/html/carsystem/ledtest.py |
> Quelle: https://pi-buch.info/gpio-steuerung-in-php-scripts/ Mario, vielen Dank für den Link zum Buch! Da lese ich mich jetzt erstmal ein. Wahrscheinlich komm ich dann selbst auf meinen Fehler. Bis jetzt hab ich keinen Erfolg. Aus dem Terminalfenster gestartet blinkt meine LED. Vom Chromium gestartet tut sich nix. Den Screenshot zum Errorlog (Tipp von Stefanus) verlinke ich im Anhang.
Ich lese etwas über eine Ente. Damit ist der Thread auf jeden Fall lesenswert. Vielleicht kannst Du die LED in die Gruppe apache aufnehmen?
Dein Sudo verlangt nach einer manuellen Bestätigung des Users, was aber in deinem Kontext nicht geht. Hast du Marios Tipp umgesetzt? Es sieht nicht danach aus.
Ja, Stefanus, hab ich gemacht. Leider ohne Erfolg. Langsam weiß ich nicht mehr weiter. Irgendwo hab ich vielleicht etwas übersehen, aber ich hab nochmals alles durchgecheckt. Morgen prüfe ich nochmals und vielleicht setz ich das ganze Betriebssytem nochmals neu auf. Auf jeden Fall nochmals vielen Dank für die zahlreichen Tipps! Ihr seid Spitze!
Walter T. schrieb: > Ich lese etwas über eine Ente. Richtig, hatte bis vor 2 Jahre 2 Enten und dafür einen Stall gebaut mit der üblichen ;-) Ausstattung (Motorisiertes Tor, 2 Kameras, Wasserheizung, Temperatursensoren, Beleuchtung). Dazu eine Webseite auf dem Raspberry mit den Kamerabildern, Sensordaten und Schaltflächen (Toröffnung morgens über Cronjob, abends manuell, alles Eigenbau. Portweiterleitung am UPC-Modem ermöglichte Kontrolle und Steuerung während meines Urlaubs auch aus Paraguay. Hat alles funktioniert und dahab ich keine Probleme mit den LED's gehabt. Jetzt geht das Glump aber nicht und ich hab keine Ahnung über die Ursache. Aber vielleicht soll ich mit über 70 schön langsam ein anderes Hobby suchen?
Ich hab mal gerade etwas gesucht und bin fündig geworden: Habe das damals mit PHP und "Direkt"-Zugriff auf die GPIOs gelöst. Der Webserver war Apache2 mit PHP5 Modul. Apache2 lief unter dem Nutzer "www-data". "www-data" als Nutzer war Mitglied der Gruppen "gpio" und "www-data". Im Anhang ein Zip mit den entsprechenden Files, die ich verwendet habe. Vielleicht kannst du damit ja etwas anfangen ;) Da nichts in den Files selbst dazu steht: Den Inhalt darf jeder frei verwenden.
Rudi H. schrieb: > Mit "sudo adduser www-data gpio" > hab ich mit Mario's Befehl aus der Kommandozeile die LED zum Blinken > gebracht. Mario M. schrieb: > Rufe das Script doch mal von der Kommandozeile als Benutzer www-data > auf:sudo -u www-data python /var/www/html/carsystem/ledtest.py Wenn das funktioniert, brauchst Du nur das "sudo" beim Aufruf von Python wegzulassen. Der "www-data"-User hat die erforderlichen Rechte und "sudo" scheint eh nicht richtig konfiguriert zu sein.
Mario M. schrieb: ......... > > Wenn das funktioniert, brauchst Du nur das "sudo" beim Aufruf von Python > wegzulassen. Der "www-data"-User hat die erforderlichen Rechte und > "sudo" scheint eh nicht richtig konfiguriert zu sein. Guten Morgen, Mario! ES LÄUFT!!! Dein Tipp mit "SUDO weglassen" war richtig. Jetzt blinkt die LED. Ich bin heilfroh, dass ich endlich wieder ruhig schlafen kann ;-) Jetzt kann ich die Servos auch ausprobieren und hoffe, dass auch die funktionieren. Nochmals vielen Dank für den entscheidenden Hinweis und noch einen schönen Tag! Rudi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.