FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Michi1978 am 03 Januar 2024, 08:14:47

Titel: HTTPMOD wert von webseite auslesen
Beitrag von: Michi1978 am 03 Januar 2024, 08:14:47
Hallo und ein Frohes neue Jahr!

Ich möchte von der Seite https://www.netzfrequenz.info/json/act.json alle 30 Sekunden die aktuelle Netzfrequenz auslsen. Leider bekomme ich das nicht hin. Mit der Wiki und einem Forenbeitrag bin ich auch nicht weitergekommen.
define NFTEST HTTPMOD https://www.netzfrequenz.info/json/act.json 60
setuuid NFTEST 6595059e-f33f-f9d3-f7ce-65a2886d29028530
attr NFTEST enableControlSet 1
attr NFTEST room test

Die Seite gibt nur den aktuellen weet aus, sonst nichts
<html><head><meta name="viewport" content="width=device-width"><title>https://www.netzfrequenz.info/json/act.json</title><link rel="stylesheet" type="text/css" href="resource://content-accessible/viewsource.css"></head><body id="viewsource" class="highlight" style="tab-size: 4"><pre>50.018</pre></body></html>
Vermutlich ist die lösung ganz einfach, ich wäre dankbar wenn mir da jemand helfen könnte.

VG
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: TomLee am 03 Januar 2024, 10:05:44
ZitatDie Seite gibt nur den aktuellen weet aus, sonst nichts

Moin,

den Wert würd ich dann ganz einfach mit GetFileFromURL auslesen:
{GetFileFromURL("https://www.netzfrequenz.info/json/act.json")}
Gruß

Thomas
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Michi1978 am 03 Januar 2024, 11:44:24
Wo muss ich das eintragen? :-[
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Wernieman am 03 Januar 2024, 11:54:22
Oder als Regex einfach "(\d+\.\d+)" ....
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: TomLee am 03 Januar 2024, 12:05:33
ZitatWo muss ich das eintragen? :-[

Ein at würde sich bspw. anbieten den Wert zu jeder vollen Stunde auszulesen und in ein Reading zu schreiben :
defmod at_example at +*01:00:00 {fhem('setreading $SELF act '.GetFileFromURL("https://www.netzfrequenz.info/json/act.json"))}
attr at_example alignTime 00:00
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Michi1978 am 04 Januar 2024, 00:03:00
Zitat von: Wernieman am 03 Januar 2024, 11:54:22Oder als Regex einfach "(\d+\.\d+)" ....

Irgendwie bin ich zu doof dazu...

Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Wernieman am 04 Januar 2024, 08:29:41
Welche Info fehlt Dir den noch?
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Michi1978 am 04 Januar 2024, 09:11:12
Zitat von: Wernieman am 04 Januar 2024, 08:29:41Welche Info fehlt Dir den noch?

Nun gut, jetzt hab ich es hinbekommen das überhaput etwas passiert :)
Jedoch wird mir immer nur 1.1 angezeigt.

define NF HTTPMOD https://www.netzfrequenz.info/json/act.json 10
setuuid NF 657403cc-f33f-f9d3-eb58-2d05a4bdb8f9d5a0
attr NF alias NF
attr NF enableControlSet 1
attr NF enableCookies 1
attr NF enforceGoodReadingNames 1
attr NF handleRedirects 1
attr NF reading1Name Netzfrequenz
attr NF reading1Regex (\d+\.\d+)
attr NF requestHeader Content-Type: application/json
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Wernieman am 04 Januar 2024, 09:21:47
Stimmt .. er guckt in den direkten HTTP Stream und findet natürlich den 1.1 bei "http/1.1" ....

Must Du tiefer gucken ...
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: betateilchen am 04 Januar 2024, 09:26:06
Ich denke, das wird nicht so einfach funktionieren, weil im httpbody tatsächlich nur der numerische Wert ohne jegliches html darum steht.

Übrigens, bei den Attributen gilt nicht die Regel "viel hilft viel", bis auf die beiden reading-bezogenen Attribute kannst Du alle anderen weglassen.
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: betateilchen am 04 Januar 2024, 09:31:23
defmod nf HTTPMOD https://www.netzfrequenz.info/json/act.json
attr nf reading01Regex ([45].\.\d+)

Das funktioniert bei mir problemlos.

Alternativ funktioniert auch die regex
(\d\d\.\d+)
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Michi1978 am 04 Januar 2024, 09:39:39
Zitat von: betateilchen am 04 Januar 2024, 09:31:23Nimm mal als regex ([456].\.\d+)


Funktioniert, perfekt! Danke an alle!


Jetzt kommt das nächste Projekt. Pegelstände...

https://hochwasserportal.nrw/lanuv/webpublic/#/overview/Wasserstand/station/28595/Neuhaus1/Wasserstand?period=P1D

Hat Jemand jemand eine Idee?😁
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: betateilchen am 04 Januar 2024, 10:02:10
Zitat von: Michi1978 am 04 Januar 2024, 09:39:39Jetzt kommt das nächste Projekt. Pegelstände...
...
Hat Jemand jemand eine Idee?

Ja: Benutze die Suchfunktion hier im Forum.
Zu Pegelständen gibt es schon mehrere Threads.
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Michi1978 am 04 Januar 2024, 10:29:54
Zitat von: betateilchen am 04 Januar 2024, 10:02:10
Zitat von: Michi1978 am 04 Januar 2024, 09:39:39Jetzt kommt das nächste Projekt. Pegelstände...
...
Hat Jemand jemand eine Idee?

Ja: Benutze die Suchfunktion hier im Forum.
Zu Pegelständen gibt es schon mehrere Threads.

Die Suchfunktion hatte ich schon benutzt. Leider nichts Passendes gefunden.
Würde halt gerne alle 15 Min den aktuellen Pegelstand des Flusses hier in der Nähe abfragen, der geht uns gerade so richtig auf die nerven und wenn der Pegel auf eine bestimmte Höhe ansteigt drückt das Wasser wieder in den Keller... Würde mich daher gerne von FHEM "wecken" lassen wenn das der Fall ist :) Mit der Nachricht das bekomme ich selbst hin. Nur mit diesem regEx Kram halt voll nicht...
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: betateilchen am 04 Januar 2024, 10:47:30
regex ist da nicht das Problem:

timestamp[\s\S]+>(\d+,\d+)
Das Problem ist, dass sich die Webseite in HTTPMOD nicht ohne weiteres aufrufen lässt, das ist die erhaltene Antwort:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

oder das hier:

<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0, viewport-fit=cover"
    />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="default" />
    <meta name="apple-mobile-web-app-title" content="WISKI-WEB" />

    <link
      rel="preload"
      href="./icons/ki/css/Kisterswater.woff2"
      as="font"
      type="font/woff2"
      crossorigin
    />

    <link rel="stylesheet" href="./icons/kim/css/external-min.css" />

    <link rel="apple-touch-icon" href="icon-192x192.png" />
    <meta name="Description" content="KISTERS WISKI-WEB" />

    <link rel="stylesheet" href="./icons/ki/css/external-min.css" />
   
   

    <script>
      sessionStorage.setItem('i18nextLng', 'de');
    </script>
    <base href="." />

    <title>LANUV - Hydrologische Messdaten Online</title>
    <script type="module" crossorigin src="./assets/index.39912ae5.js"></script>
    <link rel="modulepreload" href="./assets/highcharts.01248728.js">
    <link rel="modulepreload" href="./assets/vendor.88af4a85.js">
    <link rel="stylesheet" href="./assets/vendor.44fa1caf.css">
    <link rel="stylesheet" href="./assets/index.6f242378.css">
  </head>
  <body>
    <h1 style="display: none">Hydrologische Messdaten Online</h1>
    <head style="display: none"></head>
    <main></main>
    <ww-app-index></ww-app-index>
  </body>
</html>

Jedenfalls nix, aus dem man irgendwelche Werte extrahieren kann.
Und bei pegelonline (was viel einfacher abzufragen wäre) ist der Pegel nicht drin, weil da keine Schiffe fahren.
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Michi1978 am 04 Januar 2024, 11:47:14
Zitat von: betateilchen am 04 Januar 2024, 10:47:30regex ist da nicht das Problem:

timestamp[\s\S]+>(\d+,\d+)
Das Problem ist, dass sich die Webseite in HTTPMOD nicht ohne weiteres aufrufen lässt, das ist die erhaltene Antwort:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

oder das hier:

<!DOCTYPE html>
<html lang="de">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0, viewport-fit=cover"
    />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="default" />
    <meta name="apple-mobile-web-app-title" content="WISKI-WEB" />

    <link
      rel="preload"
      href="./icons/ki/css/Kisterswater.woff2"
      as="font"
      type="font/woff2"
      crossorigin
    />

    <link rel="stylesheet" href="./icons/kim/css/external-min.css" />

    <link rel="apple-touch-icon" href="icon-192x192.png" />
    <meta name="Description" content="KISTERS WISKI-WEB" />

    <link rel="stylesheet" href="./icons/ki/css/external-min.css" />
   
   

    <script>
      sessionStorage.setItem('i18nextLng', 'de');
    </script>
    <base href="." />

    <title>LANUV - Hydrologische Messdaten Online</title>
    <script type="module" crossorigin src="./assets/index.39912ae5.js"></script>
    <link rel="modulepreload" href="./assets/highcharts.01248728.js">
    <link rel="modulepreload" href="./assets/vendor.88af4a85.js">
    <link rel="stylesheet" href="./assets/vendor.44fa1caf.css">
    <link rel="stylesheet" href="./assets/index.6f242378.css">
  </head>
  <body>
    <h1 style="display: none">Hydrologische Messdaten Online</h1>
    <head style="display: none"></head>
    <main></main>
    <ww-app-index></ww-app-index>
  </body>
</html>

::EDIT::
Habe gerade gesehen das du deinen letzten Beitrag nochmal geändert hast, der Code war da eben noch nicht drin... Daher nochmal meine nachfrage ;)
::EDIT::

Jedenfalls nix, aus dem man irgendwelche Werte extrahieren kann.
Und bei pegelonline (was viel einfacher abzufragen wäre) ist der Pegel nicht drin, weil da keine Schiffe fahren.

Genau, Pegelonline hatte ich auch anhand des Beitrages hier im Forum erst im Sinn, da merkte ich auch das die Lippe hier nicht aufgeführt ist.

Kann man hier nichts mit anfangen?

Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: betateilchen am 04 Januar 2024, 14:38:36
defmod nh HTTPMOD https://earlyfloodalert.com/de/river.php?river=Lippe
attr nh reading01Regex 2781730000200.*\n.*\n..<td>(.*).cm
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Wernieman am 04 Januar 2024, 14:55:08
OT:
Da merkt man den "Profi" .. bin nicht drauf gekommen, den ersten RegEx einfach auf die erste Ziffer (4 oder 5) trickern zu lassen .. dabei völlig Logisch
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Schlafsack am 05 Januar 2024, 09:54:49
Da es hier um Werte von einer Webseite auslesen geht hätte ich mal eine Frage

Wie bist du überhaupt auf https://www.netzfrequenz.info/json/act.json gekommen? ALso vorallem das mit dem /json/act.json
Hintergrund ist, ich würde gern von: https://kachelmannwetter.com/de/messwerte/dresden/sonnenstunden/20240105-0600z.html ,die Sonnenstunden der Station auslesen (kleiner grauer Kreis unter A13, über Hellerau, obere Mitte von Karte.

Besten Dank
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Michi1978 am 05 Januar 2024, 10:13:38
Zitat von: betateilchen am 04 Januar 2024, 14:38:36defmod nh HTTPMOD https://earlyfloodalert.com/de/river.php?river=Lippe
attr nh reading01Regex 2781730000200.*\n.*\n..<td>(.*).cm

Wow, das funktioniert prächtig! Kann ich dir irgendwie einen Kaffe spendieren? :)
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: betateilchen am 05 Januar 2024, 10:15:28
Zitat von: Schlafsack am 05 Januar 2024, 09:54:49Hintergrund ist, ich würde gern von: https://kachelmannwetter.com/de/messwerte/dresden/sonnenstunden/20240105-0600z.html ,die Sonnenstunden der Station auslesen (kleiner grauer Kreis unter A13, über Hellerau, obere Mitte von Karte.

Bei Kachelmann ist das doch völlig simpel, da gibt es eine API nebst Beschreibung der API.
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Schlafsack am 05 Januar 2024, 11:18:10
ich glaube ich brauche ne Brille? oder noch einen etwas genaueren Denkanstoß wie ich das in HTTPMOD einbinde.

Habe bischen was kopiert, da fehlt aber leider noch was  ???

defmod HTTP_Kachelmann HTTPMOD https://kachelmannwetter.com/de/messwerte/dresden/sonnenstunden.html 10
attr HTTP_Kachelmann enableControlSet 1
attr HTTP_Kachelmann enableCookies 1
attr HTTP_Kachelmann get03Name Sonnenscheindauer
attr HTTP_Kachelmann get03Poll 1
attr HTTP_Kachelmann get03URL https://kachelmannwetter.com/de/messwerte/dresden/sonnenstunden.html
attr HTTP_Kachelmann handleRedirects 1
attr HTTP_Kachelmann timeout 7
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: betateilchen am 05 Januar 2024, 12:53:59

https://forum.fhem.de/index.php?topic=13092.0



Das hier kommt übrigens in HTTPMOD an, wenn Du Deine URL aufrufst:

<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
 
You don't have permission to access "http&#58;&#47;&#47;kachelmannwetter&#46;com&#47;de&#47;messwerte&#47;dresden&#47;sonnenstunden&#46;html" on this server.<P>
Reference&#32;&#35;18&#46;5e62645f&#46;1704456030&#46;39c2714d
</BODY>
</HTML>

Deshalb mein Hinweis auf die offizielle API von Kachelmann, die genau für solche Datenabfragen geschaffen wurde.
Titel: Aw: HTTPMOD wert von webseite auslesen
Beitrag von: Schlafsack am 05 Januar 2024, 13:11:01
Wird gemacht Großer Meister.

PS: Deinen Hinweis habe ich verfolgt und mich dort sogar registriert. Nur leider ist das mit der API nicht ganz kostenlos, deshalb wollte ich es so versuchen.

Besten Dank trotzdem