Weewx generierte Daten einbinden - HTML mit HTTPMOD auslesen

Begonnen von Stargazer, 03 August 2016, 14:14:27

Vorheriges Thema - Nächstes Thema

Stargazer

Hallo zusammen,

ich habe nun schon einiges zum Auslesen von Websites via HTTPMOD gelesen. Und auch schon einiges Versucht, dich irgendwie will das nicht so laufen. Und zwar gibt es im Netz soweit ich gelesen habe, eine mehr oder weniger gute Lösung zum Auslesen der Daten der Wettersoftware Weewx. Doch es ginge ja auch einfacher. Es generiert ja schon eine html-site, die man doch via dem MOD-Modul Auslesen könnte, so der Plan. Daten bekomme ich auch, doch fehlt mit der Schubs, wie ich diese am besten extrahieren kann. Ich würde mich da auf so 5-6 Readings beschränken. Doch wenn ich readingsName und Readingsregex einsetzen möchte, werde ich da doch unsicher. Zudem habe ich auch immer gesehen, dass die ReadingsName und auch die RegEx ja eigentlich durchnummeriert sein müsste. Geht bei mir irgendwie nicht.
FHEM hat ja immer ein .* da hinter stehen und übernimmt das dann auch.

Anbei mal ein Ausschnitt des buf (Buffers ?) :

HTTP/1.1 200 OK Date: Wed, 03 Aug 2016 11:57:47 GMT Server: Apache/2.4.10 (Raspbian) Last-Modified: Wed, 03 Aug 2016 11:55:30 GMT ETag: "3340-53929828bc126" Accept-Ranges: bytes Content-Length: 13120 Vary: Accept-Encoding Connection: close Content-Type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head profile="http://www.w3.org/2005/10/profile"> <title>Löhne, Germany Current Weather Conditions</title> <link rel="stylesheet" type="text/css" href="weewx.css"/> <link rel="icon" type="image/png" href="favicon.ico" /> <script type="text/javascript"> function openURL(urlname) { window.location=urlname; } function openNoaaFile(date) { var url = "NOAA/NOAA-"; url = url + date; url = url + ".txt"; window.location=url; } </script> </head> <body> <div id="container"> <div id="masthead"> <h1>Löhne, Germany</h1> <h2>Current Weather Conditions</h2> <h2>03.08.2016 13:55:00</h2> </div> <div id="stats_group"> <div class="stats"> <div class="stats_header"> Current Conditions </div> <table> <tbody> <tr> <td class="stats_label">Outside Temperature</td> <td class="stats_data">20,0°C</td> </tr> <tr> <td class="stats_label">Wind Chill</td> <td class="stats_data">21,2°C</td> </tr> <tr> <td class="stats_label">Heat Index</td> <td class="stats_data">20,0°C</td> </tr> <tr> <td class="stats_label">Dewpoint</td> <td class="stats_data">17,8°C</td> </tr> <tr> <td class="stats_label">Humidity</td> <td class="stats_data">87%</td> </tr> <tr> <td class="stats_label">Barometer</td> <td class="stats_data">1009,1 mbar</td> </tr> <tr> <td class="stats_label">Barometer Trend (3 hours)</td> <td class="stats_data">0,4 mbar</td> </tr> <tr> <td class="stats_label">Wind</td> <td class="stats_data">2,9 m/s from 202° (SSW)</td> </tr> <tr> <td class="stats_label">Rain Rate</td> <td class="stats_data">0,0 mm/hr</td> </tr> <tr> <td class="stats_label">Inside Temperature</td> <td class="stats_data">21,0°C</td> </tr> </tbody> </table> </div> <p>&nbsp;</p> <div class="stats"> <div class="stats_header"> Since Midnight </div> <table> <tbody> <tr> <td class="stats_label"> High Temperature<br/> Low Temperature </td> <td class="stats_data"> 20,0°C at 13:37:32<br/> 17,1°C at 00:05:00 </td> </tr> <tr> <td class="stats_label"> High Heat Index<br/> Low Wind Chill </td> <td class="stats_data"> 20,0°C at 13:37:32<br/> 16,5°C at 00:00:04 </td> </tr> <tr> <td class="stats_label"> High Humidity<br/> Low Humidity </td> <td class="stats_data"> 92% at 00:41:30<br/> 87% at 13:49:32 </td> </tr> <tr> <td class="stats_label"> High Dewpoint<br/> Low Dewpoint </td> <td class="stats_data"> 18,2°C at 11:41:28<br/> 15,6°C at 00:00:04 </td> </tr> <tr> <td class="stats_label"> High Barometer<br/> Low Barometer </td> <td class="stats_data"> 1011,4 mbar at 00:00:04<br/> 1008,4 mbar at 08:41:35 </td> </tr> <tr> <td class="stats_label">Today's Rain</td> <td class="stats_data">2,0 mm</td> </tr> <tr> <td class="stats_label">High Rain Rate</td> <td class="stats_data">2,6 mm/hr at 00:15:00</td> </tr> <tr> <td class="stats_label"> High Wind </td> <td class="stats_data"> 6,7 m/s from 135° at 12:39:35 </td> </tr> <tr> <td class="stats_label"> Average Wind </td> <td class="stats_data"> 2,4 m/s </td> </tr> <tr> <td class="stats_label"> RMS Wind </td> <td class="stats_data"> 2,4 m/s </td> </tr> <tr> <td class="stats_label"> Vector Average Speed<br/> Vector Average Direction </td> <td class="stats_data"> 2,3 m/s<br/> 210° </td> </tr> <tr> <td class="stats_label"> High Inside Temperature<br/> Low Inside Temperature </td> <td class="stats_data"> 21,0°C at 13:45:31<br/> 20,0°C at 07:45:00 </td> </tr> </tbody> </table> </div> <!--End class "stats" --> <p>&nbsp;</p> </div> <!--End class "stats_group" --> <div id="content"> <div id="about"> <div class="header"> About this weather station: </div> <table> <caption class="caption">Location</caption> <tr> <td class="label">Latitude:</td> <td class="data">52&deg; 07.80' N</td> </tr> <tr> <td class="label">Longitude:</td> <td class="data">008&deg; 27.00' E</td> </tr> <tr> <td class="label">Altitude:</td> <td class="data">72 meters</td> </tr> </table> <p> This station uses a TFA Meteotime Duo, controlled by <a href="http://www.weewx.com">'weewx'</a>, an experimental weather software system written in Python. Weewx was designed to be simple, fast, and easy to understand by leveraging modern software concepts. </p> <p><a href="RSS/weewx_rss.xml">RSS feed</a></p> <p><a href="mobile.html">Mobile formatted</a></p> <p><a href="smartphone/index.html">Smartphone formatted</a></p> <p>Weewx uptime: 3 days, 2 hours, 54 minutes<br/> Server uptime: 4 days, 16 hours, 36 minutes<br/> weewx v3.4.0</p> </div> <!-- End id "about" --> <div id="almanac"> <div class="header"> Today's Almanac </div> <div class="celestial_group"> <div class="celestial_body"> <table> <caption class="caption">Sun</caption> <tr> <td class="label">Start civil twilight:</td> <td class="data">05:08:54</td> </tr> <tr> <td class="label">Sunrise:</td> <td class="data">05:50:46</td> </tr> <tr> <td class="label">Transit:</td> <td class="data">13:32:19</td> </tr> <tr> <td class="label">Sunset:</td> <td class="data">21:12:49</td> </tr> <tr> <td class="label">End civil twilight:</td> <td class="data">21:54:24</td> </tr> <tr> <td class="label">Azimuth:</td> <td class="data">189.4&deg;</td> </tr> <tr> <td class="label">Altitude:</td> <td class="data">54.9&deg;</td> </tr> <tr> <td class="label">Right ascension:</td> <td class="data">134.0&deg;</td> </tr> <tr> <td class="label">Declination:</td> <td class="data">17.3&deg;</td> </tr> <tr> <td class="label">Equinox:</td> <td class="data">22.09.2016 16:21:12</td> </tr> <tr> <td class="label">Solstice:</td> <td class="data">21.12.2016 11:44:02</td> </tr> </table> </div> <!-- end class "celestial_body" --> <div class="celestial_body"> <table> <caption class="caption">Moon</caption> <tr> <td class="label">Rise:</td> <td class="data">06:31:35</td> </tr> <tr> <td class="label">Transit:</td> <td class="data">14:00:46</td> </tr> <tr> <td class="label">Set:</td> <td class="data">21:18:48</td> </tr> <tr> <td class="label">Azimuth:</td> <td class="data">177.8&deg;</td> </tr> <tr> <td class="label">Altitude:</td> <td class="data">50.3&deg;</td> </tr> <tr> <td class="label">Right ascension:</td> <td class="data">141.1&deg;</td> </tr> <tr> <td class="label">Declination:</td> <td class="data">12.4&deg;</td> </tr> <tr> <td class="label">Full moon:</td> <td class="data">18.08.2016 11:26:33</td> </tr> <tr> <td class="label">New moon:</td> <td class="data">01.09.2016 11:03:05</td> </tr> <tr> <td class="label">Phase:</td> <td class="data">New<br/>(0% full)</td> </tr> </table> </div> <!-- end class "celestial_body" --> </div> <!-- end class "celestial_group" --> </div> <!-- end id "almanac" --> <div id="plots"> <img src="daytempdew.png" alt="temperatures" /> <img src="daytempchill.png" alt="heatchill" /> <img src="dayrain.png" alt="rain" /> <img src="daywind.png" alt="wind" /> <img src="daybarometer.png" alt="barometer"/> <img src="daywinddir.png" alt="Hi Wind" /> <img src="dayinside.png" alt="Inside" /> <img src="daywindvec.png" alt="Wind Vector" /> </div> <!-- End id "plots" --> </div> <!-- End id "content" --> <div id="navbar"> <input type="button" value=" Current " onclick="openURL('index.html')" /> <input type="button" value=" Week " onclick="openURL('week.html')" /> <input type="button" value=" Month " onclick="openURL('month.html')" /> <input type="button" value=" Year " onclick="openURL('year.html')" /> <p>Monthly summary:&nbsp; <select NAME=noaaselect onchange="openNoaaFile(value)"> <option value="2016-01">2016-01</option> <option value="2016-02">2016-02</option> <option value="2016-03">2016-03</option> <option value="2016-04">2016-04</option> <option value="2016-05">2016-05</option> <option value="2016-06">2016-06</option> <option value="2016-07">2016-07</option> <option value="2016-08">2016-08</option> <option selected>-Select month-</option> </select> <br/> Yearly summary:&nbsp; <select NAME=noaaselect onchange="openNoaaFile(value)"> <option value="2016">2016</option> <option selected>-Select year-</option> </select> </p> </div> </div> </body> </html>

Hat jemand von euch noch einen Tipp, wo ich drauf achten sollte ?

Viele Grüße und vielen Dank

André

Stargazer

Hallo,

ich habe nun nochmal etwas experimentiert, auch unter regex101.com.
Auch habe ich mir diesen Thread nochmals durchgelesen...so Ansatzweise scheint der Euro centweise zu fallen:
https://forum.fhem.de/index.php?topic=53448.0

Unter regex101.com habe ich folgendes Reading generiert:

(?s)>Barometer<(.*?)<\/td>

..das gibt er mir dann aus:

MATCH 1
1.   [36-75]   `/td> <td class="stats_data">1009,7 mbar`

der dazu gehörige 'buf' sieht so aus:

<td class="stats_label">Barometer</td> <td class="stats_data">1009,7 mbar</td> </tr>

Jetzt würde ich aber gerne nur den Wert, sprich die 1009,7 mbar, auslesen. Gut...wenn es ginge noch den Parameternamen dazu, aber ich wäre schonmal froh, den Wert zu haben. Das Parametrieren des Ausdrucks ist echt eine harte Nummer. Aber ich möchte mich gerne da durch beißen. Nur hänge ich mit den Beinen derzeit noch in der Luft, obwohl ich den Boden schon sehe.

Könnte mir da jemand von euch noch einmal unterstützen ?

Viele Grüße und vielen Dank im vorraus...

André

Stargazer

Hi,

anbei nochmal ein Ausschnitt der Readings..

VG André

Stargazer

Hallo zusammen,

ist doch garnicht ganz so schwer ;).

Mit der Option rennt das :
   
(?s)>Barometer</td>(.*?)<\/td>

Viele Grüße

André

Stargazer

Hallo zusammen,

hat man auch nicht oft, dass man sich die Antworten selber gibt.. ;D ;D ;).

Ich stehe aber trotzdem noch im Regen, denn wenn ich im Syntax auch den Trend auslesen möchte, der ja Leerzeichen und auch noch eine Klammer enthält, wird es blöd.
Da kommt nämlich nix. Als Beispiel vom Code nehme ich mal:

>Barometer Trend (3 hours)<

Oder aber auch Parameter mit > High Wind < will auch nicht, wegen den Leerzeichen an den Klammern.

Hat da noch jemand einen Tipp ?


Viele Grüße und Danke

André