Raspberry GPIO-Port über Webpage schalten geht nicht

#5721120
Lesenswert?

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
Gast #5721201
Lesenswert?

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.
#5721295
Lesenswert?

/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.
#5721469
Lesenswert?

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?
#5721699
Lesenswert?

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.
#5721770
Lesenswert?

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.
Angehängte Dateien:
Gast #5721861
Lesenswert?

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!
Gast #5721866
Lesenswert?

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?
#5721930
Lesenswert?

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.
Angehängte Dateien:
#5722180
Lesenswert?

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.
#5722324
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren