Temperatur vom ds1621 auf Webseite ausgeben. Nur wie?

  • Hallo Forum
    ich versuche die Raum Temperatur gemessen vom ds1621 (I²C-Bus) via Python auf einer PHP Webseite ausgeben. ohne Erfolg... (OS = RaspBMC + Apache2)


    das Python Script:


    die (mini) PHP Datei:

    PHP
    <html>
        <body>
           <h1>test</h1>    
    <?php
        echo shell_exec("sudo /var/www/DS1621read.py");
    ?>
        </body>
    </html>


    habe das Py.Script schon in der sudoers eingetragen "www-data ALL=NOPASSWD: /var/www/DS1621read.py" & via chmod 0755 ... ausführbar gemacht.


    sowohl "cat /var/www/test.php | php" als auch "php -f /var/www/test.php" geben alles richtig aus. nur im Browser ist nichts außer die Überschrift <h1> zu sehen... :(


    das Script alleine läuft, PHP auch. nur nicht zusammen


    Der Apache2 ErrorLog sagt: "sudo: no tty present and no askpass program specified"
    was auch immer er mir sagen will.?

    Rechtschreibfehler sind Special Effects meiner Tastatur
    [font="Arial"]Pater dimitte illis non enim sciunt quid faciunt![/font]
    @sagte der Pi bevor er in Rauch auf ging:@
    Vater, vergib ihnen den sie Wissen nicht was sie tun!

  • habe das Py.Script schon in der sudoers eingetragen "www-data ALL=NOPASSWD: /var/www/DS1621read.py" & via chmod 0755 ... ausführbar gemacht.
    ...
    Der Apache2 ErrorLog sagt: "sudo: no tty present and no askpass program specified"
    was auch immer er mir sagen will.?



    Moin,


    Du hast da scheinbar noch einen Fehler bei Deinem sudoers-Eintrag. Jedenfalls scheint der den nicht zu akzeptieren.


    sudo: no tty present and no askpass program specified"


    mein schlichtweg, dass das Script/Programm keinem tty zugeordnet ist und kein "alternatives" Programm zur Passwort-Abfrage angegeben wurde.


    cu,
    -ds-

  • Hi,


    haltet mich für dumm aber muss es statt

    Code
    echo shell_exec("sudo /var/www/DS1621read.py");


    nicht


    Code
    echo shell_exec("sudo python /var/www/DS1621read.py");


    heißen?


    Mick

  • Moin, so früh schon auf den Beinen ... äh Tasten unterwegs ;)


    Muss nicht. Wenn Du in die erste (sagt man, geht aber auch in der zweiten oder dritten) Kommentarzeile eines scripts den Interpreter mittels "hashbang" - hier im Forum ist der Ausdruck "shebang" geläufiger - den Interpreter angibst (#!/bin/bash oder #!/usr/bin/python ...) und das script mit chmod +x ausführbar machst, kannst Du das bash oder auch python beim Aufruf weglassen.


    cheers,
    -ds-

  • Versuch einmal, das

    Code
    echo shell_exec("sudo /var/www/DS1621read.py");

    durch

    Code
    echo exec("sudo /var/www/DS1621read.py");

    zu ersetzen.

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!

  • Ich glaube nicht das es am shell_exec liegt. Es gibt meines Wissens nach 5 verschiedene Wege einen Konsolen Befehl über PHP-Befehle auszuführen: exec(); shell_exec(); system(); passthru(); und popen();
    welchem man davon letzlich verwendet ist relativ egal (unterschiede gibts dabei aber natürlich)



    Momentan weiss ich aber auch nicht woran das liegt, habe bei mir probehalber ein Test simuliert indem ich in /etc/sudoers eine nahezu ientische Zeile www-data ALL=NOPASSWD: /var/www/test.py eingefügt, ein Script /var/www/test.py angelegt mit Inhalt:

    Code
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    print 'Hello World!'


    Script ausführbar gemacht: chmod +x /var/www/test.py


    Ausgeführt:

    Code
    root@raspberrypi:/var/www# /var/www/test.py
    Hello World!
    root@raspberrypi:/var/www#


    Dann noch ein php Script angelegt mit selben Inhalt wie C.And:

    PHP
    <html>
       <body>
          <h1>test</h1>    
    <?php
       echo shell_exec("sudo /var/www/test.py");
    ?>
       </body>
    </html>


    PHP Datei über den Browser aufgerufen:
    [Blocked Image: http://www10.pic-upload.de/18.08.13/f7zjk7ak9im.png]


    ..funktioniert hier bei mir also auch mit shell_exec... Was nun aber sein kann ist dass das Programm "i2cset" oder "i2cget" probleme machen würde, das weiss ich so nicht weil ich nichts i2c mässiges habe



    Es wäre interessant ob C.And generell garnichts über php ausführen kann oder nur das python Script nicht - also ob das ein generelles Problem ist oder am python Script liegt (warum auch immer)



    Die Funktion des python Scripts könnte man auch probieren mit einer anderen Sprache zu nutzen also zB bash, oder in php


    Von python weiss ich leider zu wenig, genauso wie vom i2c Kram (verstehe zB nicht was das %d bewirken soll, in der manpage von i2c steht nichts von %d)


    soweit ich weiss ist aber im /etc/sudoers auch bei Raspbian bereits eingestellt das www-data alles über sudo darf


    In PHP könnte das Script so aussehen
    (weiss aber nicht ob es funktioniert)


    [hr]


    Hab das grad nochmal über apache2 mit dem PHP was ich zuletzt gepostet habe getestet.. (weil ich das System frisch aufgesetzt hab, vorher hatte ich httplight und somit kein vernünftiges errorlog für php)


    In /etc/sudoers hatte ich erst keinen passenden Eintrag um i2cset auszuführen, da kam bei mir dann auch die Fehlermeldung aus post#1:


    sudo: no tty present and no askpass program specified


    Das test.php auf shell_exec abgeändert und auch die letzten 2 Zeilen auskommentiert weil das irgendwie fehlerhaft ist (vermutlich weil die Werte leer sind):


    Kommt wieder die Fehlermeldung: sudo: no tty present and no askpass program specified


    Dann habe ich in /etc/sudoers folgendes eingetragen:

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


    Dann kam folgende Fehlermeldung:


    sudo: i2cset: command not found


    Also i2c-tools installiert und dann nochmal angesurft, das sah dann schonmal viel besser aus, kamen zwar immernoch Fehlermeldungen aber die sehen besser aus :)




    Es spielt also zumindest im Bezug auf die Fehlermeldungen keine Rolle ob exec(); oder shell_exec(); benutzt wird..



    C.And hat also irgendwie ein Problem mit der /etc/sudoers
    Kannst du die mal bitte vollständig posten?

  • Also hier ist die /etc/sudoers



    2 andere Python Scripts die die CPU Temperatur auslesen bzw. die GPIOs schalten funken Problemlos...
    auch ohne Eintrag in die sudoers.

    Rechtschreibfehler sind Special Effects meiner Tastatur
    [font="Arial"]Pater dimitte illis non enim sciunt quid faciunt![/font]
    @sagte der Pi bevor er in Rauch auf ging:@
    Vater, vergib ihnen den sie Wissen nicht was sie tun!

  • Ich hab mir jetzt noch einmal den Eingangspost angesehen, da wären mir ein paar viele sudo-Aufrufe ineinander (sudo im Script, das mit sudo aufgerufen wird).


    Außerdem hab ich mir meine Scripts angesehen, mit denen ich i2cset unter php ausführe:

    Code
    $cmd_send = "/usr/sbin/i2cset -y 1 0x20 0x00 ".$out_value;
    $set_port = shell_exec($cmd_send);

    Und DAS funktioniert, ohne irgendwelche Einträge in die sudoers!


    shell_exec und exec hatte ich bei meinem wiringPi-Problem, das ich mit der Methode von meigrafd (sudoscript) gelöst habe.

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!

  • die SUDOs in dem Python Script sind auch wieder raus...
    waren nur dringe um vor dem post sicher zu stellen das es nicht daran liegt...
    [hr]

    Quote


    Außerdem hab ich mir meine Scripts angesehen, mit denen ich i2cset unter php ausführe:
    Code: Alles markieren

    Code
    $cmd_send = "/usr/sbin/i2cset -y 1 0x20 0x00 ".$out_value;
            $set_port = shell_exec($cmd_send);


    Und DAS funktioniert, ohne irgendwelche Einträge in die sudoers!


    sorry aber wo kommen diese zeilen rein ? ins php oder wo???

    Rechtschreibfehler sind Special Effects meiner Tastatur
    [font="Arial"]Pater dimitte illis non enim sciunt quid faciunt![/font]
    @sagte der Pi bevor er in Rauch auf ging:@
    Vater, vergib ihnen den sie Wissen nicht was sie tun!

    Edited once, last by C.And ().

  • Die Zeilen habe ich direkt in der PHP Datei. Damit gebe ich Daten an einen PCF8574 weiter, der mir ein paar Relais schaltet.


    Sollte aber nur zeigen, dass i2cset auch unter dem User www-data (ohne sudo!) funktioniert.

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!

  • :@so habe jetzt mal einen meiner PCF8574 rausgesucht ... und der funkt...:wallbash:

    PHP
    <?php
        $out_value = 0xf0;
        $cmd_send = "/usr/sbin/i2cset -y 1 0x20 0x00 ".$out_value;
        $set_port = shell_exec($cmd_send);
        echo shell_exec("/usr/sbin/i2cget -y 1 0x20");
    ?>


    werde jetzt mal an das DS1621 auch mal /usr/sbin/i2c### hängen und sehen was passiert...


    ————————————————————————————————————————————
    ... nichts. *arrr*
    sudo: no tty present and no askpass program specified

    Rechtschreibfehler sind Special Effects meiner Tastatur
    [font="Arial"]Pater dimitte illis non enim sciunt quid faciunt![/font]
    @sagte der Pi bevor er in Rauch auf ging:@
    Vater, vergib ihnen den sie Wissen nicht was sie tun!

    Edited once, last by C.And ().


  • Also hier ist die /etc/sudoers



    2 andere Python Scripts die die CPU Temperatur auslesen bzw. die GPIOs schalten funken Problemlos...
    auch ohne Eintrag in die sudoers.


    So wie du die Datei gepostet hast sieht sie kaputt aus, insbesondere wenn man sich


    Code
    ALLALL)


    anguckt


    " ALLALL) " ist keine gültige Syntax



    Deine 2 anderen Scripts benutzen vermutlich auch kein sudo und funktionieren deswegen auch ;-)



    Du solltest also unbedingt deine /etc/sudoers fixen, am besten mit dem Befehl visudo bearbeiten, mit der Tastatenkombination STRG+k alle Zeilen löschen - alternativ könntest du auch echo "" > /etc/sudoers nutzen - und dann folgendes einfügen:


    (wenn du bei visudo anstatt vi lieber nano nutzen möchtest, gibst du einmalig das ein: export EDITOR=nano)

  • huch da war wohl der Fehlerteufel am Werk ... Smilies deaktivieren nicht Löchen...
    so sieht die Datei aus..



    ??? wieso es läuft es jetzt ??? es läuft :D

    Rechtschreibfehler sind Special Effects meiner Tastatur
    [font="Arial"]Pater dimitte illis non enim sciunt quid faciunt![/font]
    @sagte der Pi bevor er in Rauch auf ging:@
    Vater, vergib ihnen den sie Wissen nicht was sie tun!

    Edited once, last by C.And ().

  • erst mal danke an alle.
    habe eine Lösung:bravo2:
    also der Vollständigkeit halber noch Mal alles komplett (hoffe ich)


    das Python Script: "/var/www/DS1621read.py"



    die PHP Datei:

    PHP
    <html>
        <body>
         <h1>Temperatur via I2C</h1>    
    <?php
         echo shell_exec("/var/www/DS1621read.py");
    ?>
        </body>
    </html>


    des weiteren musste ich noch in der "/etc/rc.local" noch

    Code
    sudo chmod 666 /dev/i2c-1



    eintragen, damit auf den I²C-Bus ohne Rechte zugegriffen werden kann.
    (Weiß nicht ob das der eleganteste weg ist. aber er funktioniert)


    ich glaube ausschlaggebend war "/usr/sbin/i2c###"

    Rechtschreibfehler sind Special Effects meiner Tastatur
    [font="Arial"]Pater dimitte illis non enim sciunt quid faciunt![/font]
    @sagte der Pi bevor er in Rauch auf ging:@
    Vater, vergib ihnen den sie Wissen nicht was sie tun!