httpmod, regex mehrere Treffer, meteoblue

Begonnen von Panik, 15 Juli 2020, 08:10:39

Vorheriges Thema - Nächstes Thema

Panik

Hallo,

ich habe mir über ein httpmod-Deveice erstellt, mit dem ich die Wetterdaten eines Ortes von meteoblue beziehe.
Es sind pro Tag 8 Werte im 3h-Abstand.
Dazu habe ich sechs Readings erstellt, wovon bei zwei Readings auch die passenden Sub-Readings erstellt werden ("2_Icon-1, 2_Icon-2, usw")

Bei den restlichen 4 Readings habe ich den relevanten Quelltextausschnitt m.E. schon recht gut eingegrenzt/aufbereitet.
Es gelingt mir jedoch nicht die 8 Matches daraus zu ziehen. Immer nur eins  :(

Kann mir da jemand auf die Sprünge helfen?

Hier der RAW-Code:

defmod Wetter_HTML HTTPMOD https://www.meteoblue.com/de/wetter/woche/hamburg_deutschland_2911298?day=1&utm_source=weather_widget&utm_medium=linkus&utm_content=daily&utm_campaign=Weather%2BWidget 600
attr Wetter_HTML userattr reading01Name reading01RegOpt reading01Regex reading02Name reading02RegOpt reading02Regex reading03Name reading03RegOpt reading03Regex reading04Name reading04RegOpt reading04Regex reading05Name reading05RegOpt reading05Regex reading06Name reading06RegOpt reading06Regex stateFormat timeout
attr Wetter_HTML reading01Name 1_Beschreibung
attr Wetter_HTML reading01RegOpt g
attr Wetter_HTML reading01Regex (?s)<div class="pictoicon".*?title="[\n\s]*(.*?)[\n\s]*" class.*?</div>
attr Wetter_HTML reading02Name 2_Icon
attr Wetter_HTML reading02RegOpt g
attr Wetter_HTML reading02Regex (?s)<div class="pictoicon".*?picon [\n\s]*(.*?)[\n\s]*">.*?</div>
attr Wetter_HTML reading03Name 3_Temperatur
attr Wetter_HTML reading03RegOpt g
attr Wetter_HTML reading03Regex (?s)<tr class="temperatures".*?description".*?/th>[\n\s]*(.*?)[\n\s]*</tr>
attr Wetter_HTML reading04Name 4_Gefühl
attr Wetter_HTML reading04RegOpt g
attr Wetter_HTML reading04Regex (?s)<tr class="windchills".*?description".*?/th>[\n\s]*(.*?)[\n\s]*</tr>
attr Wetter_HTML reading05Name 5_Windrichtung
attr Wetter_HTML reading05RegOpt g
attr Wetter_HTML reading05Regex (?s)<tr class="winddirs".*?description".*?/th>[\n\s]*(.*?)[\n\s]*</tr>
attr Wetter_HTML reading06Name 6_Regen
attr Wetter_HTML reading06RegOpt g
attr Wetter_HTML reading06Regex (?s)<tr class="precipprobs".*?description".*?/th>[\n\s]*(.*?)[\n\s]*</tr>
attr Wetter_HTML room Wetter_html

setstate Wetter_HTML 2020-07-15 08:09:44 1_Beschreibung-1 Bedeckt mit leichtem Regen
setstate Wetter_HTML 2020-07-15 08:09:44 1_Beschreibung-2 Nebel/niedere Schichtwolken mit Cirrus-Wolken
setstate Wetter_HTML 2020-07-15 08:09:44 1_Beschreibung-3 Bedeckt
setstate Wetter_HTML 2020-07-15 08:09:44 1_Beschreibung-4 Wechselnd bewölkt
setstate Wetter_HTML 2020-07-15 08:09:44 1_Beschreibung-5 Wechselnd bewölkt
setstate Wetter_HTML 2020-07-15 08:09:44 1_Beschreibung-6 Überwiegend bewölkt
setstate Wetter_HTML 2020-07-15 08:09:44 1_Beschreibung-7 Bedeckt
setstate Wetter_HTML 2020-07-15 08:09:44 1_Beschreibung-8 Überwiegend bewölkt
setstate Wetter_HTML 2020-07-15 08:09:44 2_Icon-1 p33_night
setstate Wetter_HTML 2020-07-15 08:09:44 2_Icon-2 p18_day
setstate Wetter_HTML 2020-07-15 08:09:44 2_Icon-3 p22_day
setstate Wetter_HTML 2020-07-15 08:09:44 2_Icon-4 p07_day
setstate Wetter_HTML 2020-07-15 08:09:44 2_Icon-5 p07_day
setstate Wetter_HTML 2020-07-15 08:09:44 2_Icon-6 p19_day
setstate Wetter_HTML 2020-07-15 08:09:44 2_Icon-7 p22_day
setstate Wetter_HTML 2020-07-15 08:09:44 2_Icon-8 p19_night
setstate Wetter_HTML 2020-07-15 08:09:44 3_Temperatur <td><div class="cell" style="background-color: #79D030;; color: #000000">14°</div></td>\
                    <td><div class="cell" style="background-color: #79D030;; color: #000000">14°</div></td>\
                    <td><div class="cell" style="background-color: #B5FF33;; color: #000000">16°</div></td>\
                    <td><div class="cell" style="background-color: #D8F7A1;; color: #000000">18°</div></td>\
                    <td><div class="cell" style="background-color: #D8F7A1;; color: #000000">19°</div></td>\
                    <td><div class="cell" style="background-color: #D8F7A1;; color: #000000">18°</div></td>\
                    <td><div class="cell" style="background-color: #B5FF33;; color: #000000">16°</div></td>\
                    <td><div class="cell" style="background-color: #3CA12C;; color: #ffffff">13°</div></td>
setstate Wetter_HTML 2020-07-15 08:09:44 4_Gefühl <td><div class="cell">13°</div></td>\
                    <td><div class="cell">14°</div></td>\
                    <td><div class="cell">15°</div></td>\
                    <td><div class="cell">17°</div></td>\
                    <td><div class="cell">17°</div></td>\
                    <td><div class="cell">16°</div></td>\
                    <td><div class="cell">14°</div></td>\
                    <td><div class="cell">12°</div></td>
setstate Wetter_HTML 2020-07-15 08:09:44 5_Windrichtung <td><div class="cell"><div class="glyph winddir W">W</div></div></td>\
                    <td><div class="cell"><div class="glyph winddir W">W</div></div></td>\
                    <td><div class="cell"><div class="glyph winddir NW">NW</div></div></td>\
                    <td><div class="cell"><div class="glyph winddir NW">NW</div></div></td>\
                    <td><div class="cell"><div class="glyph winddir NW">NW</div></div></td>\
                    <td><div class="cell"><div class="glyph winddir NW">NW</div></div></td>\
                    <td><div class="cell"><div class="glyph winddir NW">NW</div></div></td>\
                    <td><div class="cell"><div class="glyph winddir NW">NW</div></div></td>
setstate Wetter_HTML 2020-07-15 08:09:44 6_Regen <td><div class="cell">65%</div></td>\
                    <td><div class="cell">10%</div></td>\
                    <td><div class="cell">10%</div></td>\
                    <td><div class="cell">5%</div></td>\
                    <td><div class="cell">20%</div></td>\
                    <td><div class="cell">20%</div></td>\
                    <td><div class="cell">15%</div></td>\
                    <td><div class="cell">10%</div></td>

Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW

amenomade

Du startest zu hoch in der HTML-Tags Hierarchie.

Bei reading01Regex funktioniert es, weil schon bei <div class="pictoicon" mehrere Matches möglich sind.

Dagen bei reading03Regex ist mit <tr class="temperatures" nur ein Match möglich.

Mit reading03Regex (?s)<td><div class="cell" style=.*?>(.*?)< würde es z.B. funktionieren.

Regex auf https://regex101.com/ testen. In Text String den Quellcode von deiner Seite kopieren
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Panik

Hallo amenomade,

Danke für die Erklärung.
Danach funktioniert es so für das 3.Reading.
Leider kann man das 4.Reading nicht mehr so klar abgrenzen.
Für das 5.Reading wird es auch machbar sein. Beim 6.Reading wieder mit Hürden.

Daher dachte ich, man könne es in zwei Durchgängen schaffen, die man ineinander verschachtelt.
Der erste Durchgang legt die Grenzen fest und der zweite Durchgang macht die acht Matches ... ::)
Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW

amenomade

Man kann doch auch eine passende Regex für das 4. finden, wie z.B.:
(?s)<td><div class="cell">([0-9°]+)<
Aber sowas (und sogar auch das vorherige 3.) wird sehr abhängig vom Design der Seite: machen die ein neues Style im div, und schon funktioniert es nicht mehr.

Ich würde eher in Richtung XPath suchen. Damit kann man viel mehr machen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Panik

Ich habe nun alles passend kreiert.

Danke für die Hilfe!

Zu xpath muss ich mich mal belesen ...
Raspberry3+,  CUL USB V3 mit V 1.66 CUL868, TRXRFX433, HM-MOD-UART, Phoscon-GW