PHP und 433Mhz Funksteckdosen [Heimautomatisierung]

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

    Ich habe folgendes Problem:

    Ich habe nach der Anleitung hier im Forum(link) eine Schaltung gebaut um die Elro-Funksteckdosen zu schalten. Um Plattform unabhängig zu bleiben, habe ich jedoch vor diese über PHP zu schalten. Zum Beispiel kann ich dann mein NAS ein oder ausschalten (zb wie hier) o.ä. über ein Webinterface. Ich habe auch ein Temperatursensor in der Schaltung untergebracht, was auch ohne Probleme funktioniert über exec(....).
    Genau so habe ich mir vorgestellt die Steckdosen zu schalten. Hier habe ich schon folgende "Meilensteine" erreicht:

    • über ./send .... auf der Konsole funktioniert es
    • logge ich mich mit su www-data ein geht das ebenso
    • mit php einschalten.php funktioniert das auch


    Was ich gemacht bereits probiert habe:

    • in var/www/ ist alles auf chown www-data:www-data
    • ich habe in etc/sudoers/ www-data als root eingetragen (auch wenn ich hier noch bauchweh habe)
    • den Befehl in ein Script umgewandelt und das Script ausgeführt


    Meine einschalten.php sieht so aus:

    PHP
    <?php 
        echo shell_exec('sudo /home/XXXXX/send 01000 1 1');
    ?>


    der Apache2 log sagt:
    "sudo: no tty present and no askpass program specified"


    Was ich einfach nicht verstehen will, ist warum er nicht den Shellbefehl ausführen will. Die Temperatur stellt er ja auch richtig dar. Der Code hier ist so ähnlich:

    PHP
    <?php
    $temp = exec('xxxx/temp1');
    echo $temp;
    ?>

    das temp1 Script:

    Code
    tempread=`cat /sys/XXXX/w1_slave`
    temp=`echo $tempread | egrep -o '.{5}'`
    echo $temp

    mir will einfach nicht in mein Kopf gehen, warum der Befehl ./send ... nicht ausgeführt wird, wenn ich sie von "draußen" aufrufen will. es geht ja scheinbar alles und mehr Rechte kann ich nicht vergeben.

    Könntet ihr mir da weiterhelfen? :helpnew:
    Ich sitze schon ein paar Tage an diesem Problem.:@:wallbash:

    SORRY FOR LONG POST :blush:

  • PHP und 433Mhz Funksteckdosen [Heimautomatisierung]? Schau mal ob du hier fündig wirst!

  • Zeige mal bitte die Zeile die du in der sudosers Datei eingegeben hast, warum setzt du www-data auf root anstatt nur das sudo für den send Befehl zu erlauben?

    Zu dem Problem mit den Temperatursensoren, warum schreibst du da ein Shell Skript dafür? Wenn du den Dateiinhalt direkt in PHP ausliest und mit preg_match verarbeitest funktioniert das wunderbar und ist dazu noch sehr viel schneller als mit exec.

    (Ich entwickle momentan eine ähnliche Software [das Raspberry Pi SmartHome Control] da hatte ich die selben Probleme zu Lösen)

    Einmal editiert, zuletzt von agent47 (10. Dezember 2013 um 06:57)

  • Zu nächst einmal Danke für die schnelle Antwort. Dein RPi SmartHome-Projekt gefällt mir sehr gut. So habe ich mir mein auch vorgestellt. :)

    Zitat


    [font="Tahoma, Verdana, Arial, sans-serif"]Zeige mal bitte die Zeile die du in der sudosers Datei eingegeben hast, warum setzt du www-data auf root anstatt nur das sudo für den send Befehl zu erlauben?[/font]

    Wenn ich sudo nur für send erlaube, muss ich dann nicht auch weiter runter gehen und für die Programme, die ./send benutzt auch den sudo setzen?

    In der sudoers-Datei habe ich es leicht übertrieben glaube ich:


    Code
    www-data ALL=(ALL) NOPASSWD: ALL



    Ich glaube mehr rechte konnte ich ihm nicht geben. Das sollte hier jedoch nur zu Testzwecken sein. Später möchte ich das noch eindämmen.


    Zitat


    [font="Tahoma, Verdana, Arial, sans-serif"]Zu dem Problem mit den Temperatursensoren, warum schreibst du da ein Shell Skript dafür? Wenn du den Dateiinhalt direkt in PHP ausliest und mit preg_match verarbeitest funktioniert das wunderbar und ist dazu noch sehr viel schneller als mit exec.[/font]

    Nun gut da hast du Recht, das änder ich glaube ich noch. Aber die Temperatursensoren funktionieren ja. Das Problem liegt bei den Steckdosen, bekomme die einfach nicht geschaltet. :(

    Wie steuerst du sie den an?

  • Mein Eintrag in die Sudosers Datei wie folgt aus:

    Code
    www-data ALL = NOPASSWD: /opt/rcswitch-pi/send, /sbin/reboot, /sbin/halt

    Dadurch werden nur die 3 Befehle erlaubt.

    Der PHP Code dazu sieht wie folgt aus:

    Code
    @shell_exec('sudo ' . PATH_TO_RCSWITCH_PI . ' ' . $switch['systemCode'] . ' ' . $switch['deviceId'] . ' ' . $switch['command']);

Jetzt mitmachen!

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