Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. [GELÖST] Hilfe beim Parsen mit RegEx

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [GELÖST] Hilfe beim Parsen mit RegEx

    This topic has been deleted. Only users with topic management privileges can see it.
    • liv-in-sky
      liv-in-sky @frank2604 last edited by

      @frank2604 gerne

      frank2604 1 Reply Last reply Reply Quote 0
      • frank2604
        frank2604 @liv-in-sky last edited by

        So, nachdem ich nun alles erfolgreich umgesetzt habe hier mal das Ergebnis. Vielleicht hilft es als kleines Übungsbeispiel anderen Anfängern wie mir beim Einstieg in den Parser-Adapter - man muss ja auch mal was ans Forum zurückgeben 😉

        Ziel war es, die Daten zur Betriebsrichtung des Flughafens KölnBonn zwecks Weiterverarbeitung in VIS auszulesen und zu historisieren. Je nach Startbahn, die meist von der Windrichtung vorgegeben ist, bekommen wir hier etwas Fluglärm von den Abflügen Richtung Nordwest ab.

        Der Flughafen stellt die Betriebsrichtung auf seiner Webseite dar, die sich leider nicht als iFrame in VIS einbinden lässt.

        https://www.koeln-bonn-airport.de/unternehmen/umwelt-und-laermschutz/betriebsrichtung-live.html

        Webseite.jpg

        im Browser lässt man sich den Quellcode der Webseite anzeigen und such nach der Stelle mit den gewünschten Informationen.

        Der Code mit der Tabelle unter der Kartendarstellung sieht so aus:

        <div id="c2102" class="frame frame-default frame-type-list frame-layout-0"><div class="tx-cgn-modules"><p style='margin:5px 0px 10px 0px;'>Auswertungszeitraum: 17.11.2020 07:49 - 08:49</p><h2>Ankunft</h2><table class="betriebsrichtungtab table table-condensed"><tr valign=top class=brtr0><td class='col-xs-6'>Ankünfte gesamt im Auswertungszeitraum:</td><td>4</td></tr><tr class=brtr1><td>letzte Bahn für Ankünfte:</td><td>24</td></tr><!--<tr><td>Anzahl:</td><td>4</td></tr>--><tr class=brtr0><td>letzter Flugzeugtyp:</td><td>unbekannt: DF20X (19,1t)</td></tr></table><h2>Abflug</h2><table class="betriebsrichtungtab table table-condensed"><tr valign=top class=brtr0><td class='col-xs-6'>Abflüge gesamt im Auswertungszeitraum:</td><td>2</td></tr><tr class=brtr1><td>letzte Bahn für Abflüge:</td><td>14L</td></tr><!--<tr><td>Anzahl:</td><td>2</td></tr>--><tr class=brtr0><td>letzter Flugzeugtyp:</td><td>Bombardier BD-700 Global Express   (45,1t)</td></tr></table><h2>Wetterdaten</h2><table class="betriebsrichtungtab table table-condensed"><tr class=brtr0><td class='col-xs-6'>Luftdruck (hPa):</td><td>1024</td></tr><tr class=brtr1><td>Lufttemperatur (°C):</td><td>11,0</td></tr><tr class=brtr0><td>Windgeschwindigkeit (m/s):</td><td> 4,1</td></tr><tr class=brtr1><td>Windrichtung (°):</td><td>200</td></tr><tr class=brtr0><td>Taupunkt (°C):</td><td>8,0</td></tr><tr class=brtr1><td>Relative Luftfeuchtigkeit (%):</td><td>81</td></tr></table><script language="javascript"><!--//
        

        Um nun eine Regular Expression zu erstellen und zu testen bietet sich ein Online-Tool an: https://regex101.com

        RegEx101.jpg

        In die untere große Box den Quellcode reinschmeißen, oben die RegEx

        Denkt an die eliminierenden \ vor eventuellen / im Quellcode. Siehe die Lösung des Problems oben von @liv-in-sky

        Hier die Ausdrücke, mit denen ich meine 7 Datenpunkte auslese:

        Abflüge gesamt im Auswertungszeitraum:</td><td>(\d+)</td>
        letzte Bahn für Abflüge:</td><td>(\w+)</td>
        letzter Flugzeugtyp:</td><td>(.?)<
        Ankünfte gesamt im Auswertungszeitraum:</td><td>(\d+)</td>
        letzte Bahn für Ankünfte:</td><td>(\w+)</td>
        letzter Flugzeugtyp:</td><td>(.
        ?)<
        Auswertungszeitraum: (.*?)<

        Im Adapter sieht das ganze dann so aus:

        Adapter.jpg

        Da der Teil 'letzter Flugzeugtyp' zweifach gefunden wird, muss man in der Spalte Num einmal 0 für den ersten Treffer und einmal 1 für den zweiten Treffer angeben.

        Ergebnis in der Objektansicht:

        ioBroker.jpg

        Grüße

        Frank

        frank2604 1 Reply Last reply Reply Quote 1
        • frank2604
          frank2604 @frank2604 last edited by

          Hallo @liv-in-sky

          Kannst Du mir vielleicht nochmal helfen?

          Was muss ich tun, wenn mein String, den ich zum finden der Stelle angebe, schon Klammern hat:

          Windgeschwindigkeit (m/s):<\/td><td> (\d+)<
          

          Danke

          Frank

          liv-in-sky 1 Reply Last reply Reply Quote 0
          • liv-in-sky
            liv-in-sky @frank2604 last edited by liv-in-sky

            @frank2604

            wie beim letzten mal - einen backslash davor - so wird dem regex gesagt, dass die klammer eine zeichen ist und kein regex-befehl

            \(..\)
            
            frank2604 1 Reply Last reply Reply Quote 1
            • frank2604
              frank2604 @liv-in-sky last edited by

              @liv-in-sky

              Oh man ... So einfach? Da hätte ich auch selber drauf kommen können.

              Danke!

              Frank

              1 Reply Last reply Reply Quote 0
              • M
                mueller-esch last edited by mueller-esch

                Hallo Zusammen, ich habe ein ähnliches Problem, aber noch nicht gelöst. Auf der folgenden WebSeite will ich einen speziellen Betrag auslesen:

                <!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 8.3
                <br><font size="+1">                 
                  Sunny_Esch (1)
                </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">
                  1465</td>
                <td width="140">&nbsp W</td>
                <td width="100">
                  Gesamtertrag</td>
                <td width="70" align="right" bgcolor="#FFFFFF">
                  82833</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">
                  421</td>
                <td width="140">&nbsp V</td>
                <td width="100">
                  Spannung</td>
                <td width="70" align="right" bgcolor="#FFFFFF">
                  230</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">
                  2.08</td>
                <td width="140">&nbsp A</td>
                <td width="100">
                  Leistung</td>
                <td width="70" align="right" bgcolor="#FFFFFF">
                  478</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">
                  358</td>
                <td width="140">&nbsp V</td>
                <td width="100">
                  Spannung</td>
                <td width="70" align="right" bgcolor="#FFFFFF">
                  231</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">
                  2.02</td>
                <td width="140">&nbsp A</td>
                <td width="100">
                  Leistung</td>
                <td width="70" align="right" bgcolor="#FFFFFF">
                  486</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> </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">
                   </td>
                <td width="70" align="right" bgcolor="#EAF7F7">
                   </td>
                <td width="140">&nbsp
                   </td>
                <td width="95">
                  Spannung</td>
                <td width="70" align="right" bgcolor="#FFFFFF">
                  232</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">
                   </td>
                <td width="70" align="right" bgcolor="#EAF7F7">
                   </td>
                <td width="140">&nbsp
                 </td>
                <td width="95">
                  Leistung</td>
                <td width="70" align="right" bgcolor="#FFFFFF">
                  501</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="1" size="3" maxlength="3">
                <input type="submit" value="Anzeigen/Aktualisieren">
                </td></tr><tr><td height="10"></td></tr>
                </table>
                </td></tr></table></font>
                
                <hr>
                <font face="Arial,Helvetica,Geneva,Sans-serif,sans-serif">
                <table cellspacing="0" cellpadding="0" width="770">
                <tr><td height="5"></td></tr>
                <tr><td width="190"></td>
                <td width="330">
                <a href="LogDaten.dat">Historie</a>
                &nbsp &nbsp &nbsp
                <a href="Info.fhtml">Infoseite</a></td>
                <td align="right">
                <a href="Solar2.fhtml">Einstellungen</a></td>
                <td width="50"></td>
                </tr></table></font>
                </form>
                </body>
                </html>
                
                

                im regex101 bekomme ich mit folgendem RegEx-Code

                Gesamtertrag<\/td>\n<td.*>\n\s*(\d*)<\/td>
                

                den richtigen Betrag zurück. Im Parser-Adapter aber nicht. Hat jemand eine Idee?

                Was im Parser-Adapter unter der Spalte RegEx den Ausdruck "td" jeweils rot unterstrichen, so als wäre hier die Syntax nicht richtig.

                Homoran 1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @mueller-esch last edited by

                  @mueller-esch sagte in [GELÖST] Hilfe beim Parsen mit RegEx:

                  Hat jemand eine Idee?

                  Ja!
                  \n klappt im parser Adapter nicht

                  versuch mal: tertrag<\/td>[^>]+>\s+(\d+)

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    mueller-esch @Homoran last edited by

                    @homoran sagte in [GELÖST] Hilfe beim Parsen mit RegEx:

                    </td>[^>]+>\s+(\d+)

                    ....das ist ja Wahnsinn. Ich war ja noch nicht mal ganz fertig mit meinem "Sermon". das Ding klappt.
                    Super. Danke vielmals

                    Homoran 1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @mueller-esch last edited by

                      @mueller-esch schön, dass es klappt.

                      Ist das mal wieder ein alter Kostal?

                      M 1 Reply Last reply Reply Quote 0
                      • M
                        mueller-esch @Homoran last edited by

                        @homoran Genau. Der ist von 5/2008 und liefert immer noch ohne Mucken die kWh aus dem All.

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        436
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

                        parser adapter regex
                        4
                        13
                        635
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo