netatmo wetterstation

Richtig Ich habe auch alle Variablen angelegt… aber irgendwie funktioniert es nicht… bekomme auch keine Fehlermeldung…

Ich vermute beim Auslesescript muß einiges verändert werden … aber da habe Ich keine Ahnung.

:confused::wink:

Rate mal weiter … anzupassen sind wohl im Script nur die Variablen. Poste halt mal Dein Skript und mach ein Bild von den Variablen, vielleicht sieht man was.


<?php
// Login und laden der Funktionen
require_once 'login.ips.php';

// First retrieve user device list

try
{
$deviceList = $client->api("devicelist");
echo "Station: " . $deviceList["devices"][0]["station_name"] . "; Device ID: " . $deviceList["devices"][0]["_id"] . "; Modulname: " . $deviceList["devices"][0]["module_name"] ."
";
echo "Aussenmodule: ID: ".  $deviceList["modules"][0]["_id"]. "; Modulname: " . $deviceList["modules"][0]["module_name"] ."
";
echo "
";
$carport = $deviceList["modules"][0]["_id"];
//echo $Carport;


  //          "a": 20.1,
    //        "b": 63

if(isset($deviceList["devices"][0]))
    {
    $device_id = $deviceList["devices"][0]["_id"];
    // Ok now retrieve last temperature and humidity from indoor
    $params = array("scale" =>"max",
    "type"=>"Temperature,Humidity,Co2,Pressure,Noise",
    "date_end"=>"last",
    "device_id"=>$device_id);
    $res = $client->api("getmeasure", $params);
    if(isset($res[0]) && isset($res[0]["beg_time"]))
        {
        $time = $res[0]["beg_time"];
        $t = $res[0]["value"][0][0];
        $h = $res[0]["value"][0][1];
        $co2 = $res[0]["value"][0][2];
        $pres = $res[0]["value"][0][3];
        $noise = $res[0]["value"][0][4];
        echo "Temperature is $t ° Celsius @".date('c', $time)."
";
        echo "Humidity is $h % @".date('c', $time)."
";
        echo "CO2 is $co2 ppm @".date('c', $time)."
";
        echo "Luftdruck is $pres hPa @".date('c', $time)."
";
        echo "Lärm is $noise db @".date('c', $time)."
";
        SetValueInteger(13027 /*[Wetterstation\Netatmo\Wetterstation\indoor_humility]*/, $h);
        SetValueFloat(39793 /*[Wetterstation\Netatmo\Wetterstation\indoor_temp]*/, $t);
        SetValueFloat(33487 /*[Wetterstation\Netatmo\Wetterstation\indor_co2]*/, $co2);
        SetValueFloat(21215 /*[Wetterstation\Netatmo\Wetterstation\indo_noise]*/, $noise);
        SetValueInteger(23930 /*[Wetterstation\Netatmo\Wetterstation\indor_airpressure]*/, $pres);
        }
    }
        {
    $device_id = $deviceList["devices"][0]["_id"];
    // Ok now retrieve last temperature and humidity from indoor
    $params = array("scale" =>"max",
    "type"=>"Temperature,Humidity,Co2",
    "date_end"=>"last",
    "device_id"=>$device_id,
    "module_id"=>$carport);
    $res = $client->api("getmeasure", $params);
    if(isset($res[0]) && isset($res[0]["beg_time"]))
        {
        $time = $res[0]["beg_time"];
        $t = $res[0]["value"][0][0];
        $h = $res[0]["value"][0][1];
        $co2 = $res[0]["value"][0][2];
        echo "Aussentemperature is $t Celsius @".date('c', $time)."
";
        echo "Aussen-Humidity is $h % @".date('c', $time)."
";
        SetValueInteger(53161 /*[Wetterstation\Netatmo\Wetterstation\outdoor_humility]*/, $h);
        SetValueFloat(58378 /*[Wetterstation\Netatmo\Wetterstation\outdoor_temp]*/, $t);
        }
    }
}
catch(NAClientException $ex)
{
echo "User does not have any devices
";
}
?>

Fehlermeldung: User does not have any devices

Das ist keine Fehlermeldung sondern der else-Zweig des Programms (letzte Zeile) --> die Device-Liste enthält keine Geräte, oder die falschen … kann Dir da nicht weiterhelfen, da ich keine Station habe.

Was kommt denn wenn du dein login.php ausführst? Auch ne fehlermeldung?

keine Fehlermeldung

:confused:

Ich vermute das Script bekommt keine Daten, darum die abbruchbedingung! Sagt das napclient was?

Auch keine Fehlermeldung…

Ich habe den Login verändert jetzt bekomme Ich die Antwort: It worked. Hello


    <?php

    // This is just an example to illustrate the documentation
    // Prefer the PHP SDK

    $app_id = 'xxxxxxx';
    $app_secret = 'xxxxxxxx';
    $username = xxxxxxxxxx;
    $password = 'xxxxxxxxxx';
    $token_url = "http://api.netatmo.net/oauth2/token";
    $postdata = http_build_query(
        array(
            'grant_type' => "password",
            'client_id' => $app_id,
            'client_secret' => $app_secret,
            'username' => $username,
            'password' => $password
        )
    );

    $opts = array('http' =>
    array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata
    )
    );

    $context  = stream_context_create($opts);

    $response = file_get_contents($token_url, false, $context);
    $params = null;
    $params = json_decode($response, true);

    $api_url = "http://api.netatmo.net/api/getuser?access_token="
    . $params['access_token'];

    $user = json_decode(file_get_contents($api_url));
    echo("It worked. Hello <".$user->body->mail.">
");

    ?>

Was hast denn in der Login verändert?

diese Zeile hinzugefügt aber Ich komme immer noch nicht weiter

); 

    $opts = array('http' => 
    array( 
        'method'  => 'POST', 
        'header'  => 'Content-type: application/x-www-form-urlencoded', 
        'content' => $postdata 
    ) 
    ); 

    $context  = stream_context_create($opts); 

    $response = file_get_contents($token_url, false, $context); 
    $params = null; 
    $params = json_decode($response, true); 

    $api_url = "http://api.netatmo.net/api/getuser?access_token=" 
    . $params['access_token']; 

    $user = json_decode(file_get_contents($api_url)); 
    echo("It worked. Hello <".$user->body->mail.">
"); 

    ?> 

kannst du mal dein Login posten …

Hier mal ein Bildchen

Und nochmals mein Code von vorne, mit ner kleinen Hilfe!


<?

require_once("NAApiClient.php.ips");

$config = array();
$config['client_id'] = 'XXXX'; // XXX ersetzen
$config['client_secret'] = 'XXXX'; // XXX ersetzen
$client = new NAApiClient($config);


$username = "xx@yy";  //xx@yy ersetzen
$pwd = "xxxx"; // xxxx ersetzen
$client->setVariable("username", $username);  //hier nichts ändern
$client->setVariable("password", $pwd);        //hier nichts ändern
try
{
$tokens = $client->getAccessToken();
//echo $client;
$refresh_token = $tokens["refresh_token"];
$access_token = $tokens["access_token"];
}
catch(NAClientException $ex)
{
echo "An error happend while trying to retrieve your tokens : ".$ex->getMessage()."
";
}


?>

Danke der Fehler war in der Zeile Client id …

so was muß Ich beim Auslesescript alles eintragen da komme Ich noch ein bisschen durcheinander.

Fehlermeldung:

Notice:  Undefined variable: deviceList in C:\IP-Symcon\scripts\Auslesen.php.ips on line 11

Notice:  Undefined variable: deviceList in C:\IP-Symcon\scripts\Auslesen.php.ips on line 11

Notice:  Undefined variable: deviceList in C:\IP-Symcon\scripts\Auslesen.php.ips on line 11
Station: ; Device ID: ; Modulname: 

Notice:  Undefined variable: deviceList in C:\IP-Symcon\scripts\Auslesen.php.ips on line 12

Notice:  Undefined variable: deviceList in C:\IP-Symcon\scripts\Auslesen.php.ips on line 12
Aussenmodule: ID: ; Modulname: 


Notice:  Undefined variable: deviceList in C:\IP-Symcon\scripts\Auslesen.php.ips on line 14

Notice:  Undefined variable: deviceList in C:\IP-Symcon\scripts\Auslesen.php.ips on line 51
User does not have any devices

also das auslesen der Indoor Fühler funktioniert jetzt , das mit den Aussenfühler noch nicht ??


<?php
// Login und laden der Funktionen
require_once 'login.php.ips';

// First retrieve user device list


try
{
    $deviceList = $client->api("devicelist");
    if(isset($deviceList["devices"][0]))
    {
        $device_id = $deviceList["devices"][0]["_id"];
        // Ok now retrieve last temperature and humidity
        $params = array("scale" =>"max",
                        "type"=>"Temperature,Humidity,Co2,Pressure,Noise",
                        "date_end"=>"last",
                        "device_id"=>$device_id);
        $res = $client->api("getmeasure", $params);
        if(isset($res[0]) && isset($res[0]["beg_time"]))
        {
            $time = $res[0]["beg_time"];
            $t = $res[0]["value"][0][0];
            $h = $res[0]["value"][0][1];
            $co2 = $res[0]["value"][0][2];
            $pres = $res[0]["value"][0][3];
            $noise = $res[0]["value"][0][4];
            echo "Temperature is $t Celsius @".date('c', $time)."
";
            echo "Humidity is $h % @".date('c', $time)."
";
            echo "CO2 is $co2 ppm @".date('c', $time)."
";
            echo "Luftdruck is $pres hPa @".date('c', $time)."
";
            echo "Lärm is $noise db @".date('c', $time)."
";
            SetValueInteger(13027 /*[Wetterstation\Netatmo\Wohnzimmer\indoor_humility]*/, $h);
            SetValueFloat(39793 /*[Wetterstation\Netatmo\Wohnzimmer\indoor_temp]*/, $t);
            SetValueFloat(33487 /*[Wetterstation\Netatmo\Wohnzimmer\indor_co2]*/, $co2);
            SetValueFloat(21215 /*[Wetterstation\Netatmo\Wohnzimmer\indo_noise]*/, $noise);
            SetValueInteger(23930 /*[Wetterstation\Netatmo\Wohnzimmer\indor_airpressure]*/, $pres);

        }
    }
}
catch(NAClientException $ex)
{
    echo "User does not have any devices
";
}

?>

Wenn ich das richtig sehe hast Du den Teil mit den Aussenfühlern (ab zweitem (falschen) Vermerk „Indoor“) auch großzügig gelöscht, wie soll das also gehen? Im Script auf S. 1 waren doch nur die Variablen-Id’s (richtig) einzutragen, oder?

Gruß
Bruno

Hallo

komisch nach einer Anfrage bei Netatmo Support… ging danach das Auslesecript ???

Danke an alle beteiligten !!

Script funzt jetzt !!

Dann gewöhn Dir bitte die Vollzitate ab, die bringen in diesem Zusammenhang nix. Sollte was zitiert werden müssen (andere Kommentare dazwischen, …), dann kann man die auch entsprechend editieren. :wink:

Ja, so sollte es sein!

Evtl findet sich ja jemand, der für die Netatmo User ein Module für die ips Library schreibt! Mir fehlen leider die notwendigen Kenntnisse!

Dann

Kann ich leider auch nicht :o

Korrigier mal bitte die Fehler im login- (## Referenz auf dein …) und Auslesen-Skript (2. Indoor)