Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Werte aus Webseite auslesen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Werte aus Webseite auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • 0
      0018 last edited by

      Hallo zusammen,

      ich bin auf der Suche nach einer Möglichkeit von der Webseite http://www.edersee.de/wasserstand/ folgende Werte auszulesen:

      1. Datum: –> Ergebniss sollte nur das Datum auswerfen, nicht den ausgeschriebenen Tagesnamen

      2. Wasserstand um 07:00 Uhr in m über NN:

      3. Inhalt in Millionen m³:

      4. Aktueller Füllstand in %:

      Nach einiger Forums-recherche bin ich auf den Parser-Adapter gestoßen und habe auch schon einiges versucht.

      Leider ohne Erfolg und die vorhanden Doku ist für mich nicht ganz verständlich.

      Kann mir jemand helfen wie der Parser hier zu konfigurieren ist?

      Danke im Vorraus!

      Mfg

      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        @0018:

        Hallo zusammen,

        ich bin auf der Suche nach einer Möglichkeit von der Webseite http://www.edersee.de/wasserstand/ folgende Werte auszulesen:

        1. Datum: –> Ergebniss sollte nur das Datum auswerfen, nicht den ausgeschriebenen Tagesnamen

        2. Wasserstand um 07:00 Uhr in m über NN:

        3. Inhalt in Millionen m³:

        4. Aktueller Füllstand in %:

        Nach einiger Forums-recherche bin ich auf den Parser-Adapter gestoßen und habe auch schon einiges versucht.

        Leider ohne Erfolg und die vorhanden Doku ist für mich nicht ganz verständlich.

        Kann mir jemand helfen wie der Parser hier zu konfigurieren ist?

        Danke im Vorraus!

        Mfg `

        Hi 0018,

        Sind das nicht die gleichen daten welche auchh bei pegelonline abgefragt werden koennen ?

        ich finde da z.b.:

            "uuid": "c6e9f744-4dbf-4e8e-a219-cab051ec610c",
            "number": "42800310",
            "shortname": "EDERTALSPERRE",
            "longname": "EDERTALSPERRE",
            "km": 49.2,
            "agency": "WSA HANNOVERSCH MÜNDEN",
            "longitude": 9.058927535521473,
            "latitude": 51.18404001559913,
            "water": {
              "shortname": "EDER",
              "longname": "EDER"
            },
            "timeseries": [
              {
                "shortname": "W",
                "longname": "WASSERSTAND ROHDATEN",
                "unit": "m+PNP",
                "equidistance": 15,
                "currentMeasurement": {
                  "timestamp": "2017-05-04T13:00:00+02:00",
                  "value": 239.3,
                  "trend": 0,
                  "stateMnwMhw": "unknown",
                  "stateNswHsw": "unknown"
                },
                "gaugeZero": {
                  "unit": "m. ü. NN",
                  "value": 0.082,
                  "validFrom": "1990-01-01"
                }
              }
            ]
          },
        
        

        Da diese seite eine JSON tabelle hergibt kan man diese leichter auslesen als eine platte webseite.

        https://www.pegelonline.wsv.de/webservi … ement=true

        Hat diese seite die daten die du brauchst ? Wen je welche sind das genau dan kan ich dir ein beispiel schreiben in javascript um daten von de seite zu laden und in eine variable schreien (womit sie in dein system sitzen und auch mit z.b. VIS angezeigt werden koennen)

        Greetz,

        Dutch

        PS: hier eine uebersicht von was fuer daten da geliefert werden koennen: https://www.pegelonline.wsv.de/webservice/dokuRestapi

        Zugriff auf die Stationen mit Einschließung verschiedener untergeordneter Daten:

        Alle Pegel sortiert nach Gewässername und Messstellenname.

        Alle Pegel inklusive Informationen zu den Zeitreihen.

        Alle Pegel inklusive Informationen zu den Zeitreihen mit dem aktuell gemessenen Wert.

        Alle Pegel inklusive Informationen zu den Zeitreihen mit den kennzeichnenden Wasserstände.

        Zugriff auf bestimmte Stationen:

        Zugriff auf einen Pegel per Name. Statt BONN.json kann der Pegel auch über die Pegelnummer, also 2710080.json oder über die UUID - 593647aa-9fea-43ec-a7d6-6476a76ae868.json - adressiert werden. Nur für die UUID kann garantiert werden, dass sie sich nicht ändert.

        Pegel bestimmter Gewässer.

        Bestimmte Pegel. Für die IDs kann eine Pegelnummer, ein Pegelname oder eine UUID verwendet werden.

        Nur Pegel mit deren Q-Zeitreihen (Abflusszeitreihen).

        Pegel, welche eine Q-Zeitreihe besitzen, mit allen Zeitreihen des Pegels.

        Spezialabfragen

        Pegel innerhalb eines Radius an einer geografischen Position. Koordinaten in WGS84 in Dezimalnotation.

        Pegel, welche im Namen 'Berlin' enthalten.

        Pegel des Gewässers Rhein im Umkreis eines bestimmten Flusskilometers.

        1 Reply Last reply Reply Quote 0
        • 0
          0018 last edited by

          Hi Dutchman,

          danke für den Tipp, hatte schon bei meiner Recherche etwas entdeckt, mich aber nicht weiter mit beschäftigt weil ich nur den Parser als Lösumg hatte.

          Mit dem Script http://forum.iobroker.net/viewtopic.php … ser#p64338 habe ich mir mal folgendes gebastelt:

          `var request = require('request');
          var url = 'https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json?includeTimeseries=true&includeCurrentMeasurement=true';
          var pegelmax = 244.97;
          var state1 = "javascript.0.Edersee.Pegel";
          var state2 = "javascript.0.Edersee.Pegel_Prozent"; 
          var state3 = "javascript.0.Edersee.Messzeit"; 
          var state4 = "javascript.0.Edersee.Pegel_bis_voll"; 
          
          createState(state1, {name: "Pegel", unit: "m"});
          createState(state2, {name: "Pegel_Prozent", unit: "%"});
          createState(state3, {name: "Messzeit",});
          createState(state4, {name: "Pegel_bis_Voll", unit: "m"});
          
          function Edersee() {
          request(url, function(err, stat, body) {
              if(err) log('Error: ' + err, error);
              else if(body) {
                  var pegelonline;
                  var stand;
                  pegelonline = JSON.parse(body);
                  for(var i = 0; i < pegelonline.length; i++) {
                      if(pegelonline[i].shortname == 'EDERTALSPERRE') {
                          stand = pegelonline[i].timeseries[0].currentMeasurement.value;
                          zeit = pegelonline[i].timeseries[0].currentMeasurement.timestamp;
                      }
                  }
                  log('Pegel: ' + stand);
                  log('Zeit: ' + zeit);
                  setState(state1, stand); 
                  setState(state3, zeit);
                  var pegelprozent = ((stand/pegelmax)*100).toFixed(2);
                  log('Pegel in Prozent: ' + pegelprozent);
                  setState(state2, pegelprozent);
                  var pegelbisvoll = (pegelmax-stand).toFixed(2);
                  log('Pegel bis Vollstau: ' + pegelbisvoll);
                  setState(state4, pegelbisvoll);
              }    
          });
          }
          
          // Start bei Skriptstart
          Edersee();
          
          // 15min nach jeder vollen Stunde
          schedule("15 * * * *", Edersee);` 
          
          Habe jetzt 3 Werte: Pegelstand, Pegelstand in Prozent (Berechnet anhand der maximalen Pegelhöhe/Vollstau),Uhrzeit der Messung und Restpegel bis Voll. 
          
          Kannst ja mal drüber schauen ob ich was besser/anders machen kann, jedenfalls bekomme ich Werte ermittelt. 
          
          Das Format des Datums könnte noch etwas schicker sein, habe aber leider keinen Ansatz wie ich das Format umschreiben kann..?
          
          Mfg[/i][/i][/i]
          
          1 Reply Last reply Reply Quote 0
          • 0
            0018 last edited by

            Der Wasserinhalt in Millionen m³ wird aber von Pegelonline nicht zur Verfügung gestellt oder?

            1 Reply Last reply Reply Quote 0
            • Dutchman
              Dutchman Developer Most Active Administrators last edited by

              @0018:

              Der Wasserinhalt in Millionen m³ wird aber von Pegelonline nicht zur Verfügung gestellt oder? `

              script sieht doch gut aus :), eventueel koenntest du noch im http get nur die station abfragen welche du brauchst verbrauch dan bisschen weniger ressourcen anstaat nur diesen wert aus der ganzen liste zu lesen.

              Mit dem inhalten bin ich uebergragt da ich es selber nicht benutze, sorry

              1 Reply Last reply Reply Quote 0
              • P
                pix last edited by

                Hallo,

                Kurzer Tipp von unterwegs mit tapatalk: Lege die States von Typ "number" an, stehen ja Zahlenwerte drin.

                Beschreibe sie dann mit Zahlen, die Werte aus der JSON sind Zeichenketten.

                Für Ganzzahlen````
                setState(idName, parseInt(wert,10);

                
                Für Dezimalzahlen kannst du den parseFloat nehmen.
                
                Zum Beispiel````
                var pegelbisvoll = parseFloat((pegelmax-stand).toFixed(2));
                ````heisst: stellen den errechneten wert mit zwei Dezimalstellen als Zeichenkette dar (toFixed) und wandele das dann wieder in eine Dezimalzahl. Wenn allerdings die Dezimalstellen am Ende 0 sind, werden sie auch nicht dargestellt. Es gibt auch andere Möglichkeiten zu Runden. Habe aber gerade keinen Zugriff drauf.
                
                Pix
                1 Reply Last reply Reply Quote 0
                • 0
                  0018 last edited by

                  @Dutchman:

                  , eventueel koenntest du noch im http get nur die station abfragen welche du brauchst verbrauch dan bisschen weniger ressourcen anstaat nur diesen wert aus der ganzen liste zu lesen. `

                  Wie genau muss ich das anstellen?

                  1 Reply Last reply Reply Quote 0
                  • Dutchman
                    Dutchman Developer Most Active Administrators last edited by

                    @0018:

                    @Dutchman:

                    , eventueel koenntest du noch im http get nur die station abfragen welche du brauchst verbrauch dan bisschen weniger ressourcen anstaat nur diesen wert aus der ganzen liste zu lesen. `

                    Wie genau muss ich das anstellen? `

                    durch an deinen link bij station.sj nog id=>UUID<& hinzu zu fuegen. Also z.b.:

                    jetzt (alle daten)

                    https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json?includeTimeseries=true&includeCurrentMeasurement=true
                    

                    nur die daten von Edeltalsperre

                    https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations.json?ids=EDERTALSPERRE&includeTimeseries=true&includeCurrentMeasurement=true
                    

                    Zie API erklaehrung:

                    https://www.pegelonline.wsv.de/webservice/dokuRestapi

                    Zugriff auf bestimmte Stationen:

                    /stations.json?ids=BONN,2730010 Bestimmte Pegel. Für die IDs kann eine Pegelnummer, ein Pegelname oder eine UUID verwendet werden.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    798
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    4579
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo