Sensoren Abfragen

  • Hi
    ich habe ein Script von dieser Anleitung verwendet
    Raspi Tips


    Läuft für einen Sensor. Da ich aber kein PHP Guru bin (hab mir zwar ein Tutorial reingezogen, aber das is aber an der Oberfläche gekratz, komm auf keinen grünen Zweig)


    Wie muß ich das Script anpassen, das ich meine restlichen Sensoren einbinden kann?
    Hab insg. 5 Stück.


    [code=php]
    <?php
    //================ Config ===========================
    //Replace your DS18B20 serial here!
    $SENSORID = "28-000005c68110";

    //Set the emoncms API Key, the Hostname or IP and the internal Sensor ID (Numeric only)
    $EmonCMSApiKey = "d5fc60b7e270c380ef0a2b418f632a84";
    $EmonCMSHost = "localhost";<a href="http://cdn.raspberry.tips/2014/12/temperatur.php_.txt">temperatur.php</a>
    $ecmsSENSORID = "1";
    //==================================================

    //BuildSensor Path
    $SensorPath = '/sys/bus/w1/devices/'. $SENSORID .'/w1_slave';

    // Open resource file for thermometer
    $thermometer = fopen($SensorPath, "r");

    // Get the contents of the resource
    $thermometerReadings = fread($thermometer, filesize($SensorPath));
    // Close resource file for thermometer
    fclose($thermometer);
    // We're only interested in the 2nd line, and the value after the t= on the 2nd line
    preg_match("/t=(.+)/", preg_split("/\n/", $thermometerReadings)[1], $matches);
    $temperature = $matches[1];

    //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=' . $ecmsSENSORID . '&csv=' . $temperature .'&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]


    Das ganze soll dann meine Heizungsanlagetemperaturen monitoren.


    Danke schon mal, hoffe ich bekomme bei Euch Hilfe.

  • Sicher nicht die eleganteste Lösung, aber zum Testen sollte das ausreichen:
    mach einfach eine Kopie deiner temperatur.php (oder wie immer Du dein Skript genannt hast), ändere den Namen der Kopie in temperatur2.php. Jetzt nur noch dort die SensorId anpassen und nicht nur temperatur.php, sondern auch temperatur2.php durch den cron-job aufrufen lassen. Jetzt solltest Du beide Temperaturen sehen können.
    Wenn das so geklappt hat, kannst Du nach dem gleichen Muster auch Deine anderen Sensoren einbinden.


    Natürlich ist es sehr viel eleganter, alle Sensoren in einem PHP Skrit abzuarbeiten. Dazu müsstest Du die Sensor -Ids in ein Array schreiben. Dieses Array durchläufst Du dann in einer Schleife (foreach($sensorIds as $sensorId))...
    In der Schleife erzeugst Du dann die Dateien, die das CMS anschließend ausliest und anzeigt. Ich fürchte nur, das überfordert Deine PHP Fähigkeiten, deshalb als schneller Workaround: mein erster Vorschlag oben.


    Hoffe das bringt Dich erst mal weiter.
    [hr]
    Kurzer Nachtrag:
    Funktioniert der Skript bei Dir wirklich? Aus meiner Sicht kann das gar nicht sein, denn Zeile 8 hat eine Syntax mit der PHP sicher nicht klar kommt:

    PHP
    $EmonCMSHost = "localhost";<a href="http://cdn.raspberry.tips/2014/12/temperatur.php_.txt">temperatur.php</a>[/php]
    Was soll ein HTML-link an der Stelle mitten im PHP Code ohne diesen vorher zu beenden?
    Also weg mit:[code]<a href="http://cdn.raspberry.tips/2014/12/temperatur.php_.txt">temperatur.php</a>


    [hr]
    Ungetested!!!!
    [code=php]<?php
    // ================ Config ===========================
    // Replace your DS18B20 serial here!
    $SENSORIDS = array (
    "28-000005c68110",
    "28-000005c64711",
    "29-000005c64712",
    "30-000005c64713",
    "31-000005c64714"
    );


    // Set the emoncms API Key, the Hostname or IP and the internal Sensor ID (Numeric only)
    $EmonCMSApiKey = "d5fc60b7e270c380ef0a2b418f632a84";
    $EmonCMSHost = "localhost";
    foreach ( $SENSORIDS as $key => $SENSORID ) {
    $ecmsSENSORID = $key + 1;
    // ==================================================

    // BuildSensor Path
    $SensorPath = '/sys/bus/w1/devices/' . $SENSORID . '/w1_slave';

    // Open resource file for thermometer
    $thermometer = fopen ( $SensorPath, "r" );

    // Get the contents of the resource
    $thermometerReadings = fread ( $thermometer, filesize ( $SensorPath ) );
    // Close resource file for thermometer
    fclose ( $thermometer );
    // We're only interested in the 2nd line, and the value after the t= on the 2nd line
    preg_match ( "/t=(.+)/", preg_split ( "/\n/", $thermometerReadings )[1], $matches );
    $temperature = $matches [1];

    // 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=' . $ecmsSENSORID . '&csv=' . $temperature . '&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]

    Edited once, last by gupi ().

  • Hi
    erst aml danke für die schnelle Hilfe, stimmt das von mir verwendete PHP script hatte ich schon angepasst und die besagte Zeile glöscht.


    Ich würde auch gerne nur ein Script mit Arrey benutzen, nur wie Du schon gesagt hast, da muß ich mich noch einarbeiten.
    Ich werde einfach mal rumprobieren, learning by doing


    Werde mich wieder melden, falls ich den Wald nicht seh

  • Hi, ich hab mir mal das schnell zusammen geschrieben. Die Auswertung muß natürlich noch verbessert werden

  • tomrossi


    das geänderte (ungetestete) skript mit array habe ich Dir doch schon in meine Antwort eingefügt. Du brauchst hier nur noch die Sensor-Ids in die "echten" Werte zu ändern.


    [code=php]// Replace your DS18B20 serial here!
    $SENSORIDS = array (
    "28-000005c68110",
    "28-000005c64711",
    "29-000005c64712",
    "30-000005c64713",
    "31-000005c64714"
    );[/php]

  • Hallo zusammen,


    Ich möchte das Thema gern nochmal aufgreifen. Ich besitze seit ein paar Wochen meinen ersten Raspberry und würde gerne Daten wie Temperatur, Luftfeuchtigkeit und Luftdruck, wie im ersten Beitrag beschrieben, auswerten und graphisch darstellen. Die entsprechenden Sensoren (DHT22 und BMP180) habe ich bereits elektrisch am Pi angeschlossen.
    Jetzt habe ich versucht, die Sensoren wie hier beschrieben auszulesen. Das hat jedoch nicht funktioniert (bekomme keine ID'S) und wenn es nach längerer Recherche im Netz richtig verstanden habe, ist dies auch so mit diesen Sensoren nicht möglich.
    Nach dieser Anleitung für den DHT22 und dieser Anleitung für den BMP180 ist es mir zumindest gelungen, über die Konsole an die entsprechenden Messdaten zu erhalten. Jetzt würde ich gern das im Post #1 beschrieben Skript so verändern, dass meine "zu Fuß" ausgelesenen Daten an Emoncms übertragen werden.
    Leider bin ich echt blutiger Anfänger und habe nach langer Suche im Netz nichts passendes zu diesem Thema finden können. Vielleicht hat hier jemand Zeit und Lust mir hier weiter zu helfen. Vielleicht gibt es ja auch noch andere oder bessere Tools, um seine Daten über einen längeren Zeitraum zu erfassen und graphisch auszuwerten?


    Besten Dank!


    Rainer

  • Hallo Freunde der kleinen Einplatinen Computer


    ich bin Absoluter Neuling auf dem Gebiet mit dem Raspberry, daher habe ich ein kleines Problemchen, ich hoffe ihr könnt mir weiterhelfen.






    <?php

    // ================ Config ===========================
    // Replace your DS18B20 serial here!


    $SENSORIDS = array (
    "28-0415910ddaff",
    "28-0415910f48ff"
        
    );


    // Set the emoncms API Key, the Hostname or IP and the internal Sensor ID (Numeric only)
    $EmonCMSApiKey = "db4d7783140670e9dc128819a0098ae6";
    $EmonCMSHost = "localhost";
    foreach ( $SENSORIDS as $key => $SENSORID ) {
    $ecmsSENSORID = $key + 1;
    // ==================================================
      
    // BuildSensor Path
    $SensorPath = '/sys/bus/w1/devices/' . $SENSORID . '/w1_slave';
      
    // Open resource file for thermometer
    $thermometer = fopen ( $SensorPath, "r" );
      
    // Get the contents of the resource
    $thermometerReadings = fread ( $thermometer, filesize ( $SensorPath ) );
    // Close resource file for thermometer
    fclose ( $thermometer );
    // We're only interested in the 2nd line, and the value after the t= on the 2nd line
    preg_match ( "/t=(.+)/", preg_split ( "/\n/", $thermometerReadings )[1], $matches );
    $temperature = $matches [1];
      
    // 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=' . $ecmsSENSORID . '&csv=' . $temperature . '&apikey=' . $EmonCMSApiKey . '';
      
    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $url );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
    $contents = curl_exec ( $ch );
    curl_close ( $ch );
    }
    ?>



    ich habe das Script für meine 2 Temperatursensoren abgeändert.


    Wenn ich das Script ausführe müsste ich doch auf Emoncms unter INPUTS die beiden Sensoren sehen oder?


    leider zeigt er mir dort keine an.


    Kann mir jemand helfen den Fehler zu finden?


    Muss ich evtl noch irgend etwas anpassen?




    Im voraus schon mal vielen Dank.


    Gruß Chopper2222


  • Wenn ich das Script ausführe müsste ich doch auf Emoncms unter INPUTS die beiden Sensoren sehen oder?
    leider zeigt er mir dort keine an.


    Geht mir auch so. Ich habe emoncms nach der Offiziellen Anleitung installiert.
    https://github.com/emoncms/emo…ocs/RaspberryPi/readme.md


    Also ich habe emoncms installiert, kann mich einloggen, sehe meinen API Schlüssel....
    Ich habe unter home/pi eine Datei temperatur.php angelegt.
    Öffne ich die Datei mit php home/pi/temperatur.php gibt es keinen Fehler aus. Wenn ich einen falschen API Schlüssel eintrage, sehe ich das sogar im logger:
    ..........|ERROR|index.php|Invalid API key ..................


    Doch mit den richtigen Einträgen passiert einfach nichts. Der Temperatursensor will unter input einfach nicht erscheinen.
    (Sogar in PI Control wird ein schönes Diagramm geschrieben). Aber ich bringe es einfach nicht auf emoncms.
    Danke für die Hilfe.


    EDIT: OMG, ich habe sehr lange gegoogelt bis ich den code mal verglichen habe, mit dem was unter input api steht.


    $url = 'http://' . $EmonCMSHost . '/emoncms/api/post.json?node=' . $ecmsSENSORID . '&csv=' . $temperature . '&apikey=' . $EmonCMSApiKey . '';


    api ist falsch. da muss ein input hin.

    Edited once, last by gigu ().

  • Hallo Zusammen,


    stehe gerade an genau dem Problem wie meine Vorgänger, ich kann das PHP script ausführen, bekomme aber keine Daten ins emoncms.


    Allerdings bekomme ich im cmd auch folgende Fehlermeldung:
    "PHP Warning: Module 'dio' already loaded in Uknown on line 0"


    gigu : Es liest sich so, als hättest du das problem gelöst, leider kann ich dir nicht folgen!
    Wäre über Hilfe dankbar!!