Ankündigung

Einklappen
Keine Ankündigung bisher.

Netatmo | Edomi

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

  • j3sk0
    antwortet
    Integration von Netatmo Welcome wäre nice

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

    Einen Kommentar schreiben:

  • timberland
    Forums-Einsteiger

  • timberland
    antwortet
    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]###

    Einen Kommentar schreiben:

  • timberland
    Forums-Einsteiger

  • timberland
    antwortet
    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;
        }
    }

    ?>

    Einen Kommentar schreiben:

  • BadSmiley
    Systemintegrator
    VIP

  • BadSmiley
    antwortet
    hm, wo mir gerade Zweifel gekommen sind... aber auf die "Cloud" kann man trotzdem nicht komplett verzichten oder?

    Einen Kommentar schreiben:

  • SeatSLF
    Forums-Einsteiger

  • SeatSLF
    antwortet
    Das fände ich nicht schlecht, die Wetterstation fand ich schon immer schick

    Einen Kommentar schreiben:

  • rdeckard
    Forums-Einsteiger

  • rdeckard
    antwortet
    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.

    Einen Kommentar schreiben:

  • timberland
    Forums-Einsteiger

  • timberland
    antwortet
    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.

    Einen Kommentar schreiben:

  • BadSmiley
    Systemintegrator
    VIP

  • BadSmiley
    antwortet
    Oh wegen der Regenmengeerfassung und meiner fehlenden Freizeit was zu basteln... Ja!! Langsam wird edomi damit immer interessanter...

    Einen Kommentar schreiben:

  • timberland
    Forums-Einsteiger

  • timberland
    hat ein Thema erstellt Netatmo | Edomi.

    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.


Lädt...
X