Ankündigung

Einklappen
Keine Ankündigung bisher.

Auslesen einer Homepage

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

    Auslesen einer Homepage

    Guten Abend,

    wage mich gerade an meinen ersten eigenen LBS, aber irgendwie fehlt mir doch noch das nötige KnowHow...

    Ich versuche in folgende Homepage den gelb markierten Bereich auszulesen:
    Unbenannt.JPG


    Habe dazu folgenden Code benutzt, der von diversen anderen Bausteinen genutzt wird:
    PHP-Code:
    ###[LBS]###
    <?
     function LB_LBSID($id) {

     if ($E=getLogicEingangDataAll($id)) {

     if (getLogicElementStatus($id)==0) {
     if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
     setLogicLinkAusgang($id,1,0);
     setLogicElementStatus($id,1);

     callLogicFunctionExec(LBSID,$id);
     }
     } else {
     //###
     }

     }

     }
     ?>
     ###[/LBS]###

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

     sql_connect();

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



    if ($E=getLogicEingangDataAll($id)) {
     $ip = $E[2]['value'];
     }


    $url1 = "http://".$ip.":3480/data_request?id=sdata";


    $ausgabe1 = file_get_contents("$url1");

    //PV-Leistung
    $regexp="wattscharge=?([0-9\-,?\???.]+)/s";
    preg_match($regexp,$ausgabe1,$data1);
    setLogicLinkAusgang($id,2,$data1[1]);




    setLogicElementStatus($id,0);

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

     sql_disconnect();
     ?>
     ###[/EXEC]###

    Wo steckt der Fehler? Leider kenn ich mich noch nicht so gut aus...
    Zuletzt geändert von JonDonSponky; 01.01.2018, 18:04.
    Grüße Tobi


    #2
    mit diesem Code mache ich es

    $_url = "http://www.uwz.at/at/de/gemeinde/vorarlberg/bregenz/kennelbach";

    $_buffer = implode('', file($_url));



    function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
    }

    $findMich1 = '<meta property="og:title" content="';
    $findMich2 = ': Kennelbach" />';

    $a= get_string_between($_buffer,$findMich1,$findMich2) ;

    writeToTraceLog(0,true,"Unwetter Art" . $a);
    setLogicLinkAusgang($id,1,$a);

    Kommentar


      #3
      Hast du mal den RegEx seperat getestet? Irgendwie sieht das für mich nicht richtig aus...
      Gruß
      Michael

      Kommentar


        #4
        Ich denke auch, dass es am RegExp liegt.

        Versuch mal das hier (ungetestet):


        PHP-Code:
        $regexp '/.*wattscharge="([0-9]+\.[0-9]*)".*/'

        Kommentar


          #5
          Zitat von jonofe Beitrag anzeigen
          Ich denke auch, dass es am RegExp liegt.

          Versuch mal das hier (ungetestet):


          PHP-Code:
          $regexp '/.*wattscharge="([0-9]+\.[0-9]*)".*/'
          jetzt kommt im Fehler-Log: Undefined offset: 1

          @gulp2k
          wie meinst du "separat testen"?
          Zuletzt geändert von JonDonSponky; 24.07.2017, 20:26.
          Grüße Tobi

          Kommentar


            #6
            Mach mal aus
            Code:
            $data1[1]
            ein
            Code:
            $data1[0]
            Arrays beginnen immer mit 0

            Kommentar


              #7
              Index 1 sollte richtig sein, da in 0 die gematchte Zeile steht und in 1 der eigentliche Substring der gematched hat.

              Kommentar


                #8
                brachte leider auch nichst... ich hab das aus dem LBS_19000161 abgeleitet, da ging es aber auch mit
                Code:
                $data1[1]
                los
                Grüße Tobi

                Kommentar


                  #9
                  preg_match() gibt 1/0/false zurück - dies würde ich mal auswerten Wenn nix gefunden wird, ist natürlich auch das Array leer - und somit gibt's kein $data1[1]...
                  EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                  Kommentar


                    #10
                    Zitat von JonDonSponky Beitrag anzeigen

                    @gulp2k
                    wie meinst du "separat testen"?
                    Ich meine such dir eine. online regex tester z.B. regex101.com und gib dort dein regex ein und deinen Seitenquellcode als Sample und schau ob er was findet.
                    Gruß
                    Michael

                    Kommentar


                      #11
                      Zitat von gulp2k Beitrag anzeigen

                      Ich meine such dir eine. online regex tester z.B. regex101.com und gib dort dein regex ein und deinen Seitenquellcode als Sample und schau ob er was findet.
                      okay... ich seh schon, es gibt noch viel zu tun, so einfach wie ich mir das dachte wird es wohl doch nicht
                      Grüße Tobi

                      Kommentar


                        #12
                        naja, regex kann tricky sein, da ist es besser erstmal sicher zugehen das der ausdruck funktioniert bevor man wild im LBS auf Fehlersuche geht
                        Gruß
                        Michael

                        Kommentar


                          #13
                          Habe mich mal an eine einfachere Suche ran gemacht sprich den Ladestrom der Batterie mit folgendem Code
                          PHP-Code:
                          //Ladestrom
                          $regexp='/(?<=wattscharge":\s.)\d+.\d+/';
                          preg_match($regexp,$ausgabe1,$data1);
                          setLogicLinkAusgang($id,4,$data1[1]); 
                          Hat jedenfalls auf der Testseite funktioniert, aber in Edomi komm immer noch der Fehler: Undefined offset: 1

                          @gaert: wie ist das zu verstehen:
                          preg_match() gibt 1/0/false zurück
                          Im 19000161er Baustein werden doch auch Werte ausgelesen und nicht nur 1/0/false...
                          Grüße Tobi

                          Kommentar


                            #14
                            Zitat von JonDonSponky Beitrag anzeigen
                            Habe mich mal an eine einfachere Suche ran gemacht sprich den Ladestrom der Batterie mit folgendem Code
                            PHP-Code:
                            //Ladestrom
                            $regexp='/(?<=wattscharge":\s.)\d+.\d+/';
                            preg_match($regexp,$ausgabe1,$data1);
                            setLogicLinkAusgang($id,4,$data1[1]); 
                            Hat jedenfalls auf der Testseite funktioniert, aber in Edomi komm immer noch der Fehler: Undefined offset: 1

                            @gaert: wie ist das zu verstehen:

                            Im 19000161er Baustein werden doch auch Werte ausgelesen und nicht nur 1/0/false...
                            Hast du den Regex echt getestet?
                            Wird bei mir sofort rot in der Website und passt auch überhaupt nicht auf deini Beispiel im ersten Post...

                            Versuch mal
                            HTML-Code:
                            wattscharge="(\d+.\d+)"
                            Was gaert mein ist das du die Rückgabe von preg_match auswerten kannst also z.B.
                            PHP-Code:
                            $ret=preg_match(...); 
                            Ich würde sowieso das ganze mal in eine php Datei direkt packen und auf der Kommandozeile ausführen, da bekommst du vermutlich eine Fehlermeldung.
                            Zuletzt geändert von gulp2k; 25.07.2017, 09:50.
                            Gruß
                            Michael

                            Kommentar


                              #15
                              Danke nochmal für eure Unterstützung und seit bitte nachsichtig, bin noch in den Anfängen der Programmierung (sowohl php, html, edomi, usw.)

                              Hier nochmal der komplette Code wenn ich die interne Homepage der Batterie anfrage (http://192.168.178.26:3480/data_request?id=sdata#):
                              Code:
                              { "full": 1, "version": "*1.5.622*", "model": "Sercomm NA900", "zwave_heal": 1, "temperature": "C", "serial_number": "30112898\n", "fwd1": "fwd2.mios.com", "fwd2": "fwd1.mios.com", "sections": [ { "name": "My Home", "id": 1 } ], "rooms": [ { "name": "Sonnenbatterie", "id": 1, "section": 1 } ], "scenes": [ ], "devices": [ { "name": "BHKW 1", "altid": "CHP-1", "id": 6, "category": 0, "subcategory": 0, "room": 1, "parent": 3, "watts": "0", "chppeakpower": "0" }, { "name": "Eigenverbrauchsrelais 1", "altid": "OwnConsumptionRelay-1", "id": 8, "category": 0, "subcategory": 0, "room": 1, "parent": 3, "automode": "1", "duration": "3", "threshold": "3000", "status": "0" }, { "name": "Gesamtverbauch 1", "altid": "TotalConsumption-1", "id": 7, "category": 0, "subcategory": 0, "room": 1, "parent": 3, "iscountercumulated": "0", "maxwattsl2": "175", "maxwattsl3": "380", "maxwattsl1": "203", "watts": "669.7", "wattsl1": "176.6", "wattsl2": "150.6", "wattsl3": "342.5" }, { "name": "Photovoltaik 1", "altid": "Photovoltaics-1", "id": 4, "category": 0, "subcategory": 0, "room": 1, "parent": 3, "maxfeedin": "50", "pvpeakpower": "9.35", "watts": "0.0" }, { "name": "Sonnenbatterie #123456", "altid": "", "id": 3, "category": 0, "subcategory": -1, "room": 1, "parent": 0, "watts": "0", "temperature": "0.0", "chargingcontactor": "-1", "nocharging": "FALSE", "capacity": "0080", "chargingbuffer": "50", "switchingthresholdgrid": "-1", "switchingthresholdbattery": "-1", "serialnumber": "123456", "versionplc": "4.00 (346)", "nominalvoltage": "51.2", "priority": "1", "lowerlimitsoc": "0", "location": "DE-99999", "autosocket1": "0", "autosocket2": "0", "autosocket3": "0", "consumptioncontactor": "FALSE", "wattscharge": "0.0", "operatingmode": "15", "operationmode": "15", "lastoperationmodechange": "1501002284", "chargingpowermanual": "3120", "soc": "80.0", "wattsdischarge": "735.9454", "lastvaliddata": "1501009950" }, { "name": "Waermepumpe 1", "altid": "Heatpump-1", "id": 5, "category": 0, "subcategory": 0, "room": 1, "parent": 3, "isheatpumpgrid": "FALSE", "isheatpumpbattery": "FALSE", "isheatpumpinstalled": "FALSE" } ], "categories": [ ], "ir": 0, "irtx": "", "loadtime": 1500977455, "dataversion": 977618948, "state": 1, "comment": "Sonnenbatterie #123456[3]: Running Lua Startup" }
                              gulp2k

                              Hier habe ich den Regex getestet: https://regex101.com/r/Q2okTK/3 der mir nur ein "Match" ausspuckt.

                              Oder hab ich da wieder was falsch verstanden?
                              Grüße Tobi

                              Kommentar

                              Lädt...
                              X