Mit PHP Script Shell Befehle als Sudo durchführen auf dem Pi

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hey,

    ich habe ein Problem mit einem Script. Erstmal hier das Script:

    Dieses Script erzeugt einen "Schalter" zum Toggeln zwischen on und off. Ich möchte, wenn der Schalter auf off steht, folgender Linuxbefehl auf dem Raspberry Pi ausgeführt wird: 'sudo send 11111 4 1' für on bzw. 'sudo send 11111 4 0' für off.

    Ich hoffe mir kann man damit helfen.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

  • Mit PHP Script Shell Befehle als Sudo durchführen auf dem Pi? Schau mal ob du hier fündig wirst!

  • mit dem Sudo meinte ich eher folgendes:

    für ON


    Code
    sudo send 11111 4 1

    und für OFF


    Code
    sudo send 11111 4 0


    Nur das Problem ist, wie Frage ich diesen "Schalter" ab, bzw. wie kann ich die Webseite dazu bringen, sobald der Schalter betätigt wurde, den Shellbefehl auszuführen.

    Und der PHP Teil kommt noch. Den ich möchte auf Dauer die schalter "Dynamisch" aus einer Datenbanktabelle erstellen lassen. Ist einfacher, wenn man neue Schalter z.B. hinzufügen möchte.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

  • Du kennst doch von mir bereits einige PHP Projecte die sudo nutzen - warum guckst du dir das da nicht ab?


    Zum beispiel hier: GPIO Ports Konfigurieren
    oder auch hier: Alternativen zu XBMC


    Ich versteh aber auch nicht so recht was wir mit deinem HTML Code anfangen sollen :huh:

  • Es geht ja primär um diesen Schalter, wie ich den Abfrage. Das war das Hauptproblem eigentlich.

    Und den Code selbst postete ich, damit man an einem konkreten Code die Abfrage machen kann. Also dass wenn exakt der Schalter betätigt wurde, dass der Code ausgeführt wird.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

    Einmal editiert, zuletzt von RaspiDo (27. Oktober 2013 um 17:19)

  • Naja das einzige was du gepostet hast ist wie bereits erwähnt nur HTML Code, damit kannst du aber nichts machen sondern nur einen JavaScript Knopf darstellen - hinter deinem Code steckt keinerlei Funktion, nichts was den Wert des Schalters abfragt und umsetzt o.ä. und auch kein bischen PHP...


    Wenn du ein PHP Script nutzen möchtest muss die Datei mit .php enden, wenn die Datei auf .html o.ä. endet wird der PHP Code nicht verarbeitet.. Es kann da aber natürlich weiterhin HTML Code drin stehen (wie du ja auch an meinen Codes sehen kannst)

    Wie man einen Shellbefehl über PHP ausführen kann beschreib dir Zoidberry schon und findest du auch in meinen Scripts (es gibt immer mehrere Wege) - wobei brauchst du sonst noch hilfe? ;)

    Da du aber auch erst im Nachhinein erwähnt hast dass du mehrere Knöpfe durch eine Abfrage einer Datenbank erzeugen willst, müsstest du dafür erstmal ein Beispiel nennen bevor man darauf eingehen kann

  • Sry,

    ich glaube wir reden gerade an einander vorbei. Ich suche eigentlich primär die Möglichkeit, wie ich es Abfrage.

    Also ich hab mir schon etwas mehr den Kopf verbrochen nur komme auf keinen grünen Zweig. Weil ich nicht hinter komme, was ich mit php am besten über $_POST abfragen muss um den Zustand des Schalters bekomme.

    Weil normal wird ja ein Text eines Inputfeldes über den namen des Inputfeldes abgefragt und in einer PHP If Abfrage geprüft. Nur wie läuft dies hier ab?


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

  • Naja zeig doch mal dein bisherigen Versuch - das würde denk ich einiges erleichtern (grad keine Lust das alles von 0 zu coden)

    Dein <form> ist aber auch falsch, da legst du weder die method (POST oder GET) fest und auch nicht den Namen des form's also weisst du garnicht als welcher Name der $_POST abgefragt werden könnte. Ausserdem fehlt auch noch das abschicken des Formulars (ich kenn aber das javascript nicht und sehe aber auch keine ajax elemente von daher nehme ich das jetzt mal so an)

    Also für den Anfang könnte das so aussehen:
    [code=php]
    <?php
    if (isset($_POST)) { var_dump($_POST); }
    ?>

    <!DOCTYPE html>
    <html>
    <head>
    <title>jQuery mobil | HTMLworld</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/j…e-1.3.0.min.css" />
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.3.0/j…le-1.3.0.min.js"></script>
    </head>
    <body>
    <form method="POST" name="form" action="">
    <label for="flip-2">Flip toggle switch:</label>
    <select name="flip-2" id="flip-2" data-role="slider" data-track-theme="a" data-theme="a">
    <option value="off">Off</option>
    <option value="on">On</option>
    </select>
    <input type="submit" value="Set">
    </form>
    </body>
    </html>
    [/php]

    Dann solltest du beim abschicken des Forms das Array von $_POST angezeigt bekommen

    • Offizieller Beitrag

    Gar nicht, denn dort gibts es kein php code der ausgeführt werden könnte. Somit kannst du auch nichts auswerten. Ich hab keinen Plan was dieser Javakram dort macht, aber wenn du es mit php auswerten willst, dann schreib auch php code ;)

    Edit: meigrafd hat sich ja doch erbarmt ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (27. Oktober 2013 um 18:47)

  • Der "Java" Kram ist primär für das Aussehen und die einfache Funktionalität da.

    Und extra ein "Submit" Button wollte ich eigentlich nicht. Hab irgedwo schon gesehen, dass welche die "Webseite" in Form einer App in php oder so gebaut haben. Also wenn man auf den Button drückt, sofort ein Befehl ausgeführt wird, welches z.B. eine Funksteckdose ein bzw. ausschaltet.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

  • Mag sein, aber ohne PHP kannst du nichts auswerten/verarbeiten - vorallem nicht wenn du mithilfe einer Datenbank mehrere Knöpfe erzeugen willst


    Aber ich mach da nix weiter solange du mir nicht deine bisherigen Versuche zeigst ;)

  • Nun habe ich ein neues Problem.

    Ich wollte gerade was im www Ordner korrigieren und komme nun nicht mehr rein.

    Ich hab vorhin in der /etc/sudoers Datei was verändert, aber ich dachte ich hätte es auskommentiert. Nur wenn ich jetzt versuche per sudo ein Befehl aus zu füren kommt folgende Meldung:



    Habe ich dort noch eine Möglichkeit was zurück zu retten oder muss ich alles neu installieren?


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

    Einmal editiert, zuletzt von RaspiDo (27. Oktober 2013 um 19:33)

  • Ja nu, haste die /etc/sudoers kaputt gemacht - sagt ja auch die Fehlermeldung

    Deshakb am besten immer den Befehl visudo nutzen, das überprüft und verifiziert die Änderung..

    Hast du für deinen root Benutzer kein Password gesetzt? su - root

  • Gut, dann werde ich wohl das zweite machen.

    Also eben einmal Daten sichern, zuinstallierende Zusatzanwendungen rausschreiben, wie z.B. bc und dann heißt es morgen noch einmal von Beginn.

    Ich weiß, conf Dateien nicht vergessen zu sichern.


    Michael

    Der Raspberry Pi ist schon ein schönes Spielzeug mit dem man einiges anfangen kann.

    :angel: :wallbash:

    Einmal editiert, zuletzt von RaspiDo (27. Oktober 2013 um 21:58)

  • Hallo Michael,

    ich habe vor wenigen Tagen das gleiche gebastelt.

    Im Grunde ist es ganz einfach... Ich versuche mal der reihe nach vor zu gehen...

    1.) Setzte deinen Form erstmal ein "action" und "method".
    2.) Gebe den den Radiobuttons ein "name"
    3.) über php kannst du dass die Radiobuttons abfrage...

    Code
    if(isset($_POST["name-radio-button"] == "on")) {
        shell_exec('sudo /home/pi/raspberry-remote/send 11111 1 1');
    }
    
    
    if(isset($_POST["name-radio-button"] == "off")) {
        shell_exec('sudo /home/pi/raspberry-remote/send 11111 1 0');
    }



    4.) Ich würde dir empfehlen, den Wert in eine Datenbank zu schreiben, so kannst du über php abfragen, ob der Schlater auf "on" oder "off" stehen soll, also quasi wirklich Zustand der der Steckdose. Im html benutzt zu dafür "checked"

    5). Um dir den "Submit" Button zu sparen, also dass der Befehl ausgeführt wird, sobald du den Schalter nutzt, kannst du mal googlen... einfach mal "jquery onClick radionbutton submit" oä eingeben... dort findst du javascript, die das Formular ohne extra Button abschicken.

    Hoffe dir ein wenig geholfen zu haben

    Viele Grüße
    Markus


  • 4.) Ich würde dir empfehlen, den Wert in eine Datenbank zu schreiben, so kannst du über php abfragen, ob der Schlater auf "on" oder "off" stehen soll, also quasi wirklich Zustand der der Steckdose. Im html benutzt zu dafür "checked"

    Es sollte HTML Conform sein: checked="checked"

    Aber ich glaube bei einem <option> wäre das korrekte attribut: selected
    Also:

    Code
    <select name="flip-2" id="flip-2" data-role="slider" data-track-theme="a" data-theme="a">
      <option value="off">Off</option>
      <option value="on" selected>On</option>
    </select>

    Dann wäre immer "on" standardmässig ausgewählt. Siehe hier: http://www.w3schools.com/tags/att_option_selected.asp
    Eigentlich wäre auch hier besser: selected="selected"

    Als Datenbank würde ich dir SQLite empfehlen

  • Hallo meigrafd,

    stimmt du hast Recht !! Ich hab es übersehen !!

    Der ON/OFF Button habe ich über Radiobuttons gelöst... da nutzt man "checked".

    Ist mir gerade erst aufgefallen, dass hier ja ein Select Feld genutzt wird, dann natürlich "selected" !

    Erst genau lesen, dann schreiben :)

    Viele Grüße
    Markus

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!