Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zur Codeoptimierung WG-Plugin

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] Frage zur Codeoptimierung WG-Plugin

    Hallo,
    bin gerade dabei meine Steca-WRs via WG an den Bus zu bringen.
    Klappt nun schon soweit, allerdings habe ich das Auslesen des HTML-Strings wohl etwas umständlich gelöst.
    Aktuell sieht das so aus:
    $content enthält die Rückmeldung der HTML-Seite
    $ertragchar enthält sozusagen das erste Suchwort, ab dem dann irgendwo der Ertrag kommt, dort sind es dann noch 89 Zeichen aller Art, bis der Ertrag kommt. Der Ertrag wird in x.y W dargestellt.

    Aktuell funktionierende Lösung sieht so aus:
    my $ertragstring = substr ($content, index($content, $ertragchar)+89);
    ($ertrag1,$ertrag2) = $ertragstring =~ /(\d+).(\d+)/;
    $ertrag = $ertrag1 . '.' . $ertrag2;
    Könnte mir jemand einen Tipp geben, wie man das effizienter handhaben kann, ggf. in einer Zeile?
    Nachdem die Ertragsauslesung nur der Beginn ist und noch andere Werte folgen sollen, wäre ich für Effizienztipps dankbar.
    Viele Grüße, Oliver

    #2
    Was kommt denn da als Text an?
    Google mal nach Substitution bzw. Regex.

    Gruß
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Hi Mirko,
      habe schon die letzte Woche mit Googeln und zahlreichen Büchern über RegEx und Substs zugebracht, aber irgendwie werde ich mit der Syntax nicht warm oder blicke es einfach nicht. Wie gesagt, läuft jetzt, wenn auch umständlich, daher eigentlich die Frage, wie man die drei Zeilen unter Verwendung von RegEx in eine bekommt....
      Bei mir fällt irgendwie der Groschen nicht, wann ich wie mit einem ~m/.../ was finde, dann weitersuche und dann den Match in eine Variable bekomme.... Ist irgendwie zu hoch für mich oder aber ich finde den roten faden nicht. Die meisten Googles machen das ganze mit ner if-Abfrage, soweit bin ich aber noch nicht, sondern will erst mal den Wert in Variablen transformieren.

      Kommentar


        #4
        Ich bin im Moment unterwegs, aber wenn Du mal den html Code zeigst kann man da sicher helfen.
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #5
          THX! Ich hab Dir mal ein paar Sachen via Email zukommen lassen. P.S.: Bin auch noch an dem ebus-Thema dran. Allerdings bin ich erst noch am Decodieren der Hautec bzw. TEM-Commandos...

          Kommentar


            #6
            Naja, RE kann man verstehen, muss man aber nicht

            Meine persönliche Einstellung dazu ist: lieber fünf Zeilen, die ich in 12Monaten noch auf Anhieb verstehe, als eine RE, die man sich nie wieder traut anzufassen..

            Geschmackssache, wirklich Performance-relevant ist das IMHO nicht bei solchen Anwendungen..

            Makki
            EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
            -> Bitte KEINE PNs!

            Kommentar


              #7
              Naja Perl ohne RE ist wie KNX ohne Bus
              Derzeit zwischen Kistenauspacken und Garten anlegen.
              Baublog im Profil.

              Kommentar


                #8
                ??? und Dein Post hilft mir wie die Erkenntnis, dass bei Regen die Strasse nass wird...

                Kommentar


                  #9
                  Hallo Oliver, ich komme frühestens heute Abend dazu mir das genauer anzusehen. Noch dazu bin ich auch nur Perl-Anfänger. Aber ich würde versuchen eine RegEx zu kreieren die nach diesen Strings sucht:

                  Leistung:
                  > x.x W

                  Ertrag
                  > x.x MWh

                  Der erste Trenner ist > und der zweite jeweils MWh/W. Da gibt es ein ganz gutes Beispiel von amaridian im Forum bzgl. der Zählerauslesung. Er hat das auch sehr schön im Anschluss erklärt. Hier:https://knx-user-forum.de/wiregate/1...plugin-18.html
                  Danke noch mal dafür! Und passender gehts ja kaum ... nur das wir Ertrag und Bezug austauschen

                  Was greentux meint ist wohl eher dass Perl mit der RegEx-Geschichte recht mächtig ist und sich nahezu alles damit finden/erschlagen lässt. Ergo macht es durchaus Sinn sich damit intensiver zu beschäftigen. Aber ganz ehrlich ohne google und diverse RegEx-tutorials tut man sich da sehr schwer das im Kopf zu behalten. Hat man es aber einmal in den Grundzügen verstanden wird das ganze nachvollziehbar.

                  Gruß
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #10
                    Hallo
                    Es gibt auch online REDex Tester.
                    Einfach mal bei Goggle suchen.
                    Gruß NetFritz
                    KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                    WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                    PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                    Kommentar


                      #11
                      Hallo zusammen,
                      danke für das Feedback.
                      @Mirko:
                      Das mit RegEx und dem reinfuchsen ist mir klar, hatte vor Urzeiten als SysAdmin auch einiges gemacht, aber wie Du schon geschrieben hast, wenn man es nicht täglich macht wird es schwierig und man sieht den Wald vor lauter Bäumen nicht. Daher auch meine Frage ob in der Community irgendwo ein Crack sitzt, der die Logik sozusagen aus dem Ärmel schüttet ohne recherchieren zu müssen. Mir gehen auch Posts auf den Keks wo man feststellt, dass mit einer einfachen Googlesuche das Problem geklärt werden kann, daher habe ich auch schon viel Zeit in die Recherche und in die Vorselektion des Problems gesteckt, aber irgendwann sollte auch jeder Wissen, wann er die Fahne hebt...
                      Ich schaue mir den Link an, vielleicht kommt mir dann wieder die zündende Idee, ansonsten bleibt es dann erst mal bei den Codezeilen und gut.

                      @NetFritz:
                      Danke für den Tipp mit dem regEx-Tester (REGex TESTER v1.5.3 - test/validate regular expressions, online tester), kannte ich noch nicht! Ich glaube das spart mir Test-Zeit...

                      Kommentar


                        #12
                        Hi,

                        äquivalent zu Deinem Coding müsste folgendes sein:
                        Code:
                        my $ertrag = $content =~ /.{89}(\d+\.\d+)/;
                        wobei ich hier annehme, dass wirklich x.y im string stehen. In kurz: 89 beliebige Zeichen, dann eine Zahl, gefolgt von einem Punkt, dann wieder ne Zahl. Wobei die Zahlen und der Punkt das gewünschte Ergebnis sind.

                        Ich hab es aber nicht ausprobiert.

                        Gruß, Waldemar
                        OpenKNX www.openknx.de

                        Kommentar


                          #13
                          Naja, ohne zu wissen was in $content denn nun genau steht (CODE verwenden!), wirds wohl keine fertige AW geben, sonst kann ich nur sagen das mir da manches mal die Windel, nicht nur die Strasse nass wurde

                          Finally müsste man auch sehen, was sich davon ändern kann und berücksichtigen (Einheiten -/k/M z.B.)

                          Makki
                          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                          -> Bitte KEINE PNs!

                          Kommentar


                            #14
                            Das sollte es eigentlich machen:

                            Sucht die Zahl die zwischen ">" und der jeweiligen Einheit "W/MWh" steht

                            EDIT: Hatte da noch nen Fehler drin wo ich aber jetzt auch nicht weiterkomme. Man müsste vorher noch nen chomp $content machen weil der Zeilenumbruch sonst irgendwie stört.
                            Code:
                            chomp $content;
                            #Ertrag
                            my $ertrag = $content =~ />.*?.(\d+\.\d+).(W)/ ;
                            #Leistung
                            my $ertrag = $content =~ />.*?.(\d+\.\d+).(MWh)/ ;

                            Gruß

                            P.S.: Hat aber auch lange gedauert Dafür wieder ein Teil Regex verstanden.
                            Umgezogen? Ja! ... Fertig? Nein!
                            Baustelle 2.0 !

                            Kommentar


                              #15
                              @ Waldemar: Danke für den Tipp. So hatte ich das auch verstanden und probiert, allerdings bleibt dann das Ergebnis leer, obwohl der nächste x.y im Code ist. Dennoch bringt mich das zur Erkenntnis, das ich dann doch nicht so falsch mit meinen Kenntnissen gelegen habe und stattdessen im HTML-Code irgendwas den Match unmöglich macht...
                              Das bringt mich dann zähneknirschend zu Makki's Einwurf den Inhalt von Content (via CURL exportiert) mal anzuhängen... Im Beispiel hier taucht zuerst als Anhaltspunkt "lang_sysperf3" aus gefolgt von "18.0 W" für den Ertrag (und später 4.0 MW für den Gesamtertrag). Kann es sein, dass das ganze aufgrund von Zeilenumbrüchen innerhalb des Dumps ins Trudeln kommt?
                              @JuMi: Oh oh, jetzt hab ich aber doch ein schlechtes Gewissen, klappt aber leider auch nicht, der Inhalt von $ertrag ist wieder leer....

                              So ne Ka... (net in der Windel und auch net auf der Strasse)

                              Ich würde sagen an der Stelle dann erst mal Abbruch.... Ich danke Euch dennoch für die wertvollen Einwürfe und Tipps, da ich zumindest bzgl. der RegEx-Syntax nun denke auf dem richtigen gedanklichen Weg zu sein (=~m// bringt hier nix) und aus den Beispielen die logische Vorgehensweise verstanden habe. Ich schraube nun mal weiter und werde natürlich am Ende das komplette Plugin für die Steca-WR posten...
                              Angehängte Dateien

                              Kommentar

                              Lädt...
                              X