FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: der_da am 09 März 2022, 13:57:49

Titel: [gelöst] Hilfe bei RegEx-Abfrage
Beitrag von: der_da am 09 März 2022, 13:57:49
Hallo!
Ich versuche, einen Wasserstandspegel aus einer Webseite per HTTPMOD auszulesen, scheitere aber leider an der passenden RegEx-Abfrage.
Die Webseite um die es geht ist https://pegelportal.brandenburg.de/flussgebiet.php?fgid=6&thema=daten
und speziell geht es mir eigentlich nur um den Wert in "A1" (Alarmpegel) und den Wert in "Wasserstand (6 Uhr)" der Messtelle Goyatz 1.
Der Quelltext der Seite in der Gegend um diese Werte sieht so aus:
<td>Spree</td>
<td>LfU Brandenburg</td>
<td style='text-align:right'>160,85</td>
<td style='text-align:right'><span title='Hochwassermeldedienst BB'>410</span></td>
<td style='text-align:right;background-color: #00CC00; color:black;'>304</td>
<td style='text-align:right;background-color: #00CC00; color:black;'>302</td>
<td style='text-align:right;'>11,2</td>
<td class='tdcenter'><a href='messstelle.php?fgid=6&pkz=5824700&thema=ws_graph' title='Pegelseite' class='fa fa-info'></a></td>
</tr>
<tr id='tab_akt_tw_11'>
<td  style='text-align:center'><input type='hidden' id='tab_akt_tw_pkz_11' value='5857000'><button role='button' title='als Favorit' id='tab_akt_tw_td_11' class='fa fa-star-o fa-lg' style='cursor:pointer;' onclick='AddStorageItem("tab_akt_tw","5857000","Goyatz 1",11,6);'></button></td>
<td><a href='messstelle.php?fgid=6&pkz=5857000&thema=ws_graph' title='Pegelseite'>Goyatz 1</a></td>
<td>Schwielochsee</td>
<td>LfU Brandenburg</td>
<td style='text-align:right'>-</td>
<td style='text-align:right'><span title='Hochwassermeldedienst BB'>190</span></td>
<td style='text-align:right;background-color: #00CC00; color:black;'>153</td>
<td style='text-align:right;background-color: #00CC00; color:black;'>154</td>
<td style='text-align:right'>-</td>
<td class='tdcenter'><a href='messstelle.php?fgid=6&pkz=5857000&thema=ws_graph' title='Pegelseite' class='fa fa-info'></a></td>
</tr>
<tr id='tab_akt_tw_12'>
<td  style='text-align:center'><input type='hidden' id='tab_akt_tw_pkz_12' value='5825500'><button role='button' title='als Favorit' id='tab_akt_tw_td_12' class='fa fa-star-o fa-lg' style='cursor:pointer;' onclick='AddStorageItem("tab_akt_tw","5825500","Beeskow, Spreeschleuse UP",12,6);'></button></td>
<td><a href='messstelle.php?fgid=6&pkz=5825500&thema=ws_graph' title='Pegelseite'>Beeskow, Spreeschleuse UP</a></td>
<td>Spree</td>
<td>LfU Brandenburg</td>
<td style='text-align:right'>119,98</td>
<td style='text-align:right'><span title='Hochwassermeldedienst BB'>340</span></td>
<td style='text-align:right;background-color: #00CC00; color:black;'>214</td>
<td style='text-align:right;background-color: #00CC00; color:black;'>215</td>
<td style='text-align:right;'>14,4</td>
<td class='tdcenter'><a href='messstelle.php?fgid=6&pkz=5825500&thema=ws_graph' title='Pegelseite' class='fa fa-info'></a></td>
</tr>
<tr id='tab_akt_tw_13'>
<td  style='text-align:center'><input type='hidden' id='tab_akt_tw_pkz_13' value='5826000'><button role='button' title='als Favorit' id='tab_akt_tw_td_13' class='fa fa-star-o fa-lg' style='cursor:pointer;' onclick='AddStorageItem("tab_akt_tw","5826000","Neubrück, Schleuse OP",13,6);'></button></td>
<td><a href='messstelle.php?fgid=6&pkz=5826000&thema=ws_graph' title='Pegelseite'>Neubrück, Schleuse OP</a></td>
<td>Spree</td>
<td>LfU Brandenburg</td>
<td style='text-align:right'>106,22</td>
<td style='text-align:right'>-</td>
<td style='text-align:right;'>235</td>
<td style='text-align:right;'>236</td>
<td style='text-align:right'>-</td>

Mein bisher gebautes Regex sieht so aus: <.*?>(\d{3}).* (getestet mit https://regex101.com/ (https://regex101.com/))
Allerdings fehlt mir eine Idee, wie ich das weiter eingrenzen kann, so dass wirklich nur die Werte für Goyatz selektiert werden.
Schlussendlich möchte ich den Alarmpegel 190 in einer Variable und den aktuellen Wasserstand 154 in einer anderen Variablen ablegen.
Hat von Euch jemand mehr Erfahrung mit RegEx?
Titel: Antw:Hilfe bei RegEx-Abfrage
Beitrag von: betateilchen am 09 März 2022, 14:23:02
/Schwielochsee[\w\W\n]*?(\d{3})[\w\W\n]*?(\d{3})[\w\W\n]*?(\d{3})/gm


defmod goyatz1 HTTPMOD https://pegelportal.brandenburg.de/flussgebiet.php?fgid=6&thema=daten
attr goyatz1 reading01Name pegel
attr goyatz1 reading01Regex Schwielochsee[\w\W\n]*?(\d{3})[\w\W\n]*?(\d{3})[\w\W\n]*?(\d{3})

setstate goyatz1 2022-03-09 14:30:46 pegel-1 190
setstate goyatz1 2022-03-09 14:30:46 pegel-2 153
setstate goyatz1 2022-03-09 14:30:46 pegel-3 154

Titel: Antw:Hilfe bei RegEx-Abfrage
Beitrag von: der_da am 09 März 2022, 14:32:56
Danke betateilchen.
Ich werde mir das zu Gemüte führen und danach mit diesem Wissen die Weltherrschaft an mich reißen.  ;D
Titel: Antw:[gelöst] Hilfe bei RegEx-Abfrage
Beitrag von: betateilchen am 09 März 2022, 14:36:04
Da sich zwei der drei ermittelten Werte auf der Seite nur einmal pro Tag ändern und der dritte gar nicht, solltest Du die Aktualisierung des HTTPMOD entsprechend berücksichtigen. Das Standardintevervall von 5 Minuten macht auf keinen Fall Sinn. Aber ich wollte das HTTPMOD so einfach wie möglich machen und auf das Wesentliche reduzieren.
Titel: Antw:[gelöst] Hilfe bei RegEx-Abfrage
Beitrag von: der_da am 09 März 2022, 15:17:39
Ja danke für den Hinweis betateilchen.
Kann es sein, dass du den Code für HTTPMOD erst nachträglich eingefügt hast? Oder habe ich das übersehen, als ich dein RegEx gesehen habe und den Rest darunter überlesen?
Jedenfalls existierte mein HTTPMOD schon und ja, mir ist bewusst, dass die Abfragen in sinnvollen Intervallen gemacht werden sollten, damit der Server auf der Gegenseite nicht sauer wird :-)
Danke!