[gelöst] "Gezeitenkalender" Daten/Werte einer Webseite beziehen

Begonnen von Canon.Fritz, 13 August 2017, 12:28:25

Vorheriges Thema - Nächstes Thema

amenomade

Dein reading01Regex matcht und extrahiert genau "Mo". Das wird dann immer Mo bringen, auch morgen, wenn die erste Linie nicht mehr "Mo" sein wird, sondern "Di".

Besser  (?s)Wasserstand<br.*?header1.*?>(..)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Canon.Fritz

Besten Dank @ amenomade :)

Jetzt funktioniert alle wie es soll.
Danke nochmal für die Denkanstöße. Mit einer Musterlösung am Anfang hätte das ganze nur halb soviel Spaß gemacht.

Vielleicht folgen bei mir in Zukunft noch weitere Regex Projekte.

FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

betateilchen

Das geht jetzt auch ohne HTTPMOD :)

Im SVN unter ./contrib/betateilchen/ befindet sich die Moduldatei 55_bshGezeiten.pm mit der man die entsprechenden Gezeitenvorhersagen bekommt. Der Ansatz für die Umwandlung in readings ist ein etwas anderer.


READINGS:
     2017-12-21 18:15:37   state           active
     2017-12-21 16:36:47   stationName     Hamburg, St. Pauli
     2017-12-21 18:15:37   tidalInfo.01    HW 21.12. 18:31  3.9
     2017-12-21 18:15:37   tidalInfo.02    LW 22.12. 01:31  0.4
     2017-12-21 18:15:37   tidalInfo.03    HW 22.12. 06:39  4.2
     2017-12-21 18:15:37   tidalInfo.04    LW 22.12. 13:55  0.4
     2017-12-21 18:15:37   tidalInfo.05    HW 22.12. 19:03  3.9


Die Daten für die nächsten Hoch-/Niedrigwasserstände stehen immer in einem fortlaufend nummerierten reading "tidalInfo.xx", die einzelnen Werte sind innerhalb der Zeile durch Leerzeichen getrennt.

Die Definition ist relativ simpel



define bsh_hh bshGezeiten DE__508P



DE__508P ist dabei der location-Code, den man über die BSH Webseite heraufinden kann.

Standardmäßig werden die nächsten 8 Wasserstände angezeigt, grundsätzlich kann das Modul maximal die vom BSH bereitgestellten Werte der nächsten sieben Tage auswerten und anzeigen, dafür gibt es das Attribut "bsh_numEntries". Will man alle verfügbaren Werte haben, stellt man den Wert einfach auf 99 :) (pragmatische Lösung...)

Das Modul besitzt zwei interne Timer


  • einmal pro Stunde wird die Webseite vom BSH (non-blocking) ausgelesen und aufbereitet
  • einmal pro Minute werden die readings aus den zuletzt gelesenen Daten aktualisiert, um "abgelaufene" Termine auszufiltern

was sonst noch?


  • Das Modul benötigt das zusätzliche perl Modul HTML::TreeBuilder::XPath das man unter debian z.B. mit  "apt-get -y install libhtml-treebuilder-xpath-perl" nachinstallieren kann.
  • Das Modul besitzt auch eine fast vollständige commandref, die man entweder über die "device specific help" oder über "help bshGezeiten" aufrufen kann.
  • Das Modul liegt nicht umsonst in ./contrib. Es funktioniert, aber ich habe nicht die Absicht, dafür den sonst üblichen Support zu leisten und jede Frage zu beantworten. Es ist einfach ad-hoc während zwei Bahnfahrten entstanden, weil ich die Gezeiten für Hamburg wissen wollte. Nehmt es einfach so, wie es ist. Wenn MIR noch Ideen kommen, die ich dort einbauen möchte, werde ich das vielleicht tun.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Canon.Fritz

Moin,

leider wurde auf der bsh Webseite die Vorhersage der Gezeiten entfernt.

Ich versuche schon verzweifelt meine Daten von einer anderen Webseite zu beziehen (Windfinder.de)

Leider komme ich mit dem Regex nicht mehr so ganz zurecht und bräuchte einen kleinen Denkanstoß  ;)
Anbei der Code der Webseite:
<section class="tidetables">

                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Dienstag, Jul 31</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="03:54">03:54</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.69">4.69</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="10:00">10:00</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.73">0.73</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="16:06">16:06</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="5.02">5.02</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="22:24">22:24</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.65">0.65</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Mittwoch, Aug 01</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="04:28">04:28</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.63">4.63</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="10:32">10:32</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.79">0.79</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="16:38">16:38</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.95">4.95</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="22:56">22:56</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.70">0.7</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Donnerstag, Aug 02</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="04:59">04:59</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.53">4.53</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="11:03">11:03</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.84">0.84</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="17:09">17:09</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.87">4.87</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="23:26">23:26</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.74">0.74</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Freitag, Aug 03</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="05:31">05:31</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.45">4.45</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="11:33">11:33</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.85">0.85</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="17:44">17:44</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.82">4.82</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="23:59">23:59</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.76">0.76</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Samstag, Aug 04</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="06:05">06:05</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.41">4.41</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="06:06">06:06</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.41">4.41</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="12:09">12:09</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.84">0.84</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="18:23">18:23</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.76">4.76</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Sonntag, Aug 05</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="00:38">00:38</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.79">0.79</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="06:47">06:47</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.38">4.38</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="06:48">06:48</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.38">4.38</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="12:52">12:52</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.86">0.86</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="19:11">19:11</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.69">4.69</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Montag, Aug 06</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="01:26">01:26</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.85">0.85</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="07:40">07:40</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.35">4.35</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="13:46">13:46</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.95">0.95</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="20:12">20:12</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.59">4.59</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Dienstag, Aug 07</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="02:28">02:28</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.95">0.95</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="08:47">08:47</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.33">4.33</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="14:56">14:56</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="1.04">1.04</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="21:24">21:24</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.53">4.53</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Mittwoch, Aug 08</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="03:45">03:45</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.96">0.96</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="10:05">10:05</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.38">4.38</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="16:20">16:20</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.99">0.99</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="22:44">22:44</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.55">4.55</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Donnerstag, Aug 09</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="05:03">05:03</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.83">0.83</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="11:22">11:22</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.52">4.52</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="17:39">17:39</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.78">0.78</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Freitag, Aug 10</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="00:00">00:00</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.64">4.64</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="06:13">06:13</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.65">0.65</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="12:30">12:30</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.69">4.69</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                      <tr>
                          <td><span class="forecast-time" data-value="18:49">18:49</span></td>
                          <td><div class="icon icon-spot-tide-low"></div></td>
                          <td><span class="units-wh" data-value="0.54">0.54</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>
                <div class="tidetable">
                  <h3 class="h h--nomargin tidetable__date">Samstag, Aug 11</h3>
                  <table border="0" class="tidetable__table">
                      <tbody><tr>
                          <th class="tidetable__time">Zeit</th>
                          <th class="tidetable__type">Typ</th>
                          <th class="tidetable__level">Wasserstand</th>
                      </tr>

                      <tr>
                          <td><span class="forecast-time" data-value="01:08">01:08</span></td>
                          <td><div class="icon icon-spot-tide-high"></div></td>
                          <td><span class="units-wh" data-value="4.73">4.73</span> <span class="units-desc-wh">m</span></td>
                      </tr>
                  </tbody></table>
                </div>

            </section>


Frage : Wie komme ich an die jeweiligen Daten für (Datum,Zeit,Typ,Wasserstand) ?

Ich hoffe es kann mir mal wider jemand auf die Sprünge helfen.
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

betateilchen

Zitat von: Canon.Fritz am 31 Juli 2018, 21:43:10
leider wurde auf der bsh Webseite die Vorhersage der Gezeiten entfernt.

Das ist so nicht richtig. Die Gezeitenvorhersage gibt es dort nach wie vor, allerdings in anderer Form und nicht mehr als Tabelle.

Fakt ist, dass das BSH für die Einbindung von Gezeitendaten auf Webseiten von Drittanbietern nun richtig viel Geld haben möchte.
Mal schauen, wieviele der Anbieter von Gezeitendaten, die meistens auf die BSH Daten zurückgreifen, demnächst auf eine Veröffentlichung verzichten werden.

Mein bsh-Gezeitenmodul funktioniert aktuell zwar noch, aber auch auf der dafür verwendeten Webseite des BSH findet sich bereits der Hinweis, dass der Dienst eingestellt wird.

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

Canon.Fritz

Okay, dann müssen wir uns also künftig eine andere Alternative als das bsh suchen.

Kann mir noch keiner einen Denkanstoß für die Windfinder Seite geben ?
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

Canon.Fritz

Ich konnte nun doch die Werte der Windfinder Webseite entlocken.

Anbei poste ich mal meine Lösung für die jenigen, die sich auch einen Gezeitenkalender anlegen möchten.
Diese Variante gibt einen Überblick für die nächsten 3 Tage.

defmod Gezeiten_Windfinder HTTPMOD https://de.windfinder.com/tide/dangast 3600
attr Gezeiten_Windfinder userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex reading13Name reading13Regex reading14Name reading14Regex reading15Name reading15Regex reading16Name reading16Regex reading17Name reading17Regex reading18Name reading18Regex reading19Name reading19Regex reading20Name reading20Regex reading21Name reading21Regex reading22Name reading22Regex reading23Name reading23Regex reading24Name reading24Regex reading25Name reading25Regex reading26Name reading26Regex reading27Name reading27Regex reading28Name reading28Regex reading29Name reading29Regex reading30Name reading30Regex reading31Name reading31Regex reading32Name reading32Regex reading33Name reading33Regex reading34Name reading34Regex reading35Name reading35Regex reading36Name reading36Regex reading37Name reading37Regex reading38Name reading38Regex reading39Name reading39Regex
attr Gezeiten_Windfinder reading01Name fc1-Tag
attr Gezeiten_Windfinder reading01Regex (?s)h h--nomargin tidetable__date.*?>([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading02Name fc1.1-Zeit
attr Gezeiten_Windfinder reading02Regex (?s)"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading03Name fc1.1-Typ
attr Gezeiten_Windfinder reading03Regex (?s)icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading04Name fc1.1-Wasserstand
attr Gezeiten_Windfinder reading04Regex (?s)"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading05Name fc1.2-Zeit
attr Gezeiten_Windfinder reading05Regex (?s)"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading06Name fc1.2-Typ
attr Gezeiten_Windfinder reading06Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading07Name fc1.2-Wasserstand
attr Gezeiten_Windfinder reading07Regex (?s)units-wh.*?units-wh.*?">(\d.\d\d).*?
attr Gezeiten_Windfinder reading08Name fc1.3-Zeit
attr Gezeiten_Windfinder reading08Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading09Name fc1.3-Typ
attr Gezeiten_Windfinder reading09Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading10Name fc1.3-Wasserstand
attr Gezeiten_Windfinder reading10Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading11Name fc1.4-Zeit
attr Gezeiten_Windfinder reading11Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading12Name fc1.4-Typ
attr Gezeiten_Windfinder reading12Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading13Name fc1.4-Wasserstand
attr Gezeiten_Windfinder reading13Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading14Name fc2-Tag
attr Gezeiten_Windfinder reading14Regex (?s)h h--nomargin tidetable__date.*?h h--nomargin tidetable__date.*?>([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading15Name fc2.1-Zeit
attr Gezeiten_Windfinder reading15Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading16Name fc2.1-Typ
attr Gezeiten_Windfinder reading16Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading17Name fc2.1-Wasserstand
attr Gezeiten_Windfinder reading17Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading18Name fc2.2-Zeit
attr Gezeiten_Windfinder reading18Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading19Name fc2.2-Typ
attr Gezeiten_Windfinder reading19Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading20Name fc2.2-Wasserstand
attr Gezeiten_Windfinder reading20Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading21Name fc2.3-Zeit
attr Gezeiten_Windfinder reading21Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading22Name fc2.3-Typ
attr Gezeiten_Windfinder reading22Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading23Name fc2.3-Wasserstand
attr Gezeiten_Windfinder reading23Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading24Name fc2.4-Zeit
attr Gezeiten_Windfinder reading24Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading25Name fc2.4-Typ
attr Gezeiten_Windfinder reading25Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading26Name fc2.4-Wasserstand
attr Gezeiten_Windfinder reading26Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading27Name fc3-Tag
attr Gezeiten_Windfinder reading27Regex (?s)h h--nomargin tidetable__date.*?h h--nomargin tidetable__date.*?h h--nomargin tidetable__date.*?>([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading28Name fc3.1-Zeit
attr Gezeiten_Windfinder reading28Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading29Name fc3.1-Typ
attr Gezeiten_Windfinder reading29Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading30Name fc3.1-Wasserstand
attr Gezeiten_Windfinder reading30Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading31Name fc3.2-Zeit
attr Gezeiten_Windfinder reading31Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading32Name fc3.2-Typ
attr Gezeiten_Windfinder reading32Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading33Name fc3.2-Wasserstand
attr Gezeiten_Windfinder reading33Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading34Name fc3.3-Zeit
attr Gezeiten_Windfinder reading34Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading35Name fc3.3-Typ
attr Gezeiten_Windfinder reading35Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading36Name fc3.3-Wasserstand
attr Gezeiten_Windfinder reading36Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder reading37Name fc3.4-Zeit
attr Gezeiten_Windfinder reading37Regex (?s)"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?"forecast-time".*?>(\d\d:\d\d).*?
attr Gezeiten_Windfinder reading38Name fc3.4-Typ
attr Gezeiten_Windfinder reading38Regex (?s)icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-.*?icon icon-spot-tide-([a-zA-Z]+).*?
attr Gezeiten_Windfinder reading39Name fc3.4-Wasserstand
attr Gezeiten_Windfinder reading39Regex (?s)"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?"units-wh".*?>(\d.\d\d).*?
attr Gezeiten_Windfinder room 03_Wetter



Das Thema ist für mich erstmal gelöst  ;)

FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

rischbiter123

Hier noch eine mögliche ReadingsGroup:
defmod Gezeiten_Whv readingsGroup TYPE=HTTPMOD:fc1-Tag,<br>,fc1\..*-Zeit,<br>,fc1\..*-Typ,<br>,fc1\..*-Wasserstand,<br>,fc2-Tag,<br>,fc2\..*-Zeit,<br>,fc2\..*-Typ,<br>,fc2\..*-Wasserstand,<br>,fc3-Tag,<br>,fc3\..*-Zeit,<br>,fc3\..*-Typ,<br>,fc3\..*-Wasserstand,<br>
attr Gezeiten_Whv fp_Termine 252,456,0,Gezeiten_Whv
attr Gezeiten_Whv nonames 1
attr Gezeiten_Whv notime 1
attr Gezeiten_Whv room Kalender
attr Gezeiten_Whv style style="font-size:12px;;;;font-weight:bold"


Leider ist es mir zu warm zum Formatieren. Icon statt high und low und m für Meter beim Wasserstand. Vielleicht hat ja jemand Lust und Zeit.
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

Canon.Fritz

Hallo Zusammen,

leider hat Windfinder den Code der Webseite ein wenig angepasst.
Ich bekomme nun keine Daten mehr mit dem HTTPMOD ausgelesen.

Ich habe bereits mit regex101.com den neuen Code ausprobiert. Auf regex101 kann ich die Daten wunderbar ablesen (siehe Bild 1).

Es ist denkbar das in meinen HTTPMOD Device etwas aktiviert werden muss (siehe Bild 2 und 3).

Wann mir da mal jemand auf die Sprünge helfen ?
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

amenomade

Bitte ein "list" vom Device statt Bildschirmkopien liefern. Mit Photos kann man kein copy/paste machen.

Die Seite, die Du im HTTPMOD aufrufst liefert kein "tidetable-day-date" zurück. Das kannst Du sehen, wenn Du das Attribut showBody auf 1 setzt.

Daher kriegst Du kein Reading

Das wird schwierig, da anscheinend alle Daten in einer API jetzt verlagert worden sind, und diese API braucht ein Token. Wenn Du mal die Doku dieser API findest kann man gucken.

Z.B. finde ich die Daten in Json Format hier: https://api.windfinder.com/v2/spots/de1729/tides/?limit=-1&customer=wfweb&version=1.0&token=ca350dcbe205826591c0895086217b60
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

OK
Mit folgendem kriege ich ein gültiges Token, und dann die Daten in JSON Format:
defmod Gezeiten_Windfinder HTTPMOD https://api.windfinder.com/v2/spots/de1729/tides/?limit=-1&customer=wfweb&version=1.0&token=$sid 0
attr Gezeiten_Windfinder enableControlSet 1
attr Gezeiten_Windfinder reAuthRegex UNAUTHORIZED
attr Gezeiten_Windfinder showBody 1
attr Gezeiten_Windfinder sid01IdRegex window.API_TOKEN = '(.*?)'
attr Gezeiten_Windfinder sid01URL https://de.windfinder.com/tide/dangast

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Und z.B. mit
attr Gezeiten_Windfinder reading01Name High
attr Gezeiten_Windfinder reading01Regex dtl":"(.{25})","tp":"high.*?dtl":"(.{25})","tp":"high.*?dtl":"(.{25})","tp":"high.*?dtl":"(.{25})","tp":"high.*?dtl":"(.{25})","tp":"high.*?dtl":"(.{25})","tp":"high.*?dtl":"(.{25})","tp":"high
attr Gezeiten_Windfinder reading02Name Low
attr Gezeiten_Windfinder reading02Regex dtl":"(.{25})","tp":"low.*?dtl":"(.{25})","tp":"low.*?dtl":"(.{25})","tp":"low.*?dtl":"(.{25})","tp":"low.*?dtl":"(.{25})","tp":"low.*?dtl":"(.{25})","tp":"low.*?dtl":"(.{25})","tp":"low

die Gezeiten Readings
Die Feinheiten schaffst Du bestimmt selbst ;)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Canon.Fritz

Zitat von: amenomade am 22 April 2020, 00:36:24
Bitte ein "list" vom Device statt Bildschirmkopien liefern. Mit Photos kann man kein copy/paste machen.

Sorry werde ich beim nächsten mal machen  ;)

Danke nochmal für den Tipp, das Attribut showBody auf 1 zu setzen. Da habe ich wieder etwas dazu gelernt.

Wie du jetzt aber an den api Link gekommen bist bzw. den API_TOKEN verwendest habe ich jetzt keine Ahnung. Aber es läuft auch bei mir einwandfrei 8).

Vielen Dank schon einmal @amenomade für deine Mühe und die schnelle Hilfe. Einfach top !!

Ich habe noch 2 Readings hinzugefügt, um die Wasserstände ablesen zu können:
attr test_Gezeiten_Windfinder reading03Name HW_Level
attr test_Gezeiten_Windfinder reading03Regex dtl":".*?,"tp":"high","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"high","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"high","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"high","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"high","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"high","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"high","th":([0-9].[0-9]?[0-9]?).*?
attr test_Gezeiten_Windfinder reading04Name NW_Level
attr test_Gezeiten_Windfinder reading04Regex dtl":".*?,"tp":"low","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"low","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"low","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"low","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"low","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"low","th":([0-9].[0-9]?[0-9]?).*?dtl":".*?,"tp":"low","th":([0-9].[0-9]?[0-9]?).*?


Jetzt habe ich es nur noch nicht hinbekommen, vom reading01 oder reading02 das Datum und die Zeit in 2 getrennte readings zu verpacken  :-\

Wie schaffe ich es aus diesem Reading 2020-04-22T01:36:00+02:00

zwei neue anzulegen ? Das eine zeigt nur das Datum an2020-04-22
und das andere nur die Zeit 01:36

Vielleicht hättest du da noch eine Lösung für mich.
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

amenomade

(.{25})
Das "capturing group" für genau 25 Zeichen

Wenn Du nur die 10 erste fangen willst, lässt Du die restliche raus:
(.{10}).{15}

Nur die 5 letzte:
.{20}(.{5})
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus