kostenloser Webspace werbefrei: lima-city


.sh Script per PhP starten

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    h***********r

    Hallo, da bin ich schon wieder mit einer Frage :D
    Ich bastel hier gerade für meine 5.PK mit einem Raspberry Pi3 etwas rum. Dabei benutze ich die GPIO Ports des Gerätes um verschidene Aktionen durchzuführen. Derzeit aktiviere u deaktiviere ich die jeweiligen Ports noch per ./gpio*ein.sh // ./gpio*aus.sh
    Da hatte ich jetzt sie super Idee dieses Script einfach mit PhP per Button auf einer Website zu starten. Die Ausgabe des Scripts benötige ich nicht, es muss nur ausgeführt werden. Theoretisch kann man dass sicher auch alles in PhP umsetzen, das ist mir aber noch etwas zu hoch :)

    Hier ist eines der sh Scripte
    * steht hierbei immer für den GPIO Port
    ./gpio*ein.sh
    #!/bin/sh
     
    echo "*" > /sys/class/gpio/export
    echo "out" > /sys/class/gpio/gpio*/direction
    echo "1" > /sys/class/gpio/gpio*/value
    chmod 666 /sys/class/gpio/gpio*/value
    chmod 666 /sys/class/gpio/gpio*/direction


    Bei dem PhP Code hätte ich mir in etwa so etwas vorgestellt:

    //Ausführen Script 1 (./gpio*ein.sh)
    sleep (0.5) 
    //Ausführen Script 2 (./gpio*aus.sh)


    Ich hoffe ihr könnt da helfen :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Entweder führst du das Shell-Script per sytem/exec/... aus, oder du schreibst die Dateien direkt z.B. via file_get_contents.
    Vergiss aber nicht dass das Script dann als PHP-/Webserver-User rennt und du ggf. die entsprechenden Berechtigungen vergeben musst.
  4. Autor dieses Themas

    h***********r

    Vielen Dank erst einmal für die Hilfe :)
    Ich versuche das nun doch mit file_put_contents . Allerdings funktioniert es noch nicht.
    So sieht der Code aus.
    <?                                                                                                                                                                                                          
    file_puts_contents("/sys/class/gpio/export", 6);                                                                                                                                                            
    file_puts_contents("/sys/class/gpio/gpio6/direction", "out");                                                                                                                                                
    file_puts_contents("/sys/class/gpio/gpio6/value", 1);                                                                                                                                                       
    sleep(1);                                                                                                                                                                                                   
    file_puts_contents("/sys/class/gpio/gpio6/value", 0);                                                                                                                                                       
    ?>


    Die Rechte im Verzeichnis habe ich mit
    chown www-data /sys/class/gpio/*

    hoffentlich richtig gesetzt.
  5. horstexplorer schrieb:
    Die Rechte im Verzeichnis habe ich mit
    chown www-data /sys/class/gpio/*

    hoffentlich richtig gesetzt.
    Nun ja, das ist naheliegend. Du kannst das aber auch überprüfen.

    Zuerst einmal würde ich gerne sehen, welche Rechte jetzt tatsächlich gesetzt sind. Das kannst du mit
    ls -l /sys/class/gpio
    abfragen.

    Dann kannst du einmal versuchen, die funktionierenden Shellskripte mit www-data Rechten auszuführen.
    Wechsle dazu einfach mit
    sudo su www-data
    in den Rechtekontext des Webservers und teste dann die Shellskripte.

    In PHP empfiehlt es sich, die Fehlermeldungen explizit einzuschalten. Füge also oben im Skript folgende Zeilen ein:
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    Danach gibt dir PHP unter Umständen auch Fehler aus.

    Mit diesen Schritten kannst du dann den Fehler genauer eingrenzen.
  6. Autor dieses Themas

    h***********r

    Ok, die Rechteverteilung sieht so aus:
    root@CloudHome:/var/www/html# ls -l /sys/class/gpio                                                                                                                                                         
    insgesamt 0                                                                                                                                                                                                 
    -rwxrwx--- 1 www-data gpio 4096 Jul 11 13:00 export                                                                                                                                                         
    lrwxrwxrwx 1 www-data gpio    0 Jul 11 12:31 gpio6 -> ../../devices/platform/soc/3f200000.gpio/gpiochip0/gpio/gpio6                                                                                         
    lrwxrwxrwx 1 www-data gpio    0 Jul 10 19:19 gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0                                                                                           
    lrwxrwxrwx 1 www-data gpio    0 Jul 10 19:19 gpiochip100 -> ../../devices/gpiochip2/gpio/gpiochip100                                                                                                        
    lrwxrwxrwx 1 www-data gpio    0 Jul 10 19:19 gpiochip128 -> ../../devices/gpiochip1/gpio/gpiochip128                                                                                                        
    -rwxrwx--- 1 www-data gpio 4096 Jul 10 19:19 unexport


    Nach einem Neustart liegt das ganze allerdings wieder auf root.

    Das Einloggen mit www-data funktioniert nicht so ganz, mit
    su -s /bin/bash www-data
    geht es aber :)
    Die Änderungen habe ich eingebaut, allerdings erscheinen keine Fehlermeldungen.

  7. Eigentlich sollte es reichen den User "www-data" zur Gruppe "gpio" hinzuzufügen.
    Das sollte auch den Neustart überdauern.

    Hast du denn mal versucht die Dateien direkt im Kontext von www-data auszuführen? Also direkt am Webserver vorbei?
  8. Autor dieses Themas

    h***********r

    Mittlerweile habe ich das ganze mit shell_exec(sudo ....) gelöst. Sonderlich auf die Sicherheit kommt es hier nicht an, da das ganze nur lokal mit dem Internet verbunden ist.

    Allerdings habe ich mit der Ausführung des PhP Codes noch ein Paar Sachen die mir nicht gefallen.

    Ich bin auf der Seite lampen.php und dort liegt ein Button der zu der php Datei führt.
    <form method="post" action="./GPIO_C/gpio12.php">
    <input type="submit" name="Aus">
    </form>


    und dann liegt unter ./GPIO_C/gpio12.php
    <?php                                                                                                                                                                                                       
    shell_exec('sudo /var/www/html/GPIO/gpio12ein.sh');                                                                                                                                                         
    sleep(1);                                                                                                                                                                                                   
    shell_exec('sudo /var/www/html/GPIO/gpio12aus.sh');                                                                                                                                                         
    header('../lampen.php');                                                                                                                                                                                    
    ?>


    Allerdings werde ich beim ausführen des Codes auf die Seite gpio12.php geleitet und von dort nicht wieder zurück. Eigentlich würde ich das so lösen, dass ich nicht auf die Seite weitergeleitet werde, sondern nur der code ausgeführt wird.

    Beitrag zuletzt geändert: 11.7.2017 15:44:56 von horstexplorer
  9. Eine Weiterleitung kriegst du auch nur mit header('Location: http://example.com'), nicht via header('http://example.com').
  10. Autor dieses Themas

    h***********r

    Dankeschön, nun geht erstmal alles ;)
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!