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="["Saunadorf im Juramare"]" _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
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
Hallo Reinhard,
wie sieht denn Deine Regex bzw. die konkrete Konfiguration aus?
Gruss
Stefan
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
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="["Saunadorf im Juramare"]" _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
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.
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
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
Oder gugt in den "DebugTabs", was den der browser so holt ...
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