Ankündigung

Einklappen
Keine Ankündigung bisher.

Redirect_URL | OAuth2 | Edomi

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

    Redirect_URL | OAuth2 | Edomi

    gaert Hallo Christian

    Die API von Home-Connect (Bosch, Siemens, …) verlangt für die Authentifizierung die Angabe einer Redirect_URL in der App (Developerbereich - siehe Bild):

    Bildschirmfoto 2016-11-19 um 13.23.18.png




    Der oben ersichtliche Redirect-URL gehört zu einem Simulator/Client (Swagger UI) mit dem man entweder simulator- oder echte/reelle Appliances (Haushaltsgeräte) steuern kann. Anstatt dieser Swagger UI als Client, baue ich gerade an einem LBS ...

    Als nächsten Schritt muss ich anstatt des oberen URLs eines eintragen mit dem Edomi umgehen kann, leider weiß ich nicht wie ich es in Edomi umsetzen kann :-(

    http://10.0.100.8/…….. ???

    Kann man das in Edomi dann irgendwie so umsetzen damit so eine Seite wie unten gar nicht notwendig ist und die E-Mail und das Passwort aus dem LBS automatisch übernommen werden, wie ?

    Mit folgendem Authentifizierungs-URL wir folgende Seite aufgerufen (denke ich) wo ich die Mailadresse und das Passwort eintrage (als Owner der Daten), die ich für die Steuerung der Haushaltsgeräte über die Home-Connect-App registriert habe (müsste die gleiche Funktion sein wie wenn man einer Anwendung Zugriff auf z.B. Twitter gewährleistet). Danach bestätige ich durch drücken von „OK“ den Zugriff auf meine Daten als OWNER dem jeweiligen CLIENT der sich mit dem API-KEY als solcher identifiziert.

    Danach erhalte ich einen Authentifizierung-CODE um mich nicht ständig mit den Owner-Daten einlogen zu müssen … usw. ...

    Bildschirmfoto 2016-11-19 um 13.08.17.png



    Danach erhalte ich zB so eine Antwort aufgrund der verwendetes „SCOPE“:

    Code:
    .
    {
    "data": {
    "homeappliances": [
    {
    "name": "Geschirrspüler",
    "brand": "SIEMENS",
    "vib": "SX578S06TE",
    "connected": true,
    "type": "Dishwasher",
    "enumber": "SX578S06TE/01",
    "haId": "SIEMENS-SX578S06TE-xxxxxxxxxxxx"
    }
    ]
    }
    }


    Zusammengefasst:
    1. wie müsste so eine Redirect_URL die ich bei Home-Connect hinterlegen muss aussehen damit Edomi damit umgehen kann ?
    2. kann man den Authentifizierungsprozess ohne eine HTML-Seite sondern „nur“ via LBS umsetzen ?


    DANKE vorab
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    #2
    Generell verlangen derartige APIs den Aufruf per Browser (meistens jedenfalls), da werden dann JS-Scripte ausgeführt etc. und schließlich eine entsprechende URL aufgerufen (Redirect). Inwieweit sich das in Deinem Fall auswirkt, kann ich nicht sagen - jedenfalls ist offenbar eine Redirect-URL notwendig (die dann von Home-Connect aufgerufen wird)? Das würde dann bedeuten, dass Du "irgendwo" eine entsprechende PHP-Datei ablegen musst, die dann per Redirect aufgerufen wird und die (JSON?)-Daten entsprechend verarbeitet.
    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

    Kommentar


      #3
      Oje oje, dachte ich es mir dass es nicht einfach sein wird :-(
      Danke Christian …

      Falls jemand eine Idee hat wie man das umsetzen kann, mit Beispielen, dann danke vorab :-) !!
      Ohne, kommt man auf die Daten von Home-Connect nicht heran :-(
      Danke und LG, Dariusz
      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

      Kommentar


        #4
        gaert Hallo Christian,

        Wenn ich nun folgende URL eingebe/aufrufe:

        https://developer.home-connect.com/security/oauth/authorize?response_type=code&redirect_uri=http://10.0.100.150/hc.php&client_id=xxxxxxxxxx&scope=IdentifyAppliance&state=homeconnect_auth

        dann erhalte ich folgende Antwort im Adressfeld, den CODE - soweit scheint das OK zu sein:

        http://10.0.100.150/hc.php?code=yyyyyyyyyy&grant_type=authorization_code&state=homeconnec t_a uth

        Wenn ich als Nächstes folgende URL eingebe/aufrufe um den Access-TOKEN zu erhalten:

        https://developer.home-connect.com/security/oauth/token?client_id=xxxxxxxxxx&redirect_uri=http://10.0.100.150/hc.php&grant_type=authorization_code&code=yyyyyyyyyy&state=homeconnect_auth

        Erhalte ich nun folgende Antwort/Fehlermeldung: ... wäre zu schön, wenn es keine „Probleme“ geben würde ...

        {"error":{"key":"405","description":"HTTP method not allowed, supported methods: POST"}}

        Was übersehe ich, besser, was weiß ich noch immer nicht :-(

        POST sagt mir nur, dass man die Daten von einer „Webseite“ ausliest, bei GET sind die Daten in der Adressleiste zu sehen ...



        Wäre schön, wenn du mir hier helfen könntest


        Hier noch ein paar Angaben von Home-Connect ...

        Header
        • Content-Type: application/x-www-form-urlencoded

        POST Parameters
        • client_id [mandatory]: generated API key (see My Applications)
        • redirect_uri [mandatory]: registered in developer portal (see My Applications)
        • grant_type [mandatory]: must be authorization_code
        • code [mandatory]: returned by authorization call
        • state [optional]: can be used to store client state information


        Response (200)

        The request will return the access token and a refresh token in the HTTP body.
        Zuletzt geändert von coliflower; 19.11.2016, 18:52.
        Danke und LG, Dariusz
        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

        Kommentar


          #5
          Ich habe leider keine Zeit Nur soviel: Die POST-Methode funktioniert auch mit PHP (Google) - hierbei werden die Daten nicht in der URL verpackt, sondern in den http-Header. Wenn der Empfänger nur POST erwartet, dann musst Du auch POST verwenden - die GET-Parameter werden offenbar nicht ausgewertet (ich bevorzuge eigentlich immer GET als Fallback in diversen Anwendungen).
          EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

          Kommentar


            #6
            Danke Christian !
            Danke und LG, Dariusz
            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

            Kommentar


              #7
              Hier - von stackoverflow "ausgeliehen":

              PHP-Code:
              $url 'http://server.com/path';
              $data = array('key1' => 'value1''key2' => 'value2');

              // use key 'http' even if you send the request to https://...
              $options = array(
                  
              'http' => array(
                      
              'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                      
              'method'  => 'POST',
                      
              'content' => http_build_query($data)
                  )
              );
              $context  stream_context_create($options);
              $result file_get_contents($urlfalse$context);
              if (
              $result === FALSE) { /* Handle error */ }

              var_dump($result); 
              EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

              Kommentar


                #8
                Danke, meinst du den hier ;-) ?
                http://stackoverflow.com/questions/5...quest-with-php
                Danke und LG, Dariusz
                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                Kommentar


                  #9
                  gaert Danke Christian, das scheint zu funktionieren, ich erhalte die CLIENT-Daten (access_token, refresh_token, …)

                  Wenn ich jetzt aber aus dem Vorherigen URL (siehe unten) automatisch z.B. „code“ und „grant_type“ in eine Variable speichern möchte um diese Werte dann an die POST-Methode zu übergeben - irgendwie schaffe ich das so nicht:

                  Die URL ist:
                  http://10.0.100.150/hc.php?code=yyyyyyyyyy&grant_type=authorization_code&state=homeconnect_auth

                  PHP-Code:
                  $grant_type $_GET['grant_type'];
                  $codele        $_GET['code']; 

                  Kein Erfolg
                  Zuletzt geändert von coliflower; 20.11.2016, 09:46. Grund: &amp aus dem URL gelöscht
                  Danke und LG, Dariusz
                  GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                  Kommentar


                    #10
                    Das & gehört irgendwie nicht in die URL... Das &-Zeichen trennt die einzelnen GET-Parameter
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      #11
                      Richtig, das &amp ist falsch, habe es ausgebessert um die Verwirrung zu reduzieren …

                      Die Trennung durch das &-Zeichen habe ich gelesen, trotzdem bekomme ich die Variablen nicht gefüllt wenn ich im LBS folgenden Eintrag mache:

                      $grant_type = $_GET['grant_type'];
                      $codele = $_GET['code'];


                      Wobei ich vermute, dass mein Fehler woanders liegt … Ich frage mich woher soll der LBS wissen in welchem Browserfenster er die zwei (drei) GET-Parameter abfragen soll wenn ich folgenden String im Browser (Authorization) eingebe (im LBS bin ich noch nicht soweit):

                      https://developer.home-connect.com/security/oauth/authorize?response_type=code&redirect_uri=http://10.0.100.150/hc.php&client_id=xxxxxxxxxx&scope=IdentifyAppliance&state=homeconnect_auth

                      Und diese Antwort im Browser-URL (Code) erhalte:

                      http://10.0.100.150/hc.php?code=yyyyyyyyyy&grant_type=authorization_code&state=homeconnect_auth

                      Nun würde ich gerne die Werte folgender Parameter „code“ und „grant_type“ in LBS-Variablen speichern um diese in untern URL (Token) zu verwenden >> dieser wird mit der von dir oben „ausgeborgten“ Code-Abschnitt im LBS umgesetzt und liefert den TOKEN :-)

                      https://developer.home-connect.com/security/oauth/token?client_id=xxxxxxxxxx&redirect_uri=http://10.0.100.150/hc.php&grant_type=authorization_code&code=yyyyyyyyyy&state=homeconnect_auth


                      Wie schon erwähnt, „manuell“ funktioniert das auch schon - danke für die Unterstützung - ich würde es gerne / aus LBS-Sicht muss ich das automatisieren.


                      Ist sicher mein Fehler warum ich die GET-Parameter nicht abrufen kann … Könnte sein dass ich

                      1. den ersten Link aus dem LBS heraus senden muss (GET)

                      2. den zweiten Link im LBS „einlesen“ muss um die GET-Parameter abfragen zu können

                      Den dritten Link im LBS via POST kann ich schon verschicken - dane
                      Danke und LG, Dariusz
                      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                      Kommentar


                        #12
                        ja natürlich. Dein PHP Skript kennt nichts, was irgendwo im Browser passiert ist.

                        Kommentar


                          #13
                          OK, DANKE Andrè !

                          Hast du ein paar Code-Zeilen um den ersten Link aus dem LBS zu starten und danach aus den Redirecturl die zwei Werte der GET-Parameter in eine Variable zu speichern ?

                          Nochmals danke vorab !!
                          Danke und LG, Dariusz
                          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                          Kommentar


                            #14
                            Wenn ich im LBS folgenden Code für den ersten URL einbaue:

                            PHP-Code:
                            .
                                
                            $url_authorize    'https://developer.home-connect.com/security/oauth/authorize?response_type=code&redirect_uri='.$E[12]['value'].'&client_id='.$E[1]['value'].'&scope=IdentifyAppliance%20Dishwasher&state=homeconnect_auth';
                                
                            $ctxx            stream_context_create(array('http' => array('timeout' => 3'method' => 'GET')));
                                
                            $authorize        file_get_contents($url_authorizefalse$ctxx);     // komplette Antwort abwarten
                                
                            LB_LBSID_Debug($id'Home-Connect | '.$haid.' | '.$E[8]['value'].' | $authorize = '.$authorize6$E[9]['value'], false); 


                            Dann erhalte ich im LOG folgende Antwort:

                            Code:
                            $authorize = <!DOCTYPE html>[LF]<html>[LF] <head>[LF] echo "edomi ..."<br/>[LF] </head>[LF] <body>[LF] [LF]PHP? <?php echo 'PHP? Funktioniert! Version ist:', phpversion(), "\n"; ?>[LF] [LF]<?php[LF]echo 'EDOMI';[LF]echo phpinfo(); [LF]echo 'GRANT_TYPE = '.$_GET['grant_type'], "/n";[LF]echo 'CODE = '.$_GET['code'];[LF]?>[LF][LF] </body>[LF] </html>

                            Es scheint al ob meine hc.php am Webserver nicht das tut was sie soll, oder ?
                            Leider habe ich noch nie eine HTML-Seite gebaut :-(

                            HTML-Code:
                            <!DOCTYPE html>
                            <html>
                                <head>
                                    edomi ...<br/>
                                </head>
                             <body>
                            
                            PHP? <?php echo 'PHP? Funktioniert! Version ist:', phpversion(), "\n"; ?>
                            
                            <?php
                            echo 'EDOMI';
                            echo phpinfo(); 
                            echo 'GRANT_TYPE = '.$_GET['grant_type'], "/n";
                            echo 'CODE = '.$_GET['code'];
                            ?>
                            
                             </body>
                             </html>
                            Danke und LG, Dariusz
                            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                            Kommentar


                              #15
                              Richtig - siehe #2 Du musst eine PHP-Seite basteln - unabhängig vom LBS...

                              Den HTML-Kram kannst Du Dir im Prinzip schenken - einfach PHP-Code zwischen <? und ?> genügt.
                              EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                              Kommentar

                              Lädt...
                              X