Script Variable nicht bekannt

  • Hi
    ich habe erfolgreich meine Temperaturen in Emoncms eingebunden.
    Jetzt wollte ich noch drei GPIOś 17,27,22 mit anzeigen lassen.
    Da ich WiringPi installiert hab, dachte ich all Variablen sind bekannt


    Was mache ich falsch?


    Ich habe mein Temperatur script angepasst, jetzt bringt er den Fehler


    PHP Notice: Undefinede variable : pin in /home/pi/gpio1.php on line 43
    PHP Notice: Undefinede variable : Val in /home/pi/gpio1.php on line 43


    [code=php]<?php
    // ================ Config ===========================


    define("GPIOPATH","/sys/class/gpio/");


    function gpio_is_exported($pin)
    // prueft, ob der Pin exportiert ist
    {
    return file_exists(GPIOPATH.'gpio'.$pin.'');
    }


    function gpio_get_direction($pin)
    // gibt die eingestellte Richtung zurueck
    {
    $Dir = '';
    if (gpio_is_exported($pin))
    { $Dir = trim(file_get_contents(GPIOPATH.'gpio'.$pin.'/direction')); }
    return $Dir;
    }




    function gpio_get_value($pin)
    // gibt den augenblicklichen Wert (0/1) des Pins zurueck

    {
    $Val = '';
    if (gpio_is_exported($pin) && gpio_get_direction($pin) == 'in')
    { $Val = trim(file_get_contents(GPIOPATH.'gpio'.$pin.'/value')); }
    return $Val;
    }



    // Set the emoncms API Key, the Hostname or IP and the internal Sensor ID (Numeric only)
    $EmonCMSApiKey = "a30128415ecbdb1c91291a546142bf3";
    $EmonCMSHost = "localhost";


    // ==================================================


    // Write to emoncms - Example http://192.168.178.24/emoncms/…on?node=1&csv=100,200,300
    // You may want to add other parsed values
    $url = 'http://' . $EmonCMSHost . '/emoncms/api/post.json?node=' . 'gpio' . $pin . '&csv=' . $Val . '&apikey=' . $EmonCMSApiKey . '';

    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $url );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
    $contents = curl_exec ( $ch );
    curl_close ( $ch );


    ?>[/php]

  • Die Fehler kommen deshalb weil nirgends eine Variable $pin oder $Val gesetzt/befüllt wird. Wo soll er die auch herkriegen :s
    Du rufst auch nirgends eine deiner Funktionen auf, beziehungsweise nur eine Verschachtelung: in gpio_get_value() rufst du gpio_is_exported($pin) auf und in gpio_get_direction() rufst du ebenfalls gpio_is_exported($pin) auf - was soweit ja auch Oke ist, aber weiter unten, bevor du $url setzt wird keiner der Funktionen aufgerufen :-/



    Ich versteh auch nicht was wiringPI damit zu tun haben soll? Nutzt du nicht und das ist auch überflüssig, man kann die /sys/class/gpio/ Dateien ja auch direkt ansprechen, wie du es ja auch machst - also unabhängig von wiringPI


    Auch solltest du dir einen etwas anderen Programmier-Style angewöhnen, besser jetzt als später wenns zu spät ist :fies:


    Also erst mal etwas übersichtlicher:



    Dann solltest du eben irgendwo festlegen welche GPIO-Pins du überhaupt verarbeiten willst. Da du mehrere nutzen willst wäre es also ratsam den curl Kram ebenfalls in eine Funktion zu setzen damit der selbe Kram nicht 3x wiederholt wird.
    Also zum Beispiel:



    Und dann brauchst du eben nur noch für jeden GPIO pin einen Aufruf der Emoncms() Funktion machen:


  • :daumendreh2:
    Ich sehe schon ich bin noch ganz weit entfernt vom Script selber schreiben, puuhh


    Ich versuchs mal.
    Danke Guru
    [hr]
    Hi
    muß nochmal Fragen. Ich habs jetzt so versucht, jetzt klagt er darüber das er die Variablem
    $EmonCMSHost und $EmonCMSApiKey nicht gesetzt sind.


    Aber die sind doch gesetzt.


    Wenn ich die Variablen mit den Werten ersetzt kommt kein Fehler


    $url = 'http://' . $EmonCMSHost . '/emoncms/api/post.json?node=' . 'gpio' . $pin . '&csv=' . gpio_get_value($pin) . '&apikey=' . $EmonCMSApiKey . '';


    Allerdings kommt nix bei der Input Seite der Web page an.

    Edited once, last by tomrossi ().