Ankündigung

Einklappen
Keine Ankündigung bisher.

Wert in einer Homepage setzen

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

    Wert in einer Homepage setzen

    Hallo miteinander!

    Ich weiß nicht, wie ich es richtig formulieren soll, deshalb kurz mein erklärtes Ziel: Meine Wärmepumpe bietet eine abrufbare Oberfläche an, in der ich per Webbrowser diverse Einstellungen vornehmen kann. Nun möchte ich genau einen Wert auf dieser Seite per EDOMI verändern, da die Logik in der Heizung zu stupide ist und zwar das Umschalten auf den Sommerbetrieb (die KNX-Schnittstelle bietet hier leider keine Lösung bzw. Option an)

    In der Oberfläche sieht es so aus:
    Anmerkung 2019-05-10 183729.jpg
    bzw. wenn ich es verändern will so:
    Anmerkung 2019-05-10 183717.jpg
    Der Quelltext der Seite dazu sieht folgendermaßen aus:
    Anmerkung 2019-05-10 184009.jpg (gelb markiert der Wert, der verändert werden soll AUS --> EIN)

    Nun die Frage, wie ich das am besten anstelle bzw. wie ich das in einen LBS integrieren kann.

    Herzlichen Dank für Rückmeldungen bzw. Vorschläge!
    Grüße Tobi


    #2
    Du kannst versuchen mittels CURL und GET /oder POST die Daten aus dem Dropdown (id, name, value) an den Server zu senden. Vorher natürlich mit CURL authentifizieren (einloggen).

    Kommentar


      #3
      guck doch mal im Chrome (mein Favorit) oder so im Developer Mode (F12) unter Network, was versendet wird, wenn Du die Aktion auslöst ...

      Kommentar


        #4
        EugenDo: Cool das kannte ich noch nicht

        Kommentar


          #5
          Zitat von Roland81 Beitrag anzeigen
          Cool das kannte ich noch nicht

          Freut mich, wenn das schon die Lösung deines Problems ist

          Kommentar


            #6
            Zitat von vento66 Beitrag anzeigen
            Du kannst versuchen mittels CURL und GET /oder POST die Daten aus dem Dropdown (id, name, value) an den Server zu senden. Vorher natürlich mit CURL authentifizieren (einloggen).
            Habe mit dem DeveloperMode den Befehl gefunden der scheinbar den Wert setzt.

            Ich habe nun mehrere Möglichkeiten wie dich den Befehl kopieren kann. Hier die, die mir als sinnvoll bzw. zielführend erscheinen:
            • Adresse
              Code:
              http://192.168.10.25/save.php
            • POST-Daten
              Code:
              data=[{"name":"val103","value":"1"}]
            • als cURL-Adresse
              Code:
              curl "http://192.168.10.25/save.php" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0" -H "Accept: text/plain, */*; q=0.01" -H "Accept-Language: de,en-US;q=0.7,en;q=0.3" --compressed -H "Referer: http://192.168.10.25/?s=4,0,2" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Requested-With: XMLHttpRequest" -H "DNT: 1" -H "Connection: keep-alive" -H "Cookie: PHPSESSID=a9aeb0d3cfdf79c6bc11e7a8fa3a4767" --data "data="%"5B"%"7B"%"22name"%"22"%"3A"%"22val103"%"22"%"2C"%"22value"%"22"%"3A"%"221"%"22"%"7D"%"5D"
            Nun natürlich die nächste Laienfrage, wie ich aus diesen Daten einen Befehl basteln kann, der mir den Wert verändert...

            Übrigens EugenDo, der DevelperMode ist echt ein starkes Werkzeug, danke für die Info!
            Grüße Tobi

            Kommentar


              #7
              Schau dir mal den 19000036 an, da mache ich sowas.

              $data = '{"psk":"'.$pass.'"}';
              $url .= "$WIFI_id";
              $headers = array(
              'Accept: application/json',
              'Content-Type: application/json',
              'X-RESTD-SESSION:close',
              'Authorization: Basic '.$auth_token
              );
              $ch = curl_init();
              curl_setopt($ch, CURLOPT_URL, $url);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
              curl_setopt($ch, CURLOPT_VERBOSE, 1);
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
              curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
              curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
              curl_setopt($ch, CURLOPT_FAILONERROR, true);
              curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
              $result = curl_exec($ch);
              $ch_error = curl_error($ch);
              $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
              curl_close($ch);
              if ($ch_error) {
              LB_LBSID_logging($id, "error $ch_error" ,8);
              } else {
              if($result && $http_status == 200){
              $json = (json_decode($result,true));
              LB_LBSID_logging($id, "json" ,8,$json);
              logic_setOutput($id,1,$json['psk']);
              logic_setOutput($id,2,$E[2]['value']);

              Kommentar


                #8
                irgendwo hakt es noch... bzw. ich versteh es noch nicht.

                hier mein Test-LBS
                PHP-Code:
                ###[DEF]###
                [name        =    Test]
                [titel        =     Test]

                [e#1        trigger    = EIN/AUS]
                [e#2        important =    IP]




                ###[/DEF]###

                ###[HELP]###

                ###[/HELP]###
                 
                 ###[LBS]###
                <?
                 function LB_LBSID($id) {
                    
                     if ($E=getLogicEingangDataAll($id)) {
                        
                         if (getLogicElementStatus($id)==0) {
                            
                             if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                                 logic_setOutput($id,1,0);
                                 logic_setState($id,1);
                                 logic_callExec(LBSID,$id);
                             }
                         }
                     }
                 }
                ?>
                ###[/LBS]###

                ###[EXEC]###

                <?
                require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                sql_connect();

                //-------------------------------------------------------------------------------------

                $onoff = $E[1]['value'];
                $ip = $E[2]['value'];

                $url = "http://".$ip."/?s=4,0,2";
                $data = array(["name"="val103","value"=$onoff]);

                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                curl_close($ch);

                //-------------------------------------------------------------------------------------

                sql_disconnect();
                ?>

                ###[/EXEC]###
                Aber er funktioniert noch nicht...

                PS: Einloggen muss ich mich nicht, da die Seite ungeschützt ist.
                Grüße Tobi

                Kommentar


                  #9
                  Ähm vielleicht musst Du CURL auch ausführen?   $result = curl_exec($ch);  zumindest mit   curl_exec($ch);  mit der ersten Variante hast Du in $result die Rückgabe der Seite stehen.

                  Kommentar


                    #10
                    DATA ist aus meiner Sicht ein JSON-Object im Array ... siehe deine POST-Daten ... baue einfach einen String

                    Kommentar


                      #11
                      Du musst im EXEC Teil erstmal die Eingänge einlesen

                      PHP-Code:
                      $E logic_getInputs($id); 
                      Vorher kannst du $E nicht verwenden.

                      Ich kann mir kaum vorstellen, dass der LBS überhaupt ohne Einträge im Error Log startet.
                      Die solltest du dir mal anschauen und auch hier posten.

                      Kommentar


                        #12
                        vento66, EugenDo, jonofe

                        Danke für den Input, hab den Baustein angepasst und jetzt lässt er sich ohne Fehler in EDOMI hochladen.

                        Leider "schaltet" der LBS noch nicht in der Seite, sprich wenn ich eine "1" schicke bleibt weiterhin der Sommerbetrieb auf "AUS". Ich glaube ich habe noch irgendeinen Fehler im String...
                        PHP-Code:
                        ###[DEF]###
                        [name        =    Test]
                        [titel        =     Test]

                        [e#1        trigger    = EIN/AUS]
                        [e#2        important =    IP]
                        [e#3        OPTION    = LogLevel #init=4]

                        [v#200    = xx ]
                        [v#201    = 1900xxxx ]
                        [v#202    = xx ]
                        [v#203 = 0 ]


                        ###[/DEF]###

                        ###[HELP]###

                        ###[/HELP]###
                         
                         ###[LBS]###
                        <?
                         function LB_LBSID($id) {
                            
                             if ($E=getLogicEingangDataAll($id)) {
                                
                                 if (getLogicElementStatus($id)==0) {
                                    
                                     if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                                         logic_setOutput($id,1,0);
                                         logic_setState($id,1);
                                         logic_callExec(LBSID,$id);
                                     }
                                 }
                             }
                         }
                        ?>
                        ###[/LBS]###

                        ###[EXEC]###

                        <?
                        require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                        set_time_limit(15);

                        sql_connect();

                        // -------------------------------------------------------------------------------------------------------

                        function _log($msg, $priority=8)                                // CustomLog
                        {
                             global $id;
                             $E=logic_getInputs($id);
                             $logLevel = logic_getVar($id,203);
                             if (is_int($priority) && $priority<=$logLevel && $priority>0){
                                $logLevelNames = array(
                                 'none',
                                 'emerg',
                                 'alert',
                                 'crit',
                                 'err',
                                 'warning',
                                 'notice',
                                 'info',
                                 'debug'
                                );
                                $version = logic_getVar($id,200);
                                $lbsNo = logic_getVar($id,201);
                                $logName = logic_getVar($id,202);
                                strpos($_SERVER['SCRIPT_NAME'],$lbsNo) ? $scriptname='EXE'.$lbsNo : $scriptname = 'LBS'.$lbsNo;
                                writeToCustomLog("LBS".$lbsNo. " - ".$logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t".$msg);
                            }
                        }

                        //-------------------------------------------------------------------------------------
                        if ($E=logic_getInputs($id)) {
                         $ip = $E[2]['value'];
                         $onoff = $E[1]['value'];
                         logic_setVar($id,203,$E[3]['value']);
                         $url = "http://".$ip."/?s=4,0,2";
                         $data = '{"name":"val103","value":"'.$onoff.'"}';
                         
                         $ch = curl_init();
                         curl_setopt($ch, CURLOPT_URL, $url);
                         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                         curl_exec($ch);
                         curl_close($ch);
                         }

                        //-------------------------------------------------------------------------------------
                        logic_setState($id,0);
                        sql_disconnect();
                        ?>

                        ###[/EXEC]###
                        Grüße Tobi

                        Kommentar


                          #13
                          Zitat von JonDonSponky Beitrag anzeigen
                          $data = '{"name":"val103","value":"'.$onoff.'"}';
                          ich würde das so versuchen

                          Code:
                          $data = 'data=[{"name":"val103","value":"'.$onoff.'"}]';

                          Kommentar


                            #14
                            Wenn ich lese was du oben gepostest hast, sollte doch die URL auf save.php enden. Warum machst du den CURL Call auf ?s=4,0,2
                            Das war doch weiter oben nur ein Header. Außerdem wird doch oben beim CURL noch ein Session Cookie gesendet.
                            Kannst du denn in einer Shell mit o.g. CURL Aufruf den Status ändern?

                            Kommentar


                              #15
                              Zitat von jonofe Beitrag anzeigen
                              Wenn ich lese was du oben gepostest hast, sollte doch die URL auf save.php enden. Warum machst du den CURL Call auf ?s=4,0,2
                              Das war doch weiter oben nur ein Header. Außerdem wird doch oben beim CURL noch ein Session Cookie gesendet.
                              Kannst du denn in einer Shell mit o.g. CURL Aufruf den Status ändern?
                              Puh... ganz ein neuer Ansatz! Ich versteh leider bloß die Hälfte von dem, was du geschrieben hast. Aber wenn ich es richtig sehe, soll ich mit dem Befehl

                              Code:
                              curl "http://192.168.10.25/save.php" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0" -H "Accept: text/plain, */*; q=0.01" -H "Accept-Language: de,en-US;q=0.7,en;q=0.3" --compressed -H "Referer: http://192.168.10.25/?s=4,0,2" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Requested-With: XMLHttpRequest" -H "DNT: 1" -H "Connection: keep-alive" -H "Cookie: PHPSESSID=a9aeb0d3cfdf79c6bc11e7a8fa3a4767" --data "data="%"5B"%"7B"%"22name"%"22"%"3A"%"22val103"%"22"%"2C"%"22value"%"22"%"3A"%"221"%"22"%"7D"%"5D"
                              eine SHELL befüllen und ausführen, oder?

                              Den Call auf ?s=4,0,2 mach ich deswegen, weil dort dieser Ein/Aus-Button "liegt" und ja, du hast vermutlich recht, es wird eigentlich die save.php verändert... und das mit dem "Session Cookie" sagt mir jetzt nichts bzw. weiß ich damit nichts anzufangen.
                              Grüße Tobi

                              Kommentar

                              Lädt...
                              X