NEWS

Frage zu "regex" (ist doch ganz schön komplex)


  • Forum Testing Most Active

    Hallo,
    ich habe folgenden Text (Ausschnitt als Beispiel):

    align="right" bgcolor="#FFFFFF"> 2778</td> <td width="140">&nbsp W</td> <td width="100"> Gesamtenergie</td> <td width="70" align="right" bgcolor="#FFFFFF"> 31648</td> <td width="50">&nbsp kWh</td> <td>&nbsp</td></tr> <tr height="2"><td></td></tr> <tr> <td width="190"></td> <td width="100"> &nbsp</td> <td width="70" align="right"> &nbsp</td> <td width="140">&nbsp</td> <td width="100"> Tagesenergie</td> <td width="70" align="right" bgcolor="#FFFFFF"> 6.18</td> <td width="50">&nbsp <u>L1</u></td> <td width="70">&nbsp</td> <td width="30">&nbsp</td> <td>&nbsp</td></tr> <tr> <td width="190"></td> <td width="100"> Spannung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 604</td> <td width="140">&nbsp V</td> <td width="100"> Spannung</td> <td width="70" align="right" bgcolor="#FFFFFF"> 234</td> <td width="30">&nbsp V</td> <td>&nbsp</td></tr> <tr height="2"><td></td></tr> <tr valign="top" align="left"> <td width="190">&nbsp</td> <td width="100"> Strom</td> <td width="70" align="right" bgcolor="#FFFFFF"> 3.85</td> <td width="140">&nbsp A</td> <td width="100"> 
    

    Und diesen versuche ich per regex auszulesen und in Variablen zu schreiben.
    Bin also auf die Seite "regex101.com" gegangen und habe folgenden regex eingegeben: #FFFFFF">(....\d*)

    Das klappt auch soweit, angezeigt wird dies korrekt.
    4bc1a044-5f7e-4f6e-a384-16b4abd021eb-grafik.png

    Nur wie bekomme ich dies nun in ein Script.
    Probiert habe ich schon alles mögliche:

                        d = body;
     //           re = regexp (#FFFFFF">(...\d*));
     //          re = '#FFFFFF">(...\d*)','g';
                z= d.match(re));
                log ("z= " + z);
    

    Nur irgendwie bekomme ich keinen Wert in z.

    Gebt mir doch mal einen Tipp.

    Wie bekomme ich z.B. das 2 Ergebnis in eine Variable (also die 31648) ?

    Danke im Voraus.



  • @bahnuhr hier ist ein Link (https://jsfiddle.net/1vhfwn45/1/) zu einem fiddle, in dem du sehen kannst, wie du an die Werte kommst. In der while Schleife könntest du entweder direkt mit den einzelnen Werten arbeiten (siehe console.log) oder nach der while Schleife mit dem Array results arbeiten, in welchem alle treffer in der Reihenfolge des vorkommens stehen.


  • Forum Testing Most Active

    Hallo,
    Danke für die schnelle Antwort. Klappt aber nicht.

    Eingefügt habe ich:

    
    var re = /#FFFFFF">\ ((\d|\.)+)/g;
    var z = re.exec(d);
    var results = [];
    while(z != null) {
    	console.log(z[1]);
      results[results.length] = z[1];
      z = re.exec(d);
    }
    
    log ("z= " + z )
    console.log("results= " + results);
    

    Als Antwort im log:
    1a41cec2-8c00-4e41-877a-a28440560900-grafik.png

    mfg


  • Forum Testing Most Active

    So, ich noch mal.

    Wenn ich dein Script ausführe:
    a30995a1-4a46-4578-a81e-86c9d7521ee6-grafik.png

    kommt bei mir auch das gewünschte Ergebnis:
    5ce5a484-8d91-4d7e-9066-4f35426c11b1-grafik.png

    Klappt also soweit.

    Füge ich den Script-Schnipsel in mein anderes Script (für den eigentlichen Zweck):

    Piko();
    
     function Piko() {
        if (logging) log("Piko 5.5 auslesen");
            request('http://' + NameAnlage + ':' + PassAnlage +'@' + IPAnlage, function (error, response, body) {
                d = body.toString();
                log ("d= " + d);
    
    var re = /#FFFFFF">\ ((\d|\.)+)/g;
    var z = re.exec(d);
    var results = [];
    while(z != null) {
    	console.log(z[1]);
      results[results.length] = z[1];
      z = re.exec(d);
    }
    console.log("results= " + results);
            });
     }
    

    kommt:
    a0c6cc72-ea3b-4b88-b90c-5423bc47aefc-grafik.png

    unten bei results nichts.

    Ich vermute es liegt irgendwie an "unterschiedlichen Formaten".

    Ist denn "d = body.toString();" kein String?

    Oder warum wird da nichts angezeigt.


  • Forum Testing Most Active

    Also, ich bekomme es nicht hin.
    Habe auch einen thread hier gefunden:
    https://forum.iobroker.net/topic/8690/status-vom-kostal-wechselrichter-auslesen/23
    wo Rainer (homoran) und andere einige regex kundtun.
    Nur irgendwie stelle ich mich hier zu blöd an.

    Weder per Script noch per parser bekomme ich die Werte angezeigt.

    Vielleicht hat noch jemand einen Tipp für mich.

    mfg


  • Forum Testing Most Active Global Moderator Administrators

    @bahnuhr
    Wenn meine von dir verlinkten regex im parser Adapter nichts bringen, gibt es zwei Möglichkeiten.

    Entweder du hast doch die neue Firmware
    Oder du gibst etwas falsch ein (z.b. die ip ohne zugangsdaten)


  • Forum Testing Most Active

    @Homoran sagte in Frage zu "regex" (ist doch ganz schön komplex):

    Entweder du hast doch die neue Firmware

    Nein, ich hab die alte.
    (hab ich auch schon mehrfach erwähnt und ist ja auch an meinem alten cheerio Script ersichtlich.

    @Homoran sagte in Frage zu "regex" (ist doch ganz schön komplex):

    Oder du gibst etwas falsch ein (z.b. die ip ohne zugangsdaten)

    Nein, wie oben ersichtlich bekomme ich ja einen string geliefert.
    Außerdem hat es ja 2 Jahre funktioniert.

    Meine Vermutung:
    Durch das Update wurde irgendwas geändert und cheerio läuft nun nicht mehr.
    Und dafür suche ich ja ne Alternative.
    Aber vielleicht kann man ja die Änderung wieder so ändern, dass cheerio wieder läuft.


  • Forum Testing Most Active Global Moderator Administrators

    @bahnuhr sagte in Frage zu "regex" (ist doch ganz schön komplex):

    und cheerio läuft nun nicht mehr.

    und was hat das mit dem parser-Adapter zu tun?


  • Forum Testing Most Active

    @Homoran sagte in Frage zu "regex" (ist doch ganz schön komplex):

    @bahnuhr sagte in Frage zu "regex" (ist doch ganz schön komplex):

    und cheerio läuft nun nicht mehr.

    und was hat das mit dem parser-Adapter zu tun?

    Tut mir leid, versteh deine Frage nicht.

    regex kann man doch sowohl per script als auch mit dem parser darstellen.


  • Forum Testing Most Active Global Moderator Administrators

    @bahnuhr
    meine Frage bezog sich ausschließlich auf den parser-Adapter:

    @Homoran sagte in Frage zu "regex" (ist doch ganz schön komplex):

    Wenn meine von dir verlinkten regex im parser Adapter nichts bringen


  • Forum Testing Most Active

    Na gut Rainer, dann halt parser.

    In parser hab ich folgendes eingegeben:
    3372acc6-0538-42a2-918b-edc422d16702-grafik.png

    Bei klick rechts auf bearbeiten, kommt:
    9be0f6f1-829b-440d-8458-54bbfeb7fb69-grafik.png

    Unten im Ergebnis (und somit auch im Objekt) steht nichts.

    Wenn ich nun diesen Text (in der Mitte) kopiere nach regex101 kommt:
    b9578b8f-c2a0-4775-97c1-2ef3228e6bfb-grafik.png

    Wie ersichtlich werden die einzelne Werte korrekt ausgelesen.
    Nur im Adapter parser kommt nichts.

    Für mich stellt sich die Frage:
    Warum klappt das auf der webseite regex101 aber nicht im Adapter parser ?

    Vielleicht kannst du das nachvollziehen und hast eine Idee für mich.

    Danke.


  • Forum Testing Most Active Global Moderator Administrators

    @bahnuhr sagte in Frage zu "regex" (ist doch ganz schön komplex):

    Warum klappt das auf der webseite regex101 aber nicht im Adapter parser ?

    es gibt leider verschiedene Parser "treiber"
    Es funktioniert nicht immer bei regex101 und in dem Adapter.

    Leider habe ich ja die alte Version nicht mehr und kann es daher nicht selber testen, aber ich werde versuchen dir zu helfen

    EDIT: nimm mal die "...." aus der Klammer


  • Forum Testing Most Active

    ... rausgenommen.

    2ff07b56-6781-4d73-8690-39dff91e616f-grafik.png

    keine Veränderung


  • Forum Testing Most Active Global Moderator Administrators

    @bahnuhr
    nicht rausnehmen -> vor die Klammer
    Die Punkte stehen für Leerzeichen - das ist dann keine Number


  • Forum Testing Most Active

    so?
    399ab27e-55ad-496a-a25f-d5032ff045b2-grafik.png


  • Forum Testing Most Active Global Moderator Administrators

    @bahnuhr
    Ja 😞

    Kannst du mir mal den Quelltext schicken, dann versuche ich es mal


  • Forum Testing Most Active

    na klar
    bitte schön

    <!DOCtype HTML PUBLIC "-//W3C//Dtd HTML 4.0 Transitional//EN">
    <html>
    <head>
    <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
    <meta name="Generator" CONTENT="ChrisB">
    <title>PV Webserver</title>
    </head>
    <body nof="(MB=(DefaultMasterborder, 65, 60, 150, 10), L=(HomeLayout, 700, 600))" bgcolor="#EAF7F7" text="#000000" link="#0033CC" vlink="#990099" alink="#FF0000" topmargin=0 leftmargin=0 marginwidth=0 marginheight=0>
    <form method="post" action="">
    <table cellspacing="0" cellpadding="0" width="770" nof="ly">
    <tr><td height="5"></td></tr>
    <tr><td width="190" height="55"></td>
    <td width="400">
      <font face="Arial,Helvetica,Geneva,Sans-serif,sans-serif" size="+3">
      PIKO 5.5
    <br><font size="+1">                 
      PV_Mueller (255)
    </font>
    </font>
    </td>
    <td><img alt="Logo" height="42" width="130" src="KSE.gif"></td>
    </tr>
    </table>
    
    <font face="Arial,Helvetica,Geneva,Sans-serif,sans-serif">
    <table Border="0" width="100%"><tr>
    <td width="150"></td>
    <td> <hr> </td>
    </tr></table>
    <table cellspacing="0" cellpadding="0" width="770">
    <tr><td></td></tr>
    <tr>
    <td width="190"></td>
    <td colspan="2">
      <b>AC-Leistung</b></td>
    <td>&nbsp</td>
    <td>
      <b>Energie</b></td></tr>
    <tr><td height="10"></td></tr>
    
    <tr>
    <td width="190"></td>
    <td width="100">
      aktuell</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      1665</td>
    <td width="140">&nbsp W</td>
    <td width="100">
      Gesamtenergie</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      31661</td>
    <td width="50">&nbsp kWh</td>
    <td>&nbsp</td></tr>
    <tr height="2"><td></td></tr>
    <tr>
    <td width="190"></td>
    <td width="100">
      &nbsp</td>
    <td width="70" align="right">
      &nbsp</td>
    <td width="140">&nbsp</td>
    <td width="100">
      Tagesenergie</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      3.32</td>
    <td width="50">&nbsp kWh</td>
    <td>&nbsp</td></tr>
    <tr height="5"><td></td></tr>
    <tr>
    <td width="190"></td>
    <td width="100">
      Status</td>
    <td colspan="4">
      Einspeisen MPP</td>
    <td>&nbsp</td></tr>
    <tr height="8"><td></td></tr>
    <tr><td colspan="7">
    <table align="top" width="100%"><tr>
    <td width="182"></td>
    <td><hr size="1"></font></td></tr>
    <tr><td height="5"></td></tr></table>
    </td></tr>
    <tr>
    <td width="190"></td>
    <td colspan="2">
      <b>PV-Generator</b></td>
    <td width="140">&nbsp</td>
    <td colspan="2">
      <b>Ausgangsleistung</b></td>
    <td width="30">&nbsp</td>
    <td>&nbsp</td></tr>
    <tr><td height="10"></td></tr>
    <tr>
    <td width="190"></td>
    <td width="100">
      <u>String 1</u></td>
    <td width="70">&nbsp</td>
    <td width="140">&nbsp</td>
    <td width="95">
      <u>L1</u></td>
    <td width="70">&nbsp</td>
    <td width="30">&nbsp</td>
    <td>&nbsp</td></tr>
    <tr>
    <td width="190"></td>
    <td width="100">
      Spannung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      595</td>
    <td width="140">&nbsp V</td>
    <td width="100">
      Spannung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      236</td>
    <td width="30">&nbsp V</td>
    <td>&nbsp</td></tr>
    <tr height="2"><td></td></tr>
    <tr valign="top" align="left">
    <td width="190">&nbsp</td>
    <td width="100">
      Strom</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      1.61</td>
    <td width="140">&nbsp A</td>
    <td width="100">
      Leistung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      560</td>
    <td width="30">&nbsp W</td>
    <td>&nbsp</td></tr>
    <tr height="22"><td></td></tr>
    <tr>
    <td width="190"></td>
    <td width="100">
      <u>String 2</u></td>
    <td width="70">&nbsp</td>
    <td width="140">&nbsp</td>
    <td width="100">
      <u>L2</u></td>
    <td width="70">&nbsp</td>
    <td width="30">&nbsp</td>
    <td>&nbsp</td></tr>
    <tr>
    <td width="190"></td>
    <td width="100">
      Spannung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      594</td>
    <td width="140">&nbsp V</td>
    <td width="100">
      Spannung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      234</td>
    <td width="30">&nbsp V</td>
    <td>&nbsp</td></tr>
    <tr height="2"><td></td></tr>
    <tr valign="top" align="left">
    <td width="190">&nbsp</td>
    <td width="100">
      Strom</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      1.29</td>
    <td width="140">&nbsp A</td>
    <td width="100">
      Leistung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      549</td>
    <td width="30">&nbsp W</td>
    <td>&nbsp</td></tr>
    <tr height="22"><td></td></tr>
    <tr>
    <td width="190"></td>
    <td width="100">
      <u>String 3</u></td>
    <td width="70">&nbsp</td>
    <td width="140">&nbsp</td>
    <td width="100">
      <u>L3</u></td>
    <td width="70">&nbsp</td>
    <td width="30">&nbsp</td>
    <td>&nbsp</td></tr>
    <tr>
    <td width="190"></td>
    <td width="100">
      Spannung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      0</td>
    <td width="140">&nbsp
      V</td>
    <td width="95">
      Spannung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      236</td>
    <td width="30">&nbsp V</td>
    <td>&nbsp</td></tr>
    <tr height="2"><td></td></tr>
    <tr valign="top" align="left">
    <td width="190">&nbsp</td>
    <td width="95">
      Strom</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      0.00</td>
    <td width="140">&nbsp
    A</td>
    <td width="95">
      Leistung</td>
    <td width="70" align="right" bgcolor="#FFFFFF">
      552</td>
    <td width="30">&nbsp W</td>
    <td>&nbsp</td></tr>
    
    <tr><td height="15"></td></tr>
    <tr><td colspan="7">
    <table align="top" width="100%">
    <tr><td width="182"></td>
    <td><hr size="1"></font></td>
    </tr><tr><td height="5"></td></tr></table>
    </td></tr></table>
    <table cellspacing="0" cellpadding="0" width="770">
    <tr><td width="190"></td>
    <td><font face="Arial,Helvetica,Geneva,Sans-serif">
    <b>RS485 Kommunikation</b></td></tr>
    <tr><td height="8"></td></tr>
    <tr><td width="190"></td>
    <td><font face="Arial,Helvetica,Geneva,Sans-serif">
    Wechselrichter&nbsp
    <input type="Text" name="edWrNr" value="255" size="3" maxlength="3">
    <input type="submit" value="Anzeigen/Aktualisieren">
    </td></tr><tr><td height="10"></td></tr>
    </table>
    </td></tr></table></font>
    
    <hr>
    <table cellspacing="0" cellpadding="0" width="770">
    <tr><td height="5"></td></tr>
    <tr><td width="190"></td>
    <td width="330">
    <font face="Arial,Helvetica,Geneva,Sans-serif,sans-serif">
    <a href="LogDaten.dat">Historie</a>
    &nbsp &nbsp &nbsp
    <a href="Info.fhtml">Infoseite</a></font></td>
    <td align="right">
    <font face="Arial,Helvetica,Geneva,Sans-serif,sans-serif">
    <a href="Solar2.fhtml">Einstellungen</a></font></td>
    <td width="50"></td>
    </tr></table></font>
    </form>
    </body>
    </html>
    
    

  • Forum Testing Most Active

    das war jetzt der Text den parser in dem "Kästchen" hatte.


  • Forum Testing Most Active Global Moderator Administrators

    @bahnuhr
    Ja!

    ich habe eine "Lösung"
    weiß aber selber nicht warum:

    #FFFFFF">[^\d]+([^<]+)
    

    EDIT: nochmal geändert - jetzt weiß ich auch warum es so klappt


  • Forum Testing Most Active

    @Homoran sagte in Frage zu "regex" (ist doch ganz schön komplex):

    #FFFFFF">[^\d]+([^<]+)

    Danke, ich probiers aus.
    Ist schon komisch das ganze.

    @Homoran sagte in Frage zu "regex" (ist doch ganz schön komplex):

    EDIT: nochmal geändert - jetzt weiß ich auch warum es so klappt

    Sag doch auch mal wie.

    P.S.
    Ich probier dies dann auch mal in einem Script aus.


Log in to reply
 

Suggested Topics

  • 51
  • 9
  • 3
  • 6
  • 4
  • 2
  • 6
  • 3

961
Online

32.2k
Users

38.8k
Topics

526.6k
Posts