[gelöst] Mal wieder Probleme mit regex

Begonnen von Nielsiwilsi, 07 Februar 2021, 21:00:07

Vorheriges Thema - Nächstes Thema

Nielsiwilsi

Hallo Leute,
ich hab mal wieder Probleme mit Regex.
Ich versuche über HTTPMOD die Pegelstände der Donau mit Datum und Uhrzeit zu erfassen.

Sprich die Infos finden sich in folgendem String: <span style="color:black">Letzter Messwert vom <b>07.02.21 13:30</b> Uhr: <b>418</b> cm</span>

Ich habe mir ein HTTPMOD angelegt, und habe mit regex101 gepielt um halbwegs Treffer zu bekommen. Aber die Welt des Regex ist doch zu fremd für mich. Ich bekomme nur keine genauen Treffer und Datum und Uhrzeit bekomme ich auch irgendwie nicht getrennt. Ich denke, dass ist für die Pros trivial, aber ich steh wie ein Ochs vorm Berg.

defmod Wetter_Hochwasser HTTPMOD https://www.hnd.bayern.de/pegel/donau_bis_passau/schwabelweis-10062000 60
attr Wetter_Hochwasser DbLogExclude .*
attr Wetter_Hochwasser event-on-change-reading .*
attr Wetter_Hochwasser reading1Name Date
attr Wetter_Hochwasser reading1Regex (?s)(Letzter Messwert vom <b>)([^<}]*)
attr Wetter_Hochwasser reading2Name Time
attr Wetter_Hochwasser reading2Regex keineAhnungWasHierReinMuss
attr Wetter_Hochwasser reading3Name Hight
attr Wetter_Hochwasser reading3Regex (?s)(Letzter Messwert vom).*?(Uhr: <b>)([^<}]*)
attr Wetter_Hochwasser room Umwelt->Wetter

setstate Wetter_Hochwasser 2021-02-07 20:48:44 Date-1 Letzter Messwert vom <b>
setstate Wetter_Hochwasser 2021-02-07 20:48:44 Date-2 07.02.21 20:45
setstate Wetter_Hochwasser 2021-02-07 20:48:44 Hight-1 Letzter Messwert vom
setstate Wetter_Hochwasser 2021-02-07 20:48:44 Hight-2 Uhr: <b>
setstate Wetter_Hochwasser 2021-02-07 20:48:44 Hight-3 409
setstate Wetter_Hochwasser 2021-02-07 20:48:44 Time 1


Danke schon mal
Niels

Nielsiwilsi

Das glaub ich ja jetzt nicht, ich habs hin bekommen.
Was sagt ihr dazu, ist das so failsave?

defmod Wetter_Hochwasser HTTPMOD https://www.hnd.bayern.de/pegel/donau_bis_passau/schwabelweis-10062000 60
attr Wetter_Hochwasser DbLogExclude .*
attr Wetter_Hochwasser event-on-change-reading .*
attr Wetter_Hochwasser reading1Name Date
attr Wetter_Hochwasser reading1Regex (?s)Letzter Messwert vom <b>([^ ]*)
attr Wetter_Hochwasser reading2Name Time
attr Wetter_Hochwasser reading2Regex (?s)Letzter Messwert vom <b>[^ ]* ([^<]*)
attr Wetter_Hochwasser reading3Name Hight
attr Wetter_Hochwasser reading3Regex (?s)Letzter Messwert vom.*?Uhr: <b>([^<]*)
attr Wetter_Hochwasser room Umwelt->Wetter

setstate Wetter_Hochwasser 2021-02-07 21:45:13 Date 07.02.21
setstate Wetter_Hochwasser 2021-02-07 21:45:13 Hight 409
setstate Wetter_Hochwasser 2021-02-07 21:45:13 Time 21:30



VG
Niels

betateilchen

Müsste das reading03 nicht Height heißen anstatt Hight?

Deine regex gehen auch etwas einfacher:


attr Wetter_Hochwasser reading1Name Date
attr Wetter_Hochwasser reading1Regex vom <b>([^ ]*).*cm
attr Wetter_Hochwasser reading2Name Time
attr Wetter_Hochwasser reading2Regex vom <b>[^ ]* ([^<]*).*cm
attr Wetter_Hochwasser reading3Name Hight
attr Wetter_Hochwasser reading3Regex Uhr: <b>([^<]*).*cm
attr Wetter_Hochwasser stateFormat Date Time Hight cm


Den Pegelstand alle 60 Sekunden abzufragen, halte ich nicht für die beste Idee.
Viele Anbieter solcher Seiten verhängen inzwischen Sperren, wenn solche Informationsseiten zu häufig automatisiert abgefragt werden.

Warum arbeitest Du nicht mit der Tabellendarstellung?

https://www.hnd.bayern.de/pegel/donau_bis_passau/schwabelweis-10062000/tabelle?methode=wasserstand&

Das ist zum einen viel leichter auszuwerten und zum anderen hast Du da die gesamten Messwerte des laufenden Tages zur Verfügung.
Da würde es sogar reichen, einmal pro Stunde den aktuellen Wert auszulesen.
Wahlweise gibt es die Werte auch im 15-Minuten-Rhythmus, aber das beweist auf jeden Fall, dass kürzere Abfrageintervalle als 15 Minuten nicht notwendig sind.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!


Nielsiwilsi

Hallo Christoph,
danke für den Link. Werde ich mal ausprobieren. Allerdings weichen die Werte voneinander ab.  :o
Aber nur jetzt für 13:30 nur 2cm - das ist vertretbar.

VG
Niels