übers web (php) auf rcswitch-pi zugreifen

  • Moin,
    ich habe folgendes auf meinem RPI installiert:
    wheezy
    wiringPI
    rcswitch-pi
    apache2
    php5

    Ich kann, wenn ich im rcswitch verzeichnis bin mithilfe von ./send 11111 1 1 Funksteckdosen an bzw ausschalten. Das alles zu installieren war auch für einen Anfänger wie mich, ja nicht besonders schwer.
    Nun bekomme ich es aber einfach nicht eine php Seite zu bauen, die diesen Befehle an den RPI weiterleitet.
    Der Webserver läuft. Ich weiß nicht wie kompliziert bzw. wieviel arbeit es macht das ein mal Schritt für Schritt zu erklären, aber ich würde mich sehr darüber freuen. Genau so würde ich mich auch einfach über einen Link freuen wo dies schon geschehen ist.
    Ich bin für jede Hilfe dankbar! Denn nach 4 Tagen Recherche und misslungenden Versuchen haben ich gemerkt, dass ich einfach noch zu doof für die Tutorials bin.
    Vielen dank schon ein mal fürs lesen bis hierhin!
    lg ichhabeeinefrag

  • Hallo,

    ich benutze rcswitch-pi selber nicht, aber schau dir mal die Funktion exec() bzw. system() im PHP Manual an.

    http://php.net/manual/de/function.exec.php
    http://php.net/manual/de/function.system.php

    In den Kommentaren findest du Beispiele.

    Die beiden Funktionen sind dazu da, Konsolenaufrufe abzusetzen. Je nachdem wo dein Programm liegt könnte sowas wie exec("/usr/bin/send 11111 1 1") schon reichen. Musst aber noch den Pfad anpassen.

    • Offizieller Beitrag

    In diesem Thread von Racer, geht es um genau dein Problem. Es könnte zwar alles etwas oversized für dich sein, aber zum "Code-Schnipse-klauen" sieht das recht vielversprechend aus

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (10. Juli 2013 um 08:50)

  • Ok vielen dank ich werde mir das die Tage angucken und ausprobieren! Darf ich bei Fragen das Thread hier weiter benutzen?

    Es hat alles super geklappt. Meine Seite sieht jetzt so aus:


    wenn ich dann auf "An" oder "Aus" drücke steht auf der Seite folgendes:
    Schreibtischlampe sending systemCode[11111] unitCode[1] command[0]

    Das lindert zwar nicht die Funktion, aber sieht nicht so gut aus. Woran liegt das? Wie kann man das verschönern? :)
    Vielen Dank für die Hilfe bisher bin wirklich glücklich das ich es jetzt geschafft habe!

    lg Ichhabeeinefrag

  • Hi,

    das sieht doch schon gut aus.

    Die Ausgabe von "sending systemCode[11111] unitCode[1] command[0]" liegt daran, dass du "system" verwendest. Das leitet die Ausgabe des aufgerufenen Programms als Browserausgabe durch. Das sollte das gleiche sein, was du auf der Konsole gesehen hast, wenn du send per Hand ausgeführt hast. Hier sollte es reichen, "system" durch "exec" zu ersetzen.

    Folgendes muss ich aber noch anmerken: ich gehe zwar davon aus, dass deine Seite nicht aus dem Internet erreichbar ist, aber du machst etwas gaaaaanz böses. Du Benutzt die GET-Parameter ohne Prüfung und ohne Escaping. Besonders häufig liest man von dem Problem im Zusammenhang mit SQL-Injections. Das Problem bei dir ist aber von gleicher Natur. Jemand könnte dein Skript mit angepassten Parametern aufrufen, so dass z.B. der Befehl


    Code
    sudo send IRGENDWAS | rm /etc/passwd #...


    ausgeführt wird.

    Schau dir mal http://php.net/manual/de/function.escapeshellarg.php an. Dort erfährst du, wie das Problem umgangen werden kann. Es wird darauf hinauslaufen, dass du nachher sowas wie


    Code
    system("sudo send ".escapeshellarg($_GET['system_code'])." ".escapeshellarg($_GET['unit_code'])." ".escapeshellarg($_GET['state']));


    dort stehen haben wirst. Da es da anfängt unübersichtlich zu werden, kannst du die Variablen natürlich noch rausziehen:


    Code
    $system = escapeshellarg($_GET['system_code']);
    $unit = escapeshellarg($_GET['unit_code']);
    $state = escapeshellarg($_GET['state']);
    
    
    system("sudo send $system $unit $state"); // oder exec


    LG,
    Hacksteak

Jetzt mitmachen!

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