HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage

Begonnen von Rewe2000, 07 Oktober 2021, 13:46:26

Vorheriges Thema - Nächstes Thema

Rewe2000

Hallo,

ich versuche schon seit längeren die Belegung einer Sauna eines Freizeitbades über HTTPMOD in ein Reading zu bekommen. Irgendwie scheint es mir, ist es nicht möglich den Inhalt ab <multiple-ticos-bar-counter mit HTTPMOD gelesen zu bekommen. Egal was ich da als Suchbegriff im Regex auch verwende, es wird nichts innerhalb von <multiple-ticos-bar-counter gefunden.

Die URL der sehr einfachen Seite lautet wie folgt: https://www.swg-gun.de/besuchercounter_saunadorf.html


Ich würde gerne die beiden Werte im HTML Code nach dem Gleichheitszeichen lesen wollen:
class="progress-bar-danger bg-danger progress-bar" aria-valuenow=??
class="progress-bar-success bg-success progress-bar" aria-valuenow=??

Der HTML-Code der Seite lautet wie folgt:
html><head>
  <!-- Ticos specific ressources -->
  <!-- Attention CORS is activated: The domain must be activated from support@ticos-systems.ch <mailto:support@ticos-systems.ch> . -->
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://app.ticos-systems.cloud/scripts/AngularEmbeddedCounter.js"></script>
<style>@import "https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css";.progress-bar[_ngcontent-igh-c5]{font-size:1em}</style><style>@import "https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css";.main[_ngcontent-igh-c4]{margin:10px;font-size:2rem}.powered-by[_ngcontent-igh-c4]{font-size:1rem;text-align:right}.title[_ngcontent-igh-c4]{margin-top:.1rem}.ticos-progress-bar[_ngcontent-igh-c4]{height:7vh;font-size:calc(2vh + 10px);min-height:50px}.description[_ngcontent-igh-c4]{font-size:1rem}</style><style>[_nghost-igh-c2] {
      width: 100%;
      display: flex;
    }</style></head>
<body>
  <div>
    <multiple-ticos-bar-counter tenant="2109" interval="10000" organizations="[30219]" displays="[&quot;Saunadorf im Juramare&quot;]" _nghost-igh-c5="" ng-version="9.0.7"><div _ngcontent-igh-c5=""><ticos-bar _ngcontent-igh-c5="" _nghost-igh-c4=""><div _ngcontent-igh-c4="" class="main card"><div _ngcontent-igh-c4="" class="card-body"><progressbar _ngcontent-igh-c4="" type="success" class="ticos-progress-bar progress" _nghost-igh-c2="" max="100"><!----><bar _ngcontent-igh-c2="" role="progressbar" aria-valuemin="0" class="progress-bar-danger bg-danger progress-bar" aria-valuenow="30" aria-valuetext="30%" style="height: 100%; width: 30%;">30</bar><bar _ngcontent-igh-c2="" role="progressbar" aria-valuemin="0" class="progress-bar-success bg-success progress-bar" aria-valuenow="70" aria-valuetext="70%" style="height: 100%; width: 70%;">70</bar><!----><!----></progressbar><div _ngcontent-igh-c4="" class="title"><b _ngcontent-igh-c4="">Saunadorf im Juramare</b></div><!----><!----><div _ngcontent-igh-c4="" class="powered-by"> Powered by Ticos Systems </div></div></div></ticos-bar></div><!---->
    </multiple-ticos-bar-counter>
  </div>
</body></html>


Gibt es da eine Möglichkeit an die beiden Werte heranzukommen?
Ich wollte diese Daten in einem Trend darstellen, um die Zeiten mit der geringsten Belegung zu ermitteln.

Wahrscheinlich sind da tiefere Kenntnisse notwendig als ich sie mitbringe.
Über ein wenig Nachhilfe würde ich mich freuen.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Rewe2000

Hallo,

keiner eine Idee oder zumindest einen Tipp für mich?
Mache ich da etwas falsch oder sind die HTML-Daten des Zählers nicht über HTTPMOD zu lesen?

Mein Regex sollte funktionieren, prüfe ich dieses mit "The Regex Coach" liefert es die passenden Werte.

Über einen Tipp würde ich mich freuen.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

StefanStrobel

Hallo Reinhard,

wie sieht denn Deine Regex bzw. die konkrete Konfiguration aus?

Gruss
   Stefan

gestein

Hallo Stefan,

ich habe mich auch an sowas versucht.
Mittlerweile klappt es.

Wie hast Du denn die regex formuliert? Ist der Wert, den Du im Reading haben möchtest in "()"?
https://forum.fhem.de/index.php/topic,123521.0.html

lg, Gerhard

Rewe2000

Hallo,

zunächst mal vorab vielen Dank für euere Mühe.

Ich liefere zunächst noch einige Daten nach.
Das List des HTTPMOD Device bei mir, sieht wie folgt aus:
Internals:
   BUSY       0
   CFGFN     
   DEF        https://www.swg-gun.de/besuchercounter_saunadorf.html 600
   FUUID      6171a443-f33f-7df9-ef2c-1cf1ce132b630123
   Interval   600
   MainURL    https://www.swg-gun.de/besuchercounter_saunadorf.html
   ModuleVersion 4.1.10 - 6.7.2021
   NAME       Sauna_Belegung
   NOTIFYDEV  global
   NR         27004
   NTFY_ORDER 50-Sauna_Belegung
   STATE      Belegung: Anwesend Personen
   TYPE       HTTPMOD
   value     
   CompiledRegexes:
   HttpUtils:
     NAME       
     addr       https://www.swg-gun.de:443
     auth       0
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl https://www.swg-gun.de/besuchercounter_saunadorf.html
     header     
     host       www.swg-gun.de
     httpheader HTTP/1.1 200 OK
Date: Thu, 21 Oct 2021 17:39:19 GMT
Server: Apache
Upgrade: h2
Connection: Upgrade, close
Last-Modified: Mon, 24 Aug 2020 09:18:20 GMT
ETag: "2ad-5ad9c11482f00"
Accept-Ranges: bytes
Content-Length: 685
x-xss-protection: 1; mode=block
Content-Type: text/html
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    443
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /besuchercounter_saunadorf.html
     protocol   https
     redirects  0
     timeout    2
     url        https://www.swg-gun.de/besuchercounter_saunadorf.html
     sslargs:
   QUEUE:
   READINGS:
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        https://www.swg-gun.de/besuchercounter_saunadorf.html
Attributes:
   DbLogExclude .*
   comment    Dieses Modul liest von der Homepage von "https://www.swg-gun.de/Freizeitbaeder/Saunadorf-im-Juramare" die Belegung der Sauna aus und legt diese in dem Reading Belegung ab.
   disable    0
   enableControlSet 1
   reading01Name Anwesend
   reading01Regex class="progress-bar-danger bg-danger progress-bar" aria-valuenow="([0-9.]+)
   stateFormat Belegung: Anwesend Personen
   verbose    2


Sehe ich mir das Callback unter Verbose 5 an, so fehlt der Teil im HTML, nachdem ich eigentlich suche:
2021.10.21 19:42:41 4: Sauna_Belegung: Read callback: request type was update retry 0,
header: HTTP/1.1 200 OK
Date: Thu, 21 Oct 2021 17:42:41 GMT
Server: Apache
Upgrade: h2
Connection: Upgrade, close
Last-Modified: Mon, 24 Aug 2020 09:18:20 GMT
ETag: "2ad-5ad9c11482f00"
Accept-Ranges: bytes
Content-Length: 685
x-xss-protection: 1; mode=block
Content-Type: text/html, body length 685
2021.10.21 19:42:41 5: Sauna_Belegung: Read callback: body
<html>
<head>
  <!-- Ticos specific ressources -->
  <!-- Attention CORS is activated: The domain must be activated from support@ticos-systems.ch <mailto:support@ticos-systems.ch> . -->
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://app.ticos-systems.cloud/scripts/AngularEmbeddedCounter.js"></script>
</head>
<body>
  <div>
    <multiple-ticos-bar-counter tenant="2109"
                                interval="10000"
                                organizations="[30219]"
                                displays='["Saunadorf im Juramare"]'>
    </multiple-ticos-bar-counter>
  </div>
</body>
</html>


Sehe ich mir den HTML-Code mit Firefox (rechte Maustaste "Untersuchen") an, so ist auch der Teil enthalten (4. Zeile von unten), welchen ich mit dem RegEx lesen will:
<html><head>
  <!-- Ticos specific ressources -->
  <!-- Attention CORS is activated: The domain must be activated from support@ticos-systems.ch <mailto:support@ticos-systems.ch> . -->
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://app.ticos-systems.cloud/scripts/AngularEmbeddedCounter.js"></script>
<style>@import "https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css";.progress-bar[_ngcontent-dfk-c5]{font-size:1em}</style><style>@import "https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css";.main[_ngcontent-dfk-c4]{margin:10px;font-size:2rem}.powered-by[_ngcontent-dfk-c4]{font-size:1rem;text-align:right}.title[_ngcontent-dfk-c4]{margin-top:.1rem}.ticos-progress-bar[_ngcontent-dfk-c4]{height:7vh;font-size:calc(2vh + 10px);min-height:50px}.description[_ngcontent-dfk-c4]{font-size:1rem}</style><style>[_nghost-dfk-c2] {
      width: 100%;
      display: flex;
    }</style></head>
<body>
  <div>
    <multiple-ticos-bar-counter tenant="2109" interval="10000" organizations="[30219]" displays="[&quot;Saunadorf im Juramare&quot;]" _nghost-dfk-c5="" ng-version="9.0.7"><div _ngcontent-dfk-c5=""><ticos-bar _ngcontent-dfk-c5="" _nghost-dfk-c4=""><div _ngcontent-dfk-c4="" class="main card"><div _ngcontent-dfk-c4="" class="card-body"><progressbar _ngcontent-dfk-c4="" type="success" class="ticos-progress-bar progress" _nghost-dfk-c2="" max="100"><!----><bar _ngcontent-dfk-c2="" role="progressbar" aria-valuemin="0" class="progress-bar-danger bg-danger progress-bar" aria-valuenow="55" aria-valuetext="55%" style="height: 100%; width: 55%;">55</bar><bar _ngcontent-dfk-c2="" role="progressbar" aria-valuemin="0" class="progress-bar-success bg-success progress-bar" aria-valuenow="45" aria-valuetext="45%" style="height: 100%; width: 45%;">45</bar><!----><!----></progressbar><div _ngcontent-dfk-c4="" class="title"><b _ngcontent-dfk-c4="">Saunadorf im Juramare</b></div><!----><!----><div _ngcontent-dfk-c4="" class="powered-by"> Powered by Ticos Systems </div></div></div></ticos-bar></div><!---->
    </multiple-ticos-bar-counter>
  </div>


</body></html>


Ich vermute fast, mein RegEx ist korrekt, aber der gesuchte HTML-Code wird durch mein HTTPMOD Modul überhaupt nicht gelesen.
Es wäre nett es sieht sich jemand den HTML-Code an, ob dieser grundsätzlich über HTTPMod zu lesen ist und gibt mir einen Tipp was ich ändern muss, damit es klappt.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

betateilchen

Zitat von: Rewe2000 am 21 Oktober 2021, 20:02:49
Es wäre nett es sieht sich jemand den HTML-Code an, ob dieser grundsätzlich über HTTPMod zu lesen ist und gibt mir einen Tipp was ich ändern muss, damit es klappt.

Der Counter ist nicht statisch auf der Webseite vorhanden, sondern er wird über das im Head genannte JavaScript "scripts/AngularEmbeddedCounter.js" erzeugt und zur Laufzeit eingeblendet (und aktualisiert.

Zitat von: Rewe2000 am 21 Oktober 2021, 20:02:49
Ich vermute fast, mein RegEx ist korrekt

Jepp, ist er. Siehe angehängten Screenshot.

Aber ob HTTPMOD mit solchem dynamischen Content klarkommt, kann ich Dir nicht beantworten, das müsste jemand tun, der sich mit HTTPMOD besser auskennt. Bei HTTPMOD bin ich schon vor Jahren ausgestiegen, als es sich zu einem nicht mehr beherrschbaren Attribute-Moloch entwickelte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Rewe2000

Hallo,

somit bin ich beruhigt, dass zumindest mein Code passt. Ich habe diesen auch über einen RegEx Prüfer getestet.
Dann werde ich mal warten, bis sich ein HTTPMOD Experte meldet und mir sagt ob mein Anliegen überhaupt so machbar ist.

Danke euch allen
Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

StefanStrobel

Hallo Reinhard,

machbar ist das bestimmt, aber es könnte aufwändig werden, das umzusetzen. Zunächst mal musst Du herausfinden, wie das Javascript den Counter holt. Wenn das ein weiterer HTTP-Request ist, dann musst Du den in HTTPMOD definieren. Am besten verfolgst Du dazu die tatsächlichen Requests mit einem lokalen Proxy wie der Burp-Suite.

Gruss
    Stefan

Wernieman

Oder gugt in den "DebugTabs", was den der browser so holt ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Rewe2000

Hallo Stefan, hallo Wernieman,

ich dachte mir, hier reichen ein paar Suchbegriffe in HTTPMOD aus, um die Daten abzuholen, aber wie ich eueren Antworten entnehmen kann, ist das merklich komplizierter.

Ich denke, da muss ich passen, meine HTML Kentnisse reichen gerade so aus, um in Tablet-UI meine Seiten für Fhem darzustellen und das war es dann auch schon.
Ich habe versucht mir den Code der Seite in Firefox anzusehen, aber das bringt mich selbst nicht weiter, da ich keine Ahnung habe, wie ich das angehen müsste.

Trozdem danke für eure Antworten, jetzt weiß ich zumindest, dass ich hier nicht einen Fehler im Code habe, weil ich hier nie etwas lesen konnte.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky