netatmo wetterstation

Mach ich, muss es mir nur nochmal genau ansehen!
Login ist klar, aber den Fehler in auslesen kann ich grad noch nicht nachvollziehen

Danke schon mal

Beim zweiten

    // Ok now retrieve last temperature and humidity from indoor

steht da „Indoor“, obwohl im weiteren Verlauf die Outdoor-Sensoren abgefragt werden. Ist zwar nur ein Schönheitsfehler vom Kopieren, verwirrt aber. Wenigstens mich :smiley:

–> Angepasst! Und der Übersicht haleber habe ich es an Beitrag 1 dieses Thread umgezogen, dann müssen „Netatmo Neulinge“ nicht den ganzen Thread durchakkern!

Hat jemand eigentlich schon ein 2. Indoor Modul und kann halfen dieses auszulesen?

Hallo Netatmo Mitbesitzer,
Zum 26.3. müssen scheinbar Änderungen an der Schnittstelle vorgenommen werden:
http://dev.netatmo.com/doc/authentication/scopes
Konnte es mir noch nicht genauer anschauen …
Stuzi

Ich habe gerade die Info von Amazon bekommen, wann ich den vorbestellten Regensensor erhalte.

Netatmo NRG01-WW Regenmesser für Netatmo Wetterstation
Voraussichtliches Lieferdatum: 10. Mai 2014

Hat jemand Interesse an einem nativen Modul um die Daten seiner Station in IPS zu visualisieren ?

Ja, wäre schon fein

Gruß
Dieter

Bitte:

Hallo,
nutzt jemand den Regenmesser? Ich hätte meine Scripte erweitert! …falls Interesse besteht …
Stuzi

hallo stuzi01,

ich wäre schwer interessiert.
beste grüße
hoep

Hallo,

Da das native Netatmo IPS Modul leider noch nicht zusätzliche Indoor Module unterstützt und ich diese Funktionalität unbedingt brauche (bin sehr ungeduldig :D), habe ich mir vorgenommen, stuzi01’s Skript und die Netatmo Beispiele anzupassen. Ich poste das mal hier als Erweiterung.

Ist dann doch etwas mehr geworden und Ich habe auch einen Großteil automatisiert, um die Benutzung einfacher zu machen. Die Module werden automatisch erkannt und die Variablen in einem Dummy Modul pro Netatmo Modul angelegt. Der Vorteil ist, dass nur Variablen für existierende Module angelegt werden. Ein Regensensor habe ich nicht und konnte es nicht testen. Wenigstens der letzte Regenwert sollte aber richtig erkannt werden. Variablen für Batterie, Wifi und RF Status werden auch angelegt. Theoretisch werden auch Thermostat Module unterstützt…

Es wird nur mehr das Skript der Netatmo PHP SDK gebraucht: NAApiClient.php (siehe erster Post von stuzi01)
Zusätzlich wird das gute alte IPSInstaller.ips.php Skript benötigt.

Einfach in IPS eine Kategorie zb. Netatmo anlegen und das Skript im Anhang rein kopieren. Die Parameter im Skript am Anfang (SETTINGS) müssen angepasst werden (client_id, client_secret, Username, pwd) wie im Original. Dann einen Cyclic Event anlegen (z.B. 5mn) und es läuft.

Gruß
Zapp

Update: Dummy Module statt Kategorien.

Netatmo.png

Netatmo_Request.ips.zip (2.71 KB)

Hi zapp,

ich hab grad dein Skript installiert und es wirft mir ein paar Fehlermeldungen:

WARNING ! SSL_VERIFICATION has been disabled since ssl error retrieved. Please check your certificate http://curl.haxx.se/docs/sslcerts.html
Created Category Netatmo Main=15073
Created Instance Innenraum (Base Station)=55565, ModuleID={485D0419-BE97-4548-AA9C-C083EB82E61E}

Warning:  Cannot auto-convert to Integer from Variant. Error: Invalid argument in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 427
Created VariableId Wifi Status=53189

Warning:  Cannot auto-convert to Float from Variant. Error: Could not convert variant of type (String) into type (Double) in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 427
Created VariableId Temperature=45138

Warning:  Cannot auto-convert to Integer from Variant. Error: Invalid argument in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 427
Created VariableId Humidity=24857

Warning:  Cannot auto-convert to Integer from Variant. Error: Invalid argument in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 427
Created VariableId Co2=35331

Warning:  Profil mit Namen "Noise" existiert nicht in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 424

Warning:  Cannot auto-convert to Integer from Variant. Error: Invalid argument in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 427
Created VariableId Noise=29450
Set VariableProfile='Noise' for Variable='Noise' 

Warning:  Profil mit Namen "Noise" existiert nicht in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 433

Warning:  Cannot auto-convert to Float from Variant. Error: Could not convert variant of type (String) into type (Double) in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 427
Created VariableId Pressure=28349

Warning:  Ident darf nur aus Buchstaben und Zahlen bestehen in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 204
Created Instance Auβenraum (Outdoor)=24507, ModuleID={485D0419-BE97-4548-AA9C-C083EB82E61E}

Warning:  Cannot auto-convert to Boolean from Variant. Error: Invalid argument in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 427
Created VariableId Battery=27070
Abort Processing during exceed of maximal ErrorCount: Cannot auto-convert to Integer from Variant. Error: Invalid argument
   Error in Script C:\IP-Symcon\scripts\IPSInstaller.ips.php on Line 427

Zusätzlich wird die AppliCommonPublic.php auch benötigt - nicht in deinem Skript, aber sie wird aus der NAApiClient aufgerufen.

Das mit dem Profil „noise“ verwirrt mich etwas…

Nach mehrmaligem AUfrufen kommt nur noch das hier:

WARNING ! SSL_VERIFICATION has been disabled since ssl error retrieved. Please check your certificate http://curl.haxx.se/docs/sslcerts.html
Set VariableProfile='Noise' for Variable='Noise' 

Warning:  Profil mit Namen "Noise" existiert nicht in C:\IP-Symcon\scripts\IPSInstaller.ips.php on line 433
Temperature 9.4 -> VarType: 2 - VarPosition: 0 - VarProfile: ~Temperature
Humidity 76 -> VarType: 1 - VarPosition: 1 - VarProfile: ~Humidity

Viele Grüße
Martin

Hallo Martin,

Danke für das Feedback. Dann hat es jetzt einer getestet :wink:
Die meisten Fehler bei der Installation sind nicht kritisch und es sollte auch damit funktionieren. Bekommst Du alle Variablen wie in dem Screenshot in meinem Post?
Der erste Fehler mit der SSL_VERIFICATION kommt vom NAApiClient skript. Mir ist nicht ganz klar, was da fehlt. Dein letzter Log zeigt aber, dass die Daten dann doch richtig geholt werden.

Die Warnings mit dem Variant kommen vom IPSInstaller Skript. Da gibt es ein Problem mit der Initialisierung der Variable. Könnte ich in einer neuen Version umgehen. Das ist aber auch nicht kritisch.

Stimmt. Danke. Das hatte ich übersehen.

Das Skript sollte idealerweise das Noise Profil bei der Installation erstellen. Das habe ich aber dann nicht umgesetzt, da ich es bei mir mit Icon und vielen Farben für Schwellwerte gemacht habe. Am besten könntest Du ein ganz einfaches Profil mit dem Namen „Noise“ für ein Integer erstellen z.B. nur mit dem Suffix „dB“.

Wenn ich etwas Zeit habe, poste ich ein Update.

Gruß

Zapp

kann ich auch „fremde“ NEtatmo Geräte auslesen?

Ein Kumpel hat bspw. im gleichen Ort einen Regensensor bei sich integriert. Diesen würde ich gerne auslesen :slight_smile:

Über die Netatmo App sehe ich die öffentlichen Wetterstationen. Würde diese aber gerne auslesen und bei mir in IPS integrieren - rein informativ.

In der API Dokuhabe ich folgendes gefunden: https://dev.netatmo.com/doc/methods/getpublicdata

Du kannst dich von deinem Kumpel einladen lassen, dann siehst du mehr als auf der Map! Geht in der app! Wies dann in ios kommt ist dann natürlich noch nicht erledigt!

Hallo zusammen

Bin Neuling mit IP-Symcon. Bring das mit der Netatmo Wetterstation einfach nicht hin.
Wollte die vereinfachte variante von zapp nehmen. Irgendwie habe ich den durchblick nicht was ich aus dem Post 1 von stuzi01 nehmen muss und was dann von zapp kommt.
Müssen die php dateien von Netatmo in IPS erstellt oder einfach angepasst unter C:\IP-Symcon\scripts gespeichert werden?
Kann jemand einem Anfänger vielleicht helfen. Besten Dank.

Gruss swisswn

IPS Version 3.3 (Windows 8.1 Professional)

Hi könnte jemand seine komplette Scriptsammlung hier posten, das Modul kann ich leider auf dem PI nicht verwenden :mad:

Hi Zapp,

bei mir legt dein Script leider immer wieder die Variablen Neu an und aktualisiert dann die neuen.
Kann man das irgendwie umgehen ?

So ich habe mir alle Schnippsel zusammengesucht und habe alles in ein Scipt gepackt:

<?php
require_once("NAApiClient.php");


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


$username = "xx@yy";  //xx@yy ersetzen
$pwd = "xxxx"; // xxxx ersetzen


// Variabeln

//**** Innen Sensor:

$temperatur1=47937  /*[Wetterstation\Netatmo\Temperatur]*/;
$luftfeuchtigkeit1=27031  /*[Wetterstation\Netatmo\Luftfeuchtigkeit]*/;
$co21=54523  /*[Wetterstation\Netatmo\CO2]*/;
$laerm1=13036  /*[Wetterstation\Netatmo\Lärm]*/;
$luftdruck1=43030  /*[Wetterstation\Netatmo\Luftdruck]*/;

//draussen Sensor:

$temperatur2=34427  /*[Wetterstation\Netatmo\Draußen\Temperatur]*/;
$luftfeuchtigkeit2=25295  /*[Wetterstation\Netatmo\Draußen\Luftfeuchtigkeit]*/;


// **************** Ab hier nichts ändern !!!!!!! *************************


$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()."
";
}


// 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/base
    $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)."
";
        SetValueFloat($luftfeuchtigkeit1 , $h);
        SetValueFloat($temperatur1, $t);
        SetValueFloat($co21, $co2);
        SetValueFloat($laerm1, $noise);
        SetValueFloat($luftdruck1, $pres);
        }
    }
        {
    $device_id = $deviceList["devices"][0]["_id"];
    // Ok now retrieve last temperature and humidity from outdoor
    $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)."
";

		echo $co2;
        SetValueFloat($luftfeuchtigkeit2, $h);
        SetValueFloat($temperatur2, $t);
        //SetValue(13713, $co2);
        }
    }
}
catch(NAClientException $ex)
{
echo "User does not have any devices
";
}
?>

Anleitung:

  1. Erstelle ein neues Script und kopiere das obere Scipt hinein.
  2. Trage deine Userdaten ein
  3. Lege die Dummy Module und Variabeln an (siehe Bild) und trage die Variabelids ins Script ein.
  4. Erstelle für das Script ein zyklisches Ereignis zB. jede Minute…
  5. Kopiere die Datei NAApiClient.php (hängt an) in das Scriptverzeichniss von IPS.
  6. Wenn alles richtig gemacht wurde kann das Script nun ausgeführt werden.

NAApiClient.zip (6.59 KB)

Hallo drapple

Danke funktioniert perfekt. Habe das script angeschaut verstehe aber nicht wie ich noch ein weiteres Indoor Modul hinzufügen kann. Alle versuche schlugen fehl. Kannst Du mir das evtl. erklären.

Besten Dank.

Gruss Roger