Ankündigung

Einklappen
Keine Ankündigung bisher.

Auslesen einer Homepage

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

    #16
    Das funktioniert mit deinem beispieltext:
    Code:
    preg_match_all('/"wattscharge": "(\d+.\d+)"/si', $_buffer, $result, PREG_PATTERN_ORDER);
    $result = $result[1];
    echo $result[0];
    Wobei $_buffer der String aus deinem Beispiel ist.
    Zuletzt geändert von vento66; 25.07.2017, 20:47.

    Kommentar


      #17
      Würde dann in meinem LBS so aussehen, oder?

      PHP-Code:
      //Ladestrom
      preg_match_all('/"wattscharge": "(\d+.\d+)"/si'$url1$data1PREG_PATTERN_ORDER);
      setLogicLinkAusgang($id,4,$data1[1]); 
      Hier nochmal im Ganzen, wobei nur der "Ladestrom" umgebaut ist:
      PHP-Code:
      ###[DEF]###
       [name =Sonnenbatterie]

       [e#1 =Trigger !=0]
       [e#2 =IP]

       [a#1 = SNr. der Batterie]
       [a#2 = PV-Leistung]
       [a#3 = Verbrauch]
       [a#4 = Ladestrom]
       [a#5 = Entladestrom]
       [a#6 = Ladezustand]
       [a#7 = Einspeisung bzw. Bezug]


      ###[/DEF]###



      ###[HELP]###
      SonnenBatterie

      Dieser Baustein dient zur Abfrage einer SonnenBatterie der Firma https://www.sonnenbatterie.de/.
      Abgefragt werden die auslesbaren Daten der Batterie selber, nicht über die Homepage bzw. deren Server.

      Ausgelegt ist der Baustein für das Modell SonnenBatterie eco, ob es auch für die "neueren" Modelle
      funktioniert müsste gestestet werden. Auch könnte man noch mehr Werte auslesen, aber in der ersten
      Version stelle ich nur die mir geläufigen und vielleicht auch sinnvollen dar.

      Wenn aber mehr benöigt werden sollten, kann ich gerne den Baustein updaten.


      E1: Trigger
      E2: IP Adresse der SonnenBatterie

      A1: Seriennummer der Batterie
      A2: PV-Leistung
      A3: Verbrauch
      A4: Ladestrom
      A5: Entladestrom
      A6: Ladezustand
      A7: Einspeisung bzw. Bezug



      Changelog:

      v1.0
      -initial Version

      ###[/HELP]###

      ###[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);
                  }
              }
          }
       }

       ?>
      ###[/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");

      //SERIENNUMMER SonnenBatterie
      //$regexp="serialnumber=*?([0-9]{10}$)";
      //preg_match($regexp,$ausgabe1,$data1);
      //setLogicLinkAusgang($id,1,$data1[1]);

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

      //Verbrauch
      //$regexp='/.*watts="([0-9]+\.[0-9]*)".*/';
      //preg_match($regexp,$ausgabe1,$data1);
      //setLogicLinkAusgang($id,3,$data1[1]);

      //Ladestrom
      preg_match_all('/"wattscharge": "(\d+.\d+)"/si', $url1, $data1, PREG_PATTERN_ORDER);
      setLogicLinkAusgang($id,4,$data1[1]);

      //Entladestrom
      $regexp='/(?<=wattsdischarge":\s.)\d+.\d+/';
      preg_match($regexp,$ausgabe1,$data1);
      setLogicLinkAusgang($id,5,$data1[1]);

      //Ladezustand
      $regexp='/(?<="soc":\s.)\d+.\d+/';
      preg_match($regexp,$ausgabe1,$data1);
      setLogicLinkAusgang($id,6,$data1[1]);

      //Einspeisung bzw. Bezug
      // ist PV-Leistung - Ladestrom - Verbrauch + Entladestrom



      setLogicElementStatus($id,0);

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

       sql_disconnect();
       ?>
       ###[/EXEC]###
      Zuletzt geändert von JonDonSponky; 25.07.2017, 21:04.
      Grüße Tobi

      Kommentar


        #18
        Zitat von JonDonSponky Beitrag anzeigen
        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?
        Naja der Regex auf dem Link ist leicht anders da sind keine "/" wie in denem Code opeb. Deshlb klppt es.
        mir ist auch aufgefallen das das was du im ersten Post als Screenshot und das was du jetzt postet nicht das gleiche ist... einmal : und einmal = als Trennzeichen... Ist das Absicht?
        Gruß
        Michael

        Kommentar


          #19
          Zitat von gulp2k Beitrag anzeigen

          Naja der Regex auf dem Link ist leicht anders da sind keine "/" wie in denem Code opeb. Deshlb klppt es.
          mir ist auch aufgefallen das das was du im ersten Post als Screenshot und das was du jetzt postet nicht das gleiche ist... einmal : und einmal = als Trennzeichen... Ist das Absicht?
          Das kommt daher, dass ich im Screenshot den Code als xml ausgeben hab lassen
          HTML-Code:
          http://192.168.10.26:3480/data_request?id=sdata&output_format=xml
          wegen der besseren Übersicht...
          Zuletzt geändert von JonDonSponky; 25.07.2017, 21:30.
          Grüße Tobi

          Kommentar


            #20
            Mit dem neuen Code
            PHP-Code:
            ###[DEF]###
             [name =Sonnenbatterie]

             [e#1 =Trigger !=0]
             [e#2 =IP]

             [a#1 = SNr. der Batterie]
             [a#2 = PV-Leistung]
             [a#3 = Verbrauch]
             [a#4 = Ladestrom]
             [a#5 = Entladestrom]
             [a#6 = Ladezustand]
             [a#7 = Einspeisung bzw. Bezug]


            ###[/DEF]###



            ###[HELP]###
            SonnenBatterie

            Dieser Baustein dient zur Abfrage einer SonnenBatterie der Firma https://www.sonnenbatterie.de/.
            Abgefragt werden die auslesbaren Daten der Batterie selber, nicht über die Homepage bzw. deren Server.

            Ausgelegt ist der Baustein für das Modell SonnenBatterie eco, ob es auch für die "neueren" Modelle
            funktioniert müsste gestestet werden. Auch könnte man noch mehr Werte auslesen, aber in der ersten
            Version stelle ich nur die mir geläufigen und vielleicht auch sinnvollen dar.

            Wenn aber mehr benöigt werden sollten, kann ich gerne den Baustein updaten.


            E1: Trigger
            E2: IP Adresse der SonnenBatterie

            A1: Seriennummer der Batterie
            A2: PV-Leistung
            A3: Verbrauch
            A4: Ladestrom
            A5: Entladestrom
            A6: Ladezustand
            A7: Einspeisung bzw. Bezug



            Changelog:

            v1.0
            -initial Version

            ###[/HELP]###

            ###[LBS]###
            <?
            function LB_LBSID($id) {
                if ($E=getLogicEingangDataAll($id)) {
                    if (getLogicElementStatus($id)==0) {
                        if ($E[1]['value']!=0 && $E[1]['refresh']==1) {
                            setLogicElementStatus($id,1);
                            callLogicFunctionExec(LBSID,$id);
                        }
                    }
                }
             }

             ?>
            ###[/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");

            //SERIENNUMMER SonnenBatterie
            //$regexp="serialnumber=*?([0-9]{10}$)";
            //preg_match($regexp,$ausgabe1,$data1);
            //setLogicLinkAusgang($id,1,$data1[1]);

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

            //Verbrauch
            //$regexp='/.*watts="([0-9]+\.[0-9]*)".*/';
            //preg_match($regexp,$ausgabe1,$data1);
            //setLogicLinkAusgang($id,3,$data1[1]);

            //Ladestrom
            preg_match_all('/"wattscharge": "(\d+.\d+)"/si', $url1, $data1, PREG_PATTERN_ORDER);
            setLogicLinkAusgang($id,4,$data1[1]);

            //Entladestrom
            //$regexp='/(?<=wattsdischarge":\s.)\d+.\d+/';
            //preg_match($regexp,$ausgabe1,$data1);
            //setLogicLinkAusgang($id,5,$data1[1]);

            //Ladezustand
            //$regexp='/(?<="soc":\s.)\d+.\d+/';
            //preg_match($regexp,$ausgabe1,$data1);
            //setLogicLinkAusgang($id,6,$data1[1]);

            //Einspeisung bzw. Bezug
            // ist PV-Leistung - Ladestrom - Verbrauch + Entladestrom



            setLogicElementStatus($id,0);

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

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

            bekomme ich jetzt diesen Fehler:
            Datei: /var/edomi-backups/_public/www/shared/php/base.php | Fehlercode: 2 | Zeile: 284 | utf8_decode() expects parameter 1 to be string, array given
            Grüße Tobi

            Kommentar


              #21
              Xml Lässt sich doch ohne Regex auswerten. Da brauchst Du eine andere Vorlage!

              Kommentar


                #22
                du holst Die Daten in $ausgabe1 ab, in der Regex steht die $url1 als Suchstring drinn. Die geschweifte Klammer von
                Code:
                if ($E=getLogicEingangDataAll($id)) {
                darf erst nach
                Code:
                setLogicElementStatus($id,0);
                geschlossen werden.

                Kommentar


                  #23
                  Währe doch mal eine Idee einen "Regex" baustein zu schreiben.
                  So ala
                  E1=URL
                  E2=regex
                  E3=trigger
                  und A1 = ergebniss des regex. Damit würde man sicherlich einige glücklich machen (und huntert andere müssten sich erstmal mit Regex beschäftigen - so wie ich...)
                  (evtl. noch weitere regex eingänge und ergebniss-ausgänge - so das man mehrere infos auf einer Seite rausholen kann)

                  Mir würde es helfen - bevor ich mir einen eigenen "custom LBS" schreibe...

                  Gruß
                  Thorsten

                  Kommentar


                    #24
                    Zitat von ThorstenGehrig Beitrag anzeigen
                    Währe doch mal eine Idee einen "Regex" baustein zu schreiben.
                    Sehr gute Idee!!!! Kann ich nur unterstützen...

                    Grüße Tobi

                    Kommentar


                      #25
                      Zitat von JonDonSponky Beitrag anzeigen

                      Sehr gute Idee!!!! Kann ich nur unterstützen...
                      Naja da du das ja gerade am bauen bist könntest du das ja dann übernehmen
                      Gruß
                      Michael

                      Kommentar


                        #26
                        Zitat von gulp2k Beitrag anzeigen

                        Naja da du das ja gerade am bauen bist könntest du das ja dann übernehmen
                        Ob ich, mit meinen (noch) bescheidenen Programmierkenntnissen, da der richtige bin, wird sich noch beweisen, aber mit eurer Hilfe bin ich gerne bereit hier mitzuhelfen.

                        Vielleicht schaff ich schon mal eine beta-Version am WE.

                        Prinzipiell erst mal die Frage: der LBS sollte schon im EXEC-Bereich geschrieben sein, oder? Schließlich wird ja empfohlen "externe" Abfragen hier laufen zu lassen...

                        EDIT:
                        Da kam mir wohl jemand zuvor: LBS19001261
                        Zuletzt geändert von JonDonSponky; 01.01.2018, 18:04.
                        Grüße Tobi

                        Kommentar


                          #27
                          ja, wäre sinnvoll da du ja nicht weißt wie lane die Webseite zur Antwort braucht bzw ob Sie überhaupt erreichbar ist.
                          Gruß
                          Michael

                          Kommentar


                            #28
                            Hallihallo,

                            jetzt ist doch schon "ein Sommer" ins Land gegangen, bis ich mich wieder diesem Projekt widmen konnte. Nach stundenlangen Recherchen und diversen Fehlschlägen bzw. Verständnisproblemen, hab ich nun endlich den Baustein für die Sonnenbatterie fertig stellen können.

                            Herzlichen Dank nochmal für eure Tipps und Unterstützung!
                            Zuletzt geändert von JonDonSponky; 04.11.2017, 23:16.
                            Grüße Tobi

                            Kommentar

                            Lädt...
                            X