Ankündigung

Einklappen
Keine Ankündigung bisher.

Home-Connect | 2nd

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

    Zitat von coliflower Beitrag anzeigen
    DANKE für deine Erklärung :-)
    Ich werde es nach dem WE probieren - jetzt muss ich für meine beiden Jungs (5 und 7) die Geburtstagsparty vorbereiten ...

    Nochmals Danke !
    Hallo André,

    ich habe mal meinen redirect_uri Skript unten um folgende Codezeilen ergänzt, leider wird der EXEC Teil nicht getriggert ...
    PHP-Code:
    //
    if (!is_link('/usr/local/edomi/www/visu/hc_code.php'))
    {
        
    symlink('/usr/local/edomi/www/data/liveproject/lbs/EXE19000070.php''/usr/local/edomi/www/visu/hc_code.php');



    redirect_uri script ...
    HTML-Code:
    <!DOCTYPE html>
    <html lang="de">
    <head>
    <title>HC-REDIRECT</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    </head>
    <body>
    <header>
    <h2>Home-Connect</h2>
    </header>
    
    <?php
    $state_sent = '9pfQGTQlhsr7v_3BcP7fQZWv64WsEOv8yDdrRvEWIjgLS9Oy_zHDdQmzKA71kY4f';
    $state_get = $_GET['state'];
    if (isset($state_sent) && ($state_sent == $_GET['state']))
    {
        if (isset($_GET['error']))
        {
            echo '<h1>Some ERROR occured, please check the description ...</h1>';
            if ($_GET['error'] === 'invalid_request')
            {
                $error                = $_GET['error'];
                $error_description    = $_GET['error_description'];
            }
            elseif ($_GET['error'] === 'unsupported_response_type')
            {
                $error                = $_GET['error'];
                $error_description    = $_GET['error_description'];
            }
            elseif ($_GET['error'] === 'unauthorized_client')
            {
                $error                = $_GET['error'];
                $error_description    = $_GET['error_description'];
            }
            elseif ($_GET['error'] === 'invalid_scope')
            {
                $error                = $_GET['error'];
                $error_description    = $_GET['error_description'];
            }
            elseif ($_GET['error'] === 'access_denied')
            {
                $error                = $_GET['error'];
                $error_description    = $_GET['error_description'];
            }
            else
            {
                echo 'some not documented error occured'."<br />\n";
                $error = $_GET['error'];
                $error_description = $_GET['error_description'];
            }
            echo 'error              = '.$error."<br />\n";
            echo 'error_description = '.$error_description."<br />\n";
            echo 'state_sent          = '.$state_sent."<br />\n";
            echo 'state_get          = '.$state_get;
            echo 'state              = OK';
        }
        else
        {
            $code        = $_GET['code'];
            $grant_type    = $_GET['grant_type'];
            $remote        = $_SERVER['REMOTE_ADDR'];
            $name        = $_SERVER['SERVER_NAME'];
            $self        = $_SERVER['PHP_SELF'];
            $host        = $_SERVER['HTTP_HOST'];
            $json        = '/usr/local/edomi/www/visu/hc_code.json';
            $tokens        = array('code' => $code);
    
            echo '<h1>state_SENT is equil state_GET == OK</h1>';
            echo '<h2>You can close the tab and you need to trigger your LBS within 10 minutes</h2>';
            echo 'state_SENT == '.$state_sent."<br />\n";
            echo 'state_GET == '.$state_get."<br />\n";
            echo 'code == '.$code."<br />\n";
            echo 'grant_type == '.$grant_type."<br />\n";
            echo 'remote server == '.$remote."<br />\n";
            echo 'edomi server name == '.$name."<br />\n";
            echo 'edomi server host == '.$host."<br />\n";
            echo 'edomi server self == '.$self."<br />\n";
    
            if (file_exists($json)) unlink($json);
            file_put_contents($json, json_encode($tokens));
    
            unset($code, $grant_type, $remote, $name, $self, $host, $json, $tokens);
    
            if (!is_link('/usr/local/edomi/www/visu/hc_code.php'))
            {
                symlink('/usr/local/edomi/www/data/liveproject/lbs/EXE19000070.php', '/usr/local/edomi/www/visu/hc_code.php');
            }
        }
    }
    else
    {
        echo '<h1>state_SENT is not equil state_GET == NOK</h1>';
        echo '<h2>state_SENT need to be equil to state_GET otherwise possibility of cross-site request forgery</h2>';
        echo 'state_SENT == '.$state_sent."<br />\n";
        echo 'state_GET == '.$state_get."<br />\n";
    }
    ?>
    
    <footer>
    <p>&copy; coliflower</p>
    </footer>
    </body>
    </html>

    Hier noch der Teil aus dem EXEC Teil des LBSen ...
    Dass der Teil nicht getriggert wird gehe ich davon aus, weil a.) keine Einträge in das 70er Log geschrieben werden und b.) weil am Ende die JSON mit den Tokens nicht geschrieben wird.
    PHP-Code:

    if (isset($_GET['code']))
    {
        
    LB_LBSID_DEBUG($id$remark.'EXEC (symlink) ............... script triggered'6$log$llfalse);

        unset(
    $code$trigger);
        
    $code $_GET['code'];
        
    logic_setVar($id1$code);
        
    LB_LBSID_DEBUG($id$remark.'EXEC ($code) ................. '.serialize($code), 6$log$llfalse);

        
    $config['code']    = $code;
        
    LB_LBSID_DEBUG($id$remark.'EXEC ($config) ............... '.serialize($config), 6$log$llfalse);

        
    $client = new HomeConnect\Clients\HcClient($config);
        
    LB_LBSID_DEBUG($id$remark.'EXEC ($client) ............... '.serialize($client), 6$log$llfalse);

        
    $tokens    $client->getAccessTokenFromAuthorizationCode($code);
        
    LB_LBSID_DEBUG($id$remark.'EXEC ($tokens) ............... '.serialize($tokens), 6$log$llfalse);

        
    file_put_contents($pfad_hc_tokens_jsonjson_encode($tokens));
        
    LB_LBSID_DEBUG($id$remark.'EXEC ($tokens) ............... new tokens were stored in '.$pfad_hc_tokens_json6$log$llfalse);
        
    LB_LBSID_DEBUG($id$remark.'EXEC (SSE) ................... now you can start SSE (trigger = 1)'6$log$llfalse);

        unset(
    $tokens$code$config$client);

        die();
    }

    if (
    $trigger 1) ...
    elseif (
    trigger 9) ...
    else ... 
    Bildschirmfoto 2019-10-06 um 14.33.33.png
    Für dein Unterstützung wäre ich dir sehr dankbar :-)
    Danke und LG, Dariusz
    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

    Kommentar


      jonofe Hallo André,

      hättest du für mich noch eine Idee, warm die redirec_uri (Skript) den EXEC Teil des LBS nicht triggert ?
      Danke und LG, Dariusz
      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

      Kommentar


        Wie sieht denn die Redirect-URI aus?
        Und auf welches Skript verlinkt diese dann auf dem EDOMI Server?

        Kommentar


          ... auf die hc_code.php (oben das in HTML eingebetete PHP-Skript)
          Code:
          https://api.home-connect.com/security/oauth/authorize?client_id={KEY}=IdentifyAppliance+MonitorAppliance+Dishwasher+Washer+WasherDryer+Dryer+CoffeeMaker+Hood+FridgeFreezer-Settings+CleaningRobot-Settings+Hob-Settings+Oven-Settings&state=9pfQGTQlhsr7v_3BcP7fQZWv64WsEOv8yDdrRvEWIjgLS9Oy_zHDdQmzKA71kY4f&[COLOR=#FF0000]redirect_uri=http%3A%2F%2F10.0.10.3%2Fvisu%2F[B]hc_code.php[/B][/COLOR]&response_type=code
          Danke und LG, Dariusz
          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

          Kommentar


            Das funktioniert nicht. Lege einfach einen symbolischen Link hc.php an, welcher auf dein EXEC Skript verweist. Und bei HC trägst du dann die URL zu dem hc.php ein.
            Und der Code der mit if (isset($_GET['code'])) beginnt, muss dann am Anfang des EXE Bereichs stehen.

            Kommentar


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

              Kommentar


                Zitat von jonofe Beitrag anzeigen
                Und der Code der mit if (isset($_GET['code'])) beginnt, muss dann am Anfang des EXE Bereichs stehen.
                Nur um sicher zu sein, d.h. vor "require..." ?
                Danke und LG, Dariusz
                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                Kommentar


                  Ja, das sollte ganz am Anfang stehen .

                  Kommentar


                    OK, entweder übersehe ich etwas oder ich bin zu blöd ... der EXEC Teil wird von der hc_code.php nicht getriggert (kein Eintrag im Log, geschweige die Tokens werden gespeichert) ...

                    die hc_code.php sieht folgendermaßen aus:
                    PHP-Code:
                    <?php
                    if (! is_link('/usr/local/edomi/www/visu/hc_code.php'))
                    {
                        
                    symlink('/usr/local/edomi/www/data/liveproject/lbs/EXE19000070.php''/usr/local/edomi/www/visu/hc_code.php');
                    }
                    ?>

                    Und der LBS selbst (EXEC Bereich) wurde folgendermaßen geändert ...
                    PHP-Code:
                    ###[EXEC]###

                    <?
                    ///    Dieser Code wird ausgeführt wenn HC (redirect_uri) das EXEC Skript aufruft (symlink) ...
                    ///
                    if (isset($_GET['code']))
                    {
                        LB_LBSID_DEBUG($id, $remark.'EXEC (symlink) ............... script triggered', 6, $log, $ll, false);
                    ///
                        unset($code, $trigger);
                        $code = $_GET['code'];
                        logic_setVar($id, 1, $code);
                        LB_LBSID_DEBUG($id, $remark.'EXEC ($code) ................. '.serialize($code),   6, $log, $ll, false);
                    ///
                        $config['code']    = $code;                                                                                    //    brauche ich es hier schon überhaupt (übergabe an die KLASSE)?
                        LB_LBSID_DEBUG($id, $remark.'EXEC ($config) ............... '.serialize($config), 6, $log, $ll, false);
                    ///
                        $client = new HomeConnect\Clients\HcClient($config);
                        LB_LBSID_DEBUG($id, $remark.'EXEC ($client) ............... '.serialize($client), 6, $log, $ll, false);
                    ///
                        $tokens    = $client->getAccessTokenFromAuthorizationCode($code);                                                //    wenn $code in $config, bruache ich es hier in () auch ?
                        LB_LBSID_DEBUG($id, $remark.'EXEC ($tokens) ............... '.serialize($tokens), 6, $log, $ll, false);
                    ///
                        file_put_contents($pfad_hc_tokens_json, json_encode($tokens));
                        LB_LBSID_DEBUG($id, $remark.'EXEC ($tokens) ............... new tokens were stored in '.$pfad_hc_tokens_json, 6, $log, $ll, false);
                        LB_LBSID_DEBUG($id, $remark.'EXEC (SSE) ................... now you can start SSE (trigger = 1)'            , 6, $log, $ll, false);
                    ///
                        unset($tokens, $code, $config, $client);
                    ///
                        die();
                    }
                    ///
                    ///
                    ///    Dieser Code wird ausgeführt wenn der LBS gettriggert wird ...
                    ///
                    require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                    require_once(dirname(__FILE__).'/../../../../main/include/php/HOME-CONNECT-API-PHP/scr/HomeConnect/autoload.php');
                    set_time_limit(0);
                    sql_connect();

                    if ($E=logic_getInputs($id))

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

                    Kommentar


                      Hallo André,

                      hättest du für mich noch eine Anregung was ich prüfen könnte ?

                      Ich kann in meiner Umsetzung (nach Anleitung) keinen Fehler finden, leider scheint die EXE1900070.php nicht getriggert werden - der CODE wird von HC an die redirec_uri (hc_code.php) zurückgegeben, die hc_code.php hat den oben erwähnten "Inhalt" aber es werden aus der EXE1900070.php keine Logeinträge generiert, auch die hc_tokens.json wird nicht geschrieben ... daraus schließe ich, dass die EXE nicht getriggert wird.

                      Nochmals danke vorab für ein paar Ideen :-)
                      Danke und LG, Dariusz
                      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                      Kommentar


                        Wie
                        Zitat von jonofe Beitrag anzeigen
                        Lege einfach einen symbolischen Link hc.php an, welcher auf dein EXEC Skript verweist. Und bei HC trägst du dann die URL zu dem hc.php ein.

                        Wie oben geschrieben. Du brauchst keine hc_code.php. Sondern nur einen sybolischen Link, der auf dein EXEC Skript zeit. Im EXEC Skript machst du den Rest. Der symlink() Befehl stellt am Anfang des LBS sicher, dass dieser symbolische Link existiert.

                        Beispiel:

                        hc.php ist ein symbolischer Link im Verzeichnis /usr/local/edomi/www/admin/include/php/homeconnect/ und verweisst auf dein EXEC Skript.

                        Code:
                        [root@edomi-development homeconnect]# ls -la /usr/local/edomi/www/admin/include/php/homeconnect/hc.php
                        lrwxrwxrwx 1 root root 57 29. Mär 2019  [COLOR=#FF0000]hc.php -> /usr/local/edomi/www/data/liveproject/lbs/EXE19001570.php[/COLOR]
                        Im Reverseproxy leitest du

                        Code:
                        http://<deine DynDNS Domain>/homeconnect
                        auf

                        Code:
                        http://<deine EDOMI-IP>/admin/include/php/homeconnect
                        um.

                        Im HomeConnect Portal ist dein RedirectURI

                        Code:
                        http://<deine DynDNS Domain>/homeconnect/hc.php
                        Damit wird von HomeConnect dein EXEC Skript aufgerufen.

                        Kommentar


                          Danke André für deine Unterstützung und deine Geduld :-)

                          Zitat von jonofe Beitrag anzeigen
                          Lege einfach einen symbolischen Link hc.php an, welcher auf dein EXEC Skript verweist. Und bei HC trägst du dann die URL zu dem hc.php ein.
                          OK, hier habe ich verstanden dass ich in der hc.php den symbolischen link reinschreiben muss ... sorry.


                          Zitat von jonofe Beitrag anzeigen
                          Der symlink() Befehl stellt am Anfang des LBS sicher, dass dieser symbolische Link existiert
                          Das habe ich jetzt gemacht ...

                          Hier wird aber nicht wie bei dir der folgende Link ausgegeben ... /usr/local/edomi/www/data/liveproject/lbs/EXE19000070.php
                          Code:
                          [root@edomi ~]# ls -la /usr/local/edomi/www/visu/hc_code.php
                          -rw-r--r-- 1 root root 0 11. Okt 18:38 [COLOR=#0000FF]/usr/local/edomi/www/visu/hc_code.php[/COLOR]


                          Im HomeConnect Portal ist dein RedirectURI
                          Code:
                          http://&lt;deine DynDNS Domain&gt;/homeconnect/hc.php
                          Das funktioniert ... der CODE wird von HC übergeben ...
                          Code:
                          http://10.0.10.3/visu/hc_code.php


                          Damit wird von HomeConnect dein EXEC Skript aufgerufen.
                          Das funktioniert leider nicht :-(
                          Der erste Logeintrag wird nicht ins Log geschrieben ...
                          Die hc_tokens.php wird nicht erstellt ...

                          ... hier der Zusatzcode am Anfang des EXEC Teils ...
                          PHP-Code:
                          ###[EXEC]###

                          &lt;?
                          ///    SYMLINK wird erstellt wenn nicht verfügbar ...
                          if (!is_link('/usr/local/edomi/www/visu/hc_code.php')) symlink('/usr/local/edomi/www/data/liveproject/lbs/EXE19000070.php''/usr/local/edomi/www/visu/hc_code.php');

                          ///    Dieser Code wird ausgeführt wenn HC (redirect_uri) das EXEC Skript aufruft (symlink) ...

                          if (isset($_GET['code']))
                          {
                              
                          LB_LBSID_DEBUG($id$remark.'EXEC (symlink) ............... script triggered',      6$log$llfalse);

                              unset(
                          $code$trigger);
                              
                          $code $_GET['code'];
                              
                          logic_setVar($id1$code);
                              
                          LB_LBSID_DEBUG($id$remark.'EXEC ($code) ................. '.serialize($code),   6$log$llfalse);

                              
                          $config['code']    = $code;
                              
                          LB_LBSID_DEBUG($id$remark.'EXEC ($config) ............... '.serialize($config), 6$log$llfalse);

                              
                          $client = new HomeConnect\Clients\HcClient($config);
                              
                          LB_LBSID_DEBUG($id$remark.'EXEC ($client) ............... '.serialize($client), 6$log$llfalse);

                              
                          $tokens    $client-&gt;getAccessTokenFromAuthorizationCode($code);
                              
                          LB_LBSID_DEBUG($id$remark.'EXEC ($tokens) ............... '.serialize($tokens), 6$log$llfalse);

                              
                          $pfad_hc_tokens_json    '/usr/local/edomi/www/visu/hc_tokens.json';
                              
                          file_put_contents($pfad_hc_tokens_jsonjson_encode($tokens));
                              
                          LB_LBSID_DEBUG($id$remark.'EXEC ($tokens) ............... new tokens were stored in '.$pfad_hc_tokens_json6$log$llfalse);
                              
                          LB_LBSID_DEBUG($id$remark.'EXEC (SSE) ................... now you can start SSE (trigger = 1)'            6$log$llfalse);
                              unset(
                          $tokens$code$config$client);
                              die();


                          Vielleicht liegt das aber daran ...
                          Zitat von jonofe Beitrag anzeigen

                          Im Reverseproxy leitest du
                          http://<deine DynDNS Domain>/homeconnect

                          auf
                          http://<deine EDOMI-IP>/admin/include/php/homeconnect
                          um.
                          Reverseproxy ist für mich nur ein Begriff, auch habe ich keinen Proxy bei mir zuhause ...
                          Ist das eine Voraussetzung für diese Symlink-Lösung oder interpretiere ich auch das wieder falsch :-( ?

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

                          Kommentar


                            Zitat von coliflower Beitrag anzeigen
                            OK, hier habe ich verstanden dass ich in der hc.php den symbolischen link reinschreiben muss ... sorry.
                            Nein. Ich hatte ja extra verlinkt was ein symbolischer Link ist. Es gibt nur eine einzige Datei, welche irgendeinen Code enthält und dass ist der LBS (EXEC Skript).
                            Dein /usr/local/edomi/www/visu/hc_code.php muss ein symbolischer Link sein (DAS IST KEINE DATEI). Du solltest dir mal anschauen, was in Linux ein symbolischer Link ist, ansonsten wirst du es nicht hinbekommen.

                            Ohne Reverse Proxy bedeutet du hast den EDOMI Server offen im Internet? Hmm, okay, kann man machen, muss man aber nicht.



                            Kommentar


                              Zitat von jonofe Beitrag anzeigen
                              Ich hatte ja extra verlinkt was ein symbolischer Link ist
                              Ich habe es eh versucht zu verstehen was Google hergibt, ich gebe es zu, ich habe es nicht verstanden ... werde mal weiter lesen bis es KLICK macht :-)

                              Zitat von jonofe Beitrag anzeigen
                              Du solltest dir mal anschauen, was in Linux ein symbolischer Link ist, ansonsten wirst du es nicht hinbekommen.
                              Werde ich weiter lesen ... nur ... wenn ich den Symlink am Anfang (nach Anleitung) des EXEC Teils erstelle, was mache ich dann noch falsch bzw. verstehe ich zum jetzigen Zeitpunkt noch immer nicht ?

                              Zitat von jonofe Beitrag anzeigen
                              Ohne Reverse Proxy bedeutet du hast den EDOMI Server offen im Internet?
                              Ich würde NEIN sagen, mein komplettes LAN ist hinter einer FW (pfSense) und Edomit + KNX in eigenem VLAN ... Zugriff nur über VPN.
                              Danke und LG, Dariusz
                              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                              Kommentar




                                Zitat von coliflower Beitrag anzeigen
                                Ich würde NEIN sagen, mein komplettes LAN ist hinter einer FW (pfSense) und Edomit + KNX in eigenem VLAN ... Zugriff nur über VPN.

                                Wie kann denn dann Homeconnect die Callback URI aufrufen?

                                Kommentar

                                Lädt...
                                X