Ankündigung

Einklappen
Keine Ankündigung bisher.

Netatmo | Edomi

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Netatmo | Edomi

    Gibt es hierfür eigentlich einen Bedarf?

    Funktioniert eigentlich sehr gut. Problem ist eher, hier muss es auf jeden angepasst werden auf die Geräte die verwendet werden.



    #2
    Oh wegen der Regenmengeerfassung und meiner fehlenden Freizeit was zu basteln... Ja!! Langsam wird edomi damit immer interessanter...
    Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

    Kommentar


      #3
      OK, dann stelle ich es am Abend mal hier ein. Wie gesagt muss aber auf die Devices angepasst werden. Denke ich einmal, dass diese bei jeden anders sind.
      Ist aber nicht viel Aufwand.

      Kommentar


        #4
        Ich hätte grundsätzlich auch Interesse. Habe noch von meiner alten Wohnung ein Netatmo-Set (Innen- und Aussenstation, ohne Regen). Da ich jetzt im neuen Haus viele Temp/Feuchte-Sensoren im Haus verbaut habe, ist Netatmo für mich nicht mehr so wichtig. Aber ich habs ja, warum nicht noch irgendwie einsetzen.

        Kommentar


          #5
          Das fände ich nicht schlecht, die Wetterstation fand ich schon immer schick

          Kommentar


            #6
            hm, wo mir gerade Zweifel gekommen sind... aber auf die "Cloud" kann man trotzdem nicht komplett verzichten oder?
            Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!

            Kommentar


              #7
              Hi,

              ich lass mal diese php auf meinem Debian Server laufen. Hier bekommt man mal alles Devices und Array's.


              PHP-Code:
              <?php

              date_default_timezone_set
              ('Europe/Vienna');

              define('CLIENT_ID''xxxxxxxxxxxxxxxxx');    //Netatmo Client ID
              define('CLIENT_SECRET''######################');    //Netatmo Client Secret
              define('USERNAME''##############');    //Netatmo Benutzername
              define('PASSWORD''##############');    //Netatmo Passwort


              define('SCOPE''read_station');
              define('TOKEN_URL''https://api.netatmo.net/oauth2/token');
              define('DEVICELIST_URL''https://api.netatmo.net/api/devicelist');
              define('DEBUG'1); //0=Debug Modus Aus, 1=Debug Modus Ein

              //Verbindung zu Netatmo aufbauen, Access Token holen und URL mit Access Token abfragen
              if (CLIENT_ID == '' || CLIENT_SECRET == '' || USERNAME == '' || PASSWORD == '') {
                
              fwrite(STDERR"CLIENT_ID, CLIENT_SECRET, USERNAME, PASSWORD, darf nicht leer sein.\n");
                exit(
              1);
              }

              $opts = array(
                
              'http' => array(
                  
              'method' => 'POST',
                  
              'header' => 'Content-type: application/x-www-form-urlencoded;charset=utf-8',
                  
              'content' => http_build_query(array(
                    
              'grant_type' => "password",
                    
              'client_id' => CLIENT_ID,
                    
              'client_secret' => CLIENT_SECRET,
                    
              'username' => USERNAME,
                    
              'password' => PASSWORD,
                    
              'scope' => SCOPE
                  
              ))
                )
                );

              $context stream_context_create($opts);
              $response file_get_contents(TOKEN_URLFALSE$context);
              $response_json json_decode($responseTRUE);


              if (!
              $response || empty($response_json['access_token'])) {
                
              fwrite(STDERR"Der access_token kann nicht bezogen werden. Bitte überprüfe Benutzername und Passwort.\n");
                exit(
              1);
              }

              // Device List abfragen
              $access_token $response_json['access_token'];
              $device_list json_decode(file_get_contents(DEVICELIST_URL '?access_token=' $access_token));
              if (!
              $device_list || sizeof($device_list->body->devices) == 0) {
                
              fwrite(STDERR"Es wurde kein Gerät gefunden.\n");
                exit(
              1);
              }

              if (
              sizeof($device_list->body->modules) == || empty($device_list->body->modules[0]->_id)) {
                
              fwrite(STDERR"Es wurde kein Aussengerät gefunden.\n");
                exit(
              1);
              }

              $new_array objectToArray($device_list);

              echo 
              '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'.'<br>';

              echo 
              '<pre>';
              print_r($new_array);
              echo  
              '</pre>';
               
              echo 
              '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'.'<br>';

              $timestamp $new_array['body']['modules']['3']['dashboard_data']['time_utc'];
              echo 
              date('H:i:s',$timestamp).'<br>';


              function 
              objectToArray($d
              {
                  if (
              is_object($d)) {
                      
              // Gets the properties of the given object
                      // with get_object_vars function
                      
              $d get_object_vars($d);
                  }

                  if (
              is_array($d)) {
                      
              /*
                      * Return array converted to object
                      * Using __FUNCTION__ (Magic constant)
                      * for recursive call
                      */
                      
              return array_map(__FUNCTION__$d);
                  } else {
                      
              // Return array
                      
              return $d;
                  }
              }

              ?>

              Kommentar


                #8
                Uns so schaut dann der LBS aus.
                Hab ich aber nur zum Testen für mich gemacht. Die Ausgänge müssen dann an die vorhandenen Devices angepasst werden. Momentan läuft der LBS als Dämon.
                Eventuell wäre es besser mit einen Trigger abzufragen. Soll ja auch nur mal ein Vorschlag sein für die es benötigen.

                PHP-Code:
                ###[DEF]###
                [name        =Netatmo    ]

                [e#1        = Starten #init=1]
                [e#2        = CLIENT_ID #init=xxxxxx]
                [e#3        = CLIENT_SECRET #xxxxx]
                [e#4        = USERNAME #init=xxxxxx]
                [e#5        = PASSWORD #init=xxxxxx]
                [e#6        = debug  #init=0]

                [a#1        =Temperatur    ]
                [a#2        =Windstärke    ]
                [a#3        =Windrichtung    ]
                [a#4        =Out Temp    ]

                [v#1        = 0    ]
                ###[/DEF]###


                ###[HELP]###
                Vorlage: LBS-Dämon

                Der Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1).
                Das EXEC-Script wird dann einmalig(!) gestartet und läuft in einer Schleife solange, bis EDOMI beendet oder neugestartet wird.

                Der Baustein erhält nicht(!) den Status 1 (LBS "läuft"), um Ressourcen zu sparen: Der [LBS]-Abschnitt dient nur dazu, das EXEC-Script einmalig(!) zu starten.
                ###[/HELP]###


                ###[LBS]###
                <?
                function LB_LBSID($id) {
                    if ($E=getLogicEingangDataAll($id)) {
                    
                        if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                    
                            if (getLogicElementVar($id,1)!=1) {    //dieses Konstrukt stellt sicher, dass das EXEC-Script nur einmal gestartet wird
                                setLogicElementVar($id,1,1);
                                callLogicFunctionExec(LBSID,$id);
                            }
                            
                        }
                        
                    }
                }
                ?>
                ###[/LBS]###


                ###[EXEC]###
                <?
                require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                set_time_limit(0);
                date_default_timezone_set('Europe/Vienna');
                sql_connect();
                //restore_error_handler();
                //error_reporting(0);


                if ($E=getLogicEingangDataAll($id)) {
                $trace=$E[6]['value'];
                define('CLIENT_ID', $E[2]['value']);    //Netatmo Client ID
                define('CLIENT_SECRET', $E[3]['value']);    //Netatmo Client Secret
                define('USERNAME', $E[4]['value']);    //Netatmo Benutzername
                define('PASSWORD', $E[5]['value']);    //Netatmo Passwort

                define('SCOPE', 'read_station');
                define('TOKEN_URL', 'https://api.netatmo.net/oauth2/token');
                define('DEVICELIST_URL', 'https://api.netatmo.net/api/devicelist');
                define('DEBUG', 1); //0=Debug Modus Aus, 1=Debug Modus Ein
                }
                while(getSysInfo(1)>=1) {    //Hauptschleife (wird beim Beenden oder Neustart von EDOMI verlassen)



                            

                if (CLIENT_ID == '' || CLIENT_SECRET == '' || USERNAME == '' || PASSWORD == '') {
                  fwrite(STDERR, "CLIENT_ID, CLIENT_SECRET, USERNAME, PASSWORD, darf nicht leer sein.\n");
                  die(1);
                }

                $opts = array(
                  'http' => array(
                    'method' => 'POST',
                    'header' => 'Content-type: application/x-www-form-urlencoded;charset=utf-8',
                    'content' => http_build_query(array(
                      'grant_type' => "password",
                      'client_id' => CLIENT_ID,
                      'client_secret' => CLIENT_SECRET,
                      'username' => USERNAME,
                      'password' => PASSWORD,
                      'scope' => SCOPE
                    ))
                  )
                );
                $context = stream_context_create($opts);
                $response = file_get_contents(TOKEN_URL, FALSE, $context);
                $response_json = json_decode($response, TRUE);

                // Device List abfragen
                $access_token = $response_json['access_token'];
                $device_list = json_decode(file_get_contents(DEVICELIST_URL . '?access_token=' . $access_token));
                if($trace==1){LB_LBSID_DEBUG($id, "Abfrage gestartet");}

                if (!$device_list || sizeof($device_list->body->devices) == 0) {
                  fwrite(STDERR, "Es wurde kein Gerät gefunden.\n");
                  exit(1);
                }

                if (sizeof($device_list->body->modules) == 0 || empty($device_list->body->modules[0]->_id)) {
                  fwrite(STDERR, "Es wurde kein Aussengerät gefunden.\n");
                  exit(1);
                }

                $new_array = objectToArray($device_list);
                if($trace==1){LB_LBSID_DEBUG($id, "Array umgewandelt");}

                setLogicLinkAusgang($id,1,$new_array['body']['devices']['0']['dashboard_data']['Temperature']);
                setLogicLinkAusgang($id,2,$new_array['body']['modules']['3']['dashboard_data']['WindStrength']);
                setLogicLinkAusgang($id,3,$new_array['body']['modules']['3']['dashboard_data']['WindAngle']);
                setLogicLinkAusgang($id,4,$new_array['body']['modules']['0']['dashboard_data']['Temperature']);
                if($trace==1){LB_LBSID_DEBUG($id, $new_array['body']['devices']['0']['dashboard_data']['Temperature']);}
                if($trace==1){LB_LBSID_DEBUG($id, $new_array['body']['modules']['3']['dashboard_data']['WindAngle']);}
                if($trace==1){LB_LBSID_DEBUG($id, $new_array['body']['modules']['0']['dashboard_data']['Temperature']);}

                    
                    usleep(1000000*60);        //CPU-Last verteilen (die Länge der Pause sollte je nach Bedarf angepasst werden - je länger, desto ressourcenschonender)
                }



                sql_disconnect();
                function LB_LBSID_DEBUG($id,$a) {writeToTraceLog(0,true,"LBSLBSID($id): ".$a);}

                function objectToArray($d) 
                {
                    if (is_object($d)) {
                        // Gets the properties of the given object
                        // with get_object_vars function
                        $d = get_object_vars($d);
                    }

                    if (is_array($d)) {
                        /*
                        * Return array converted to object
                        * Using __FUNCTION__ (Magic constant)
                        * for recursive call
                        */
                        return array_map(__FUNCTION__, $d);
                    } else {
                        // Return array
                        return $d;
                    }
                }
                ?>
                ###[/EXEC]###

                Kommentar


                  #9
                  Integration von Netatmo Welcome wäre nice

                  https://shop.netatmo.com/eur_de/neta...FUWfGwodTHMGaA

                  Kommentar


                    #10
                    Hallo,

                    ich habe einmal einen Baustein in Downloadbereich gestellt für die Station und ein Modul. Sollte für den Innen und Aussensensor sein.
                    http://service.knx-user-forum.de/?co...ad&id=19000290

                    Die Php Classen vom Download in den Ornder /usr/local/edomi/main/include/php kopieren.

                    Für weitere Module Innen/Wind und Regen werde ich einen Extra Bausein erstellen.




                    ###[HELP]###
                    NETATMO Baustein für Station und Modul


                    Diese Dateien mussen im Ordner /usr/local/edomi/main/include/php liegen.
                    -> Ordner /Netatmo/...
                    -> Utils.php


                    Der NETATMO Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1).
                    E1: Signal 1 = Startet Baustein (Dämon)
                    E2: Name Station
                    E3: Name Modul
                    E4: CLIENT ID
                    E5: CLIENT SECRET
                    E6: Username
                    E7: Passwort
                    E8: Debug

                    A1: Name Station
                    A2: Temperatur
                    A3: min Temperatur
                    A4: min Temperarur Uhrzeit
                    A5: max Temperatur
                    A6: max Temperarur Uhrzeit
                    A7: Temperatur trend (stable / up / down)
                    A8: Humidity
                    A9: Pressure
                    A10: Pressure trend (stable / up / down)
                    A11: CO2
                    A12: Noise
                    A13: Location
                    A14: Altitude
                    A15: Longitude (Längengrad)
                    A16: Latitude (Breitengrad)
                    A17: ##Modul## - ab hier beginnt die Ausgabe für das Aussenmodul
                    A18: Name Modul
                    A19: Temperatur
                    A20: min Temperatur
                    A21: min Temperarur Uhrzeit
                    A22: max Temperatur
                    A23: max Temperarur Uhrzeit
                    A24: Temperatur trend (stable / up / down)
                    A25: Humidity
                    A26: Battery (full, high, medium, low, very low)
                    A27: WiFi

                    V1: Dämon
                    V2: Version

                    Changelog:
                    ==========
                    v1.0: Initial version

                    ###[/HELP]###

                    Kommentar


                      #11
                      Baustein für Regen und Windsensor ist auch im Downlaodbereich.
                      http://service.knx-user-forum.de/?co...ad&id=19000291


                      ###[HELP]###
                      NETATMO Baustein für Station und Modul


                      Diese Dateien mussen im Ordner /usr/local/edomi/main/include/php liegen.
                      -> Ordner /Netatmo/...
                      -> Utils.php


                      Der NETATMO Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1).
                      E1: Signal 1 = Startet Baustein (Dämon)
                      E2: CLIENT ID
                      E3: CLIENT SECRET
                      E4: Username
                      E5: Passwort
                      E6: Debug

                      A1: ##Wind Sensor## (Keine Ausgabe)
                      A2: Name Modul
                      A3: Wind Richtung
                      A4: Wind txt NO (120°)
                      A5: Wind Stärke
                      A6: Böen Richtung
                      A7: Böen Stärke
                      A8: max Wind Uhrzeit
                      A9: max Wind Richtung
                      A10: max Wind Stärke
                      A11: Battery (full, high, medium, low, very low)
                      A12: WiFi (Signalstärke)
                      A13: ##Rain Gauger## (keine Ausgabe)
                      A14: Name Modul
                      A15: Regen
                      A16: Regen /24h
                      A17: Regen /1h
                      A18: Battery (full, high, medium, low, very low)
                      A19: WiFi (Signalstärke)


                      V1: Dämon
                      V2: Version

                      Changelog:
                      ==========
                      v1.0: Initial version

                      ###[/HELP]###

                      Kommentar


                        #12
                        Reinhard, danke noch für diesen LBS.
                        Ich habe nun meine Netatmo Wetterstation ausgegraben und wieder in Betrieb genommen. Jetzt würde ich gerne dein LBS testen. Leider habe ich keine Ahnung, wie ich zur CLIENT ID und dem CLIENT SECRET komme? Wo definiert man dies bzw. kann es auslesen?

                        Ich habe nur ein Username und Passwort für Netatmo Webseite (früher musste dies glaub bei der App nicht mal eingegeben werden).

                        Hast du eine kleine Installationanleitung für dein LBS?

                        Kommentar


                          #13
                          OK, habs glaub rausgefunden. Man muss einfach auf der http://dev.netatmo.com Webseite einen "Antrag" stellen. Einfach ein Name und eine Beschreibung für die "App" angeben (habe hier einfach was von Hausautomation erwähnt) und fertig. Die CLIENT ID und das SECRET werden sofort angezeigt.

                          Und schon funktioniert nun dein LBS! Cool...

                          Kommentar


                            #14
                            Der LBS läuft soweit gut. Aber ein Fehler wird bei mir ständig ins Edomi Fehlerlog geschrieben:
                            Code:
                            2016-04-23 20:35:25    272643    ?    41886    Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000290.php | Fehlercode: 8 | Zeile: 50 | Undefined index: pressure_trend    ERROR
                            2016-04-23 20:36:15    849490    ?    41886    Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000290.php | Fehlercode: 8 | Zeile: 50 | Undefined index: pressure_trend    ERROR
                            2016-04-23 20:37:06    373445    ?    41886    Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000290.php | Fehlercode: 8 | Zeile: 50 | Undefined index: pressure_trend    ERROR
                            Hab nun im LBS mal die Zeile (glaub 171) auskommentiert (da ich diesen Wert eh nicht brauche):
                            PHP-Code:
                            setLogicLinkAusgang($id,10,@$device['dashboard_data']["pressure_trend"]); 

                            Jetzt ist Ruhe...(den Fehler in den Klassen zu suchen, war mir jetzt zu mühsam)

                            Kommentar


                              #15
                              Bei mir wird das angezeigt.

                              EDOMI_·_Administration.png

                              Kommentar

                              Lädt...
                              X