Linux-Shell via PHP-Datei ausführen
Moin zusammen!
Ich gebe mich nach einigen Stunden nun geschlagen und bitte euch um eure Hilfe.
Ich habe meinen Raspberry mit einem Funkchip gepaart, sodass er Steckdosen an und ausschalten kann. Das Ganze funktioniert auch schon, wenn ich das Skript via Kommandozeile aufrufe.
Folgende Dateien gibt es:
Skript, das Steckdose 4 anschaltet:
Ich habe einen Apache installiert und dort gibt es:
Das Ziel: Ich will über die URL http://raspberry/41.php die Steckdose anschalten können.
Was muss in der 41.php drin stehen, damit es das Skript /home/pi/wiringPi/raspberry-remote/41 ausführt?
Danke vorab für eure Hilfe und gute Nacht....
Peter
Ich gebe mich nach einigen Stunden nun geschlagen und bitte euch um eure Hilfe.
Ich habe meinen Raspberry mit einem Funkchip gepaart, sodass er Steckdosen an und ausschalten kann. Das Ganze funktioniert auch schon, wenn ich das Skript via Kommandozeile aufrufe.
Folgende Dateien gibt es:
Skript, das Steckdose 4 anschaltet:
/home/pi/wiringPi/raspberry-remote/41
Skript, das Steckdose 4 ausschaltet:
/home/pi/wiringPi/raspberry-remote/40
Ich habe einen Apache installiert und dort gibt es:
/var/www/41.php
/var/www/40.php
Das Ziel: Ich will über die URL http://raspberry/41.php die Steckdose anschalten können.
Was muss in der 41.php drin stehen, damit es das Skript /home/pi/wiringPi/raspberry-remote/41 ausführt?
Danke vorab für eure Hilfe und gute Nacht....
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 268272
Url: https://administrator.de/contentid/268272
Ausgedruckt am: 22.11.2024 um 06:11 Uhr
5 Kommentare
Neuester Kommentar
Sofern du dich in der bash-Datei um die benötigten root-Rechte gekümmert hast, reicht ganz einfach der folgende Inhalt:
Sofern sich nicht um die root-Rechte gekümmert wurde, ist es nötig dem Nutzer (www-data), der den Apache2 Webserver ausführt, zum Ausführen dieses Skripts volle Rechte zu geben. Dazu kann der Befehl, nach der Vergabe der Rechte, mittels sudo aufgerufen werden.
Weiterführende Links:
-> http://www.elektronx.de/tutorials/gpio-per-web-ansteuern/
-> http://kampis-elektroecke.de/?page_id=1659
-> http://php.net/manual/de/function.shell-exec.php
-> http://forum.ubuntuusers.de/topic/geloest-shellscripte-mit-php-als-root ...
Diese zusätzlichen Rechte sind nötig, da du Ausgänge auf Hardware-Ebene nutzt um den Funksender anzusteuern.
<?php
shell_exec('/home/pi/wiringPi/raspberry-remote/41 ');
?>
Sofern sich nicht um die root-Rechte gekümmert wurde, ist es nötig dem Nutzer (www-data), der den Apache2 Webserver ausführt, zum Ausführen dieses Skripts volle Rechte zu geben. Dazu kann der Befehl, nach der Vergabe der Rechte, mittels sudo aufgerufen werden.
<?php
shell_exec('/home/pi/wiringPi/raspberry-remote/41 ');
?>
Weiterführende Links:
-> http://www.elektronx.de/tutorials/gpio-per-web-ansteuern/
-> http://kampis-elektroecke.de/?page_id=1659
-> http://php.net/manual/de/function.shell-exec.php
-> http://forum.ubuntuusers.de/topic/geloest-shellscripte-mit-php-als-root ...
Diese zusätzlichen Rechte sind nötig, da du Ausgänge auf Hardware-Ebene nutzt um den Funksender anzusteuern.
Um Dateien zu "sparen" würde ich das ganz wie folgt abändern:
40 und 41 löschen (außer du möchtest die Dosen auch via SSH steuern)
Mittels visudo dem Nutzer www-data sudo-Rechte verpassen, allerdings nur auf folgenden Befehl:
/home/pi/wiringPi/raspberry-remote/send*
Somit darf der Nutzer www-data den Befehl mit jeglichen Parametern als root ausführen.
Folgende Zeile muss mittels visudo hinzugefügt werden:
Danach würde ich die 40.php und 41.php nach folgendem Schema abändern:
Ich kann es gerade nicht testen, weil ich nur mobil unterwegs bin, aber prinzipiell sollte das so laufen.
40 und 41 löschen (außer du möchtest die Dosen auch via SSH steuern)
Mittels visudo dem Nutzer www-data sudo-Rechte verpassen, allerdings nur auf folgenden Befehl:
/home/pi/wiringPi/raspberry-remote/send*
Somit darf der Nutzer www-data den Befehl mit jeglichen Parametern als root ausführen.
Folgende Zeile muss mittels visudo hinzugefügt werden:
www-data ALL=NOPASSWD:/home/pi/wiringPi/raspberry-remote/send*
Danach würde ich die 40.php und 41.php nach folgendem Schema abändern:
<?php
shell_exec ('sudo /home/pi/wiringPi/raspberry-remote/send 10101 4 0');
header("Location:index.html");
?>
Ich kann es gerade nicht testen, weil ich nur mobil unterwegs bin, aber prinzipiell sollte das so laufen.
Du kannst das oben genau so übernehmen, solange du nur die Parameter des send-Befehls änderst. Wichtig ist eben, dass man via visudo einmal dem Nutzer www-data das Ausführen des Skriptes als root erlaubt, denn ohne geht es nicht.
Natürlich funktionieren deine beiden "Skripte" 40 und 41, denn auch hier wird der sudo-Befehl vor dem eigentlichen Befehl ausgeführt. Der Nutzer pi ist in dem sog. sudoers-file, das du mittels des Befehls visudo bearbeiten kannst, ebenfalls eingetragen. Was bedeutet sudo? Führe den folgenden Befehl mit root-Rechten aus. Warum diese nötig sind habe ich oben in einem kurzen Satz erläutert.
Die ganz unsaubere quick and dirty Lösung:
Die Datei "/etc/rc.local" bearbeiten und mit folgendem Inhalt vor der Zeile "exit" befüllen:
Pi neustarten und freuen. Diese Lösung ist allerdings absolut unsicher und sollte eigentlich nicht angewandt werden!
Natürlich funktionieren deine beiden "Skripte" 40 und 41, denn auch hier wird der sudo-Befehl vor dem eigentlichen Befehl ausgeführt. Der Nutzer pi ist in dem sog. sudoers-file, das du mittels des Befehls visudo bearbeiten kannst, ebenfalls eingetragen. Was bedeutet sudo? Führe den folgenden Befehl mit root-Rechten aus. Warum diese nötig sind habe ich oben in einem kurzen Satz erläutert.
Die ganz unsaubere quick and dirty Lösung:
Die Datei "/etc/rc.local" bearbeiten und mit folgendem Inhalt vor der Zeile "exit" befüllen:
chmod -R 666 /sys/class/gpio/