HTTPMOD wert von webseite auslesen

Begonnen von Michi1978, 03 Januar 2024, 08:14:47

Vorheriges Thema - Nächstes Thema

Michi1978

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

TomLee

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

Michi1978


Wernieman

Oder als Regex einfach "(\d+\.\d+)" ....
- 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

TomLee

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

Michi1978

Zitat von: Wernieman am 03 Januar 2024, 11:54:22Oder als Regex einfach "(\d+\.\d+)" ....

Irgendwie bin ich zu doof dazu...


Wernieman

- 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

Michi1978

#7
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

Wernieman

Stimmt .. er guckt in den direkten HTTP Stream und findet natürlich den 1.1 bei "http/1.1" ....

Must Du tiefer gucken ...
- 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

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#10
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+)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Michi1978

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?😁

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Michi1978

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...

betateilchen

#14
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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!