FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Rewe2000 am 07 Oktober 2021, 13:46:26

Titel: HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: Rewe2000 am 07 Oktober 2021, 13:46:26
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
(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
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: Rewe2000 am 16 Oktober 2021, 13:57:01
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
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: StefanStrobel am 20 Oktober 2021, 20:34:32
Hallo Reinhard,

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

Gruss
   Stefan
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: gestein am 21 Oktober 2021, 08:50:42
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 (https://forum.fhem.de/index.php/topic,123521.0.html)

lg, Gerhard
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: Rewe2000 am 21 Oktober 2021, 20:02:49
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
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: betateilchen am 21 Oktober 2021, 20:26:15
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.
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: Rewe2000 am 21 Oktober 2021, 20:35:08
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
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: StefanStrobel am 25 Oktober 2021, 17:27:10
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
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: Wernieman am 25 Oktober 2021, 18:08:56
Oder gugt in den "DebugTabs", was den der browser so holt ...
Titel: Antw:HTTPMOD Auslesen einer Sauna Belegungsanzeige von einer Homepage
Beitrag von: Rewe2000 am 25 Oktober 2021, 18:47:00
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