Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. Website auslesen/JSON parsen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Website auslesen/JSON parsen

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      lanig iro last edited by

      Hallo zusammen,

      eine Frage die schon 100. mal gefragt wurde. Aber ich drehe mich im Kreis und brauche ein paar Denkanstöße.

      Ich möchte den Rheinpegel in meiner InfluxDB loggen und in Grafana darstellen. Wie mache ich das am besten?

      Telegraf für die InfluxDB?
      Blockly Skript?
      Parser Adapter?

      Die Pegelstände werden über eine REST-API bereitgestellt:

      https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/duisburg-ruhrort/W/currentmeasurement.json

      {
      "timestamp": "2021-02-18T15:45:00+01:00",
      "value": 519.0,
      "trend": -1,
      "stateMnwMhw": "normal",
      "stateNswHsw": "normal"
      }

      Alle 8 h würde ich gerne den aktuellen Wert abgreifen und irgendwie in einen Datenpunkt bekommen. Ich habe es mit dem Perser Adapter versucht, aber da Scheiter ich (glaube ich) am RegEx Eintrag. Der Datenpunkt bleibt einfach leer wenn ich bei RegEx z. B. value eingebe.

      Vielen Dank!

      Homoran 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators @lanig iro last edited by

        @lanig-iro sagte in Website auslesen/JSON parsen:

        Die Pegelstände werden über eine REST-API bereitgestellt:
        https://www.pegelonline.wsv.de

        https://github.com/bazidibavaria/ioBroker.pegelalarm

        I 1 Reply Last reply Reply Quote 0
        • I
          Ianig Iro @Homoran last edited by

          @homoran Danke, den Adapter habe ich schonmal getestet.
          Ich hatte die Meldung
          instance system.adapter.pegelonline.0 already running with pid 15881
          Irgendwann habe ich ihn zum laufen bekommen, aber er hat mir keinen Wert angezeigt.

          Deswegen wollte ich, quasi "learning by doing", mich ein bisschen mit der Thematik auseinander setzen. Aber ich sehe da den Wald vor lauter Bäumen nicht mehr.

          Es gibt ja zu genüge Beiträge für den Parser Adapter um html Seiten zu parsen. Aber ich bekomme das nicht auf meine JSON übertragen.

          1 Reply Last reply Reply Quote 0
          • I
            Ianig Iro last edited by

            Mir ist gerade aufgefallen, dass ich pegelonline und nicht pegelalarm als Adapter laufen hatte.
            Also Pegelalarm draufgeschmissen:
            (5157) Terminated (NO_ERROR): Without reason

            Tut es leider auch nicht.

            Homoran 1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @Ianig Iro last edited by

              @ianig-iro
              Dann nochmal auf ein neues:

              @lanig-iro sagte in Website auslesen/JSON parsen:

              {
              "timestamp": "2021-02-18T15:45:00+01:00",
              "value": 519.0,
              "trend": -1,
              "stateMnwMhw": "normal",
              "stateNswHsw": "normal"
              }

              wenn die Antwort immer kommt, ist es ein einfaches json, dass man einfach auswerten kann

              Wo liegt dieser "Text" bei idr?

              I 1 Reply Last reply Reply Quote 0
              • I
                Ianig Iro @Homoran last edited by

                @homoran Der "Text", also die JSON ist vom Aufbau immer identisch und wird hier bereitgestellt:

                https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/duisburg-ruhrort/W/currentmeasurement.json

                Homoran 1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @Ianig Iro last edited by Homoran

                  @ianig-iro sagte in Website auslesen/JSON parsen:

                  wird hier bereitgestellt:

                  Also hast du sie noch nicht lokal auf deinem Rechner?

                  Ich versuche mal was

                  EDIT1:

                  für den parser: ue":\s+([\d\.]+)


                  Edit2:
                  Blockly: Pegel_Ruhrort.png

                  Satt des debug Baustein natürlich ein "aktualisiere" Block für deinen selbst erstellten Datenpunkt

                  I 1 Reply Last reply Reply Quote 1
                  • I
                    Ianig Iro @Homoran last edited by

                    @homoran Es kann so einfach sein, wenn man weiß was man tut 😉
                    Besten Dank, es funktioniert mi Blockly super!
                    Mit dem Parser muss ich noch rumexperimentieren.

                    Neuschwansteini 1 Reply Last reply Reply Quote 0
                    • Neuschwansteini
                      Neuschwansteini @Ianig Iro last edited by Neuschwansteini

                      @ianig-iro

                      Hi,
                      ich hab mal auf die schnelle was zusammen geschrieben, funktioniert hier:

                      // Pegelonline script by ilovegym66
                      // 
                      
                      var request = require('request');
                      var url = 'https://www.pegelonline.wsv.de/webservices/rest-api/v2/stations/Mainz/W/currentmeasurement.json';
                      var timestamp;
                      var trend;
                      var value;
                      var stateMnwMhw;
                      var stateNswHsw;
                      
                      var idtimestamp = '0_userdata.0.Pegelonline.Mainz.timestamp';
                      var idtrend = '0_userdata.0.Pegelonline.Mainz.trend';
                      var idvalue = '0_userdata.0.Pegelonline.Mainz.value';
                      var idstateMnwMhw = '0_userdata.0.Pegelonline.Mainz.stateMnwMhw';
                      var idstateNswHsw = '0_userdata.0.Pegelonline.Mainz.stateNswHsw';
                      
                      createState('0_userdata.0.Pegelonline.Mainz.timestamp', {
                          name: 'timestamp',
                          });
                      
                      createState('0_userdata.0.Pegelonline.Mainz.value', {
                          name: 'value',
                          });
                      
                      createState('0_userdata.0.Pegelonline.Mainz.trend', {
                          name: 'trend',
                          });
                      
                      createState('0_userdata.0.Pegelonline.Mainz.stateMnwMhw', {
                          name: 'stateMnwMhw',
                          });
                      
                      createState('0_userdata.0.Pegelonline.Mainz.stateNswHsw', {
                          name: 'stateNswHsw',
                          });    
                      
                      
                      
                      
                      function PegelMainz() { 
                      request(url, function ( err, state, body){
                          if (err) {
                              log("Fehler aufgetreten: " + err);
                          } else {
                          var obj = JSON.parse(body);
                          timestamp = obj.timestamp;
                          value = obj.value;
                          trend = obj.trend;
                          stateMnwMhw = obj.stateMnwMhw;
                          stateNswHsw = obj.stateNswHsw;
                      
                          setState(idtimestamp, timestamp);
                          setState(idtrend, trend);
                          setState(idvalue, value);
                          setState(idstateMnwMhw, stateMnwMhw);
                          setState(idstateNswHsw, stateNswHsw);
                          } 
                      });
                      }
                      
                      schedule('*/21 * * * *', PegelMainz);
                      
                      
                      I Negalein 2 Replies Last reply Reply Quote 2
                      • I
                        Ianig Iro @Neuschwansteini last edited by

                        @ilovegym Danke, das werde ich aus Interesse auch nochmal testen

                        Neuschwansteini 1 Reply Last reply Reply Quote 0
                        • Neuschwansteini
                          Neuschwansteini @Ianig Iro last edited by

                          @ianig-iro Gern geschehen, läuft bei mir, hab für jede Station/Ort ein Script, einfach den Ortsnamen ( hier Mainz ) austauschen, geht mit der funktion "change all Occurences" am einfachsten 🙂

                          f89f298f-a7b8-43d0-84a5-a096cbf544ed-grafik.png

                          1 Reply Last reply Reply Quote 1
                          • Negalein
                            Negalein Global Moderator @Neuschwansteini last edited by

                            @ilovegym sagte in Website auslesen/JSON parsen:

                            ich hab mal auf die schnelle was zusammen geschrieben, funktioniert hier:

                            Hi Bernd!

                            Würde das auch mit pegelalarm.at funktionieren?

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

                              @negalein auf anhieb nicht, da man sich bei deren API anmelden muss.

                              Negalein 2 Replies Last reply Reply Quote 0
                              • Negalein
                                Negalein Global Moderator @Neuschwansteini last edited by

                                @ilovegym sagte in Website auslesen/JSON parsen:

                                auf anhieb nicht, da man sich bei deren API anmelden muss.

                                gerade gesehen, dass es 2 APIs gibt.
                                Mit 1.1 wird ein Login benötigt, aber mit 1.0 läufts ohne.

                                https://api.pegelalarm.at/api/station/1.0/list

                                1 Reply Last reply Reply Quote 0
                                • Negalein
                                  Negalein Global Moderator @Neuschwansteini last edited by

                                  @ilovegym sagte in Website auslesen/JSON parsen:

                                  auf anhieb nicht, da man sich bei deren API anmelden muss

                                  Hallo

                                  Konntest du mit der API 1.0 was erreichen?

                                  Neuschwansteini 1 Reply Last reply Reply Quote 0
                                  • Neuschwansteini
                                    Neuschwansteini @Negalein last edited by

                                    @negalein ja das kannste einfach umsetzen, ich hatte einfach den link mal ausprobiert und da kamen auch die json dabei raus.
                                    Beispiel:
                                    https://api.pegelalarm.at/api/station/1.0/list?qStationName=Linz

                                    und dann schaust du dir die json an und setzt dir die States wie du sie brauchst, also value, trend, etc.

                                    Negalein 1 Reply Last reply Reply Quote 0
                                    • Negalein
                                      Negalein Global Moderator @Neuschwansteini last edited by

                                      @ilovegym sagte in Website auslesen/JSON parsen:

                                      und dann schaust du dir die json an und setzt dir die States wie du sie brauchst, also value, trend, etc.

                                      Danke dir!
                                      Ich benötige eigentlich nur Zeit und Pegel.

                                      Müsste das dann so passen?

                                      // Pegelonline script by ilovegym66
                                      // 
                                       
                                      var request = require('request');
                                      var url = 'https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding';
                                      var sourceDate;
                                      // var trend;
                                      var value;
                                      // var stateMnwMhw;
                                      // var stateNswHsw;
                                       
                                      var idsourceDate = '0_userdata.0.Pegelalarm.Schärding.sourceDate';
                                      // var idtrend = '0_userdata.0.Pegelalarm.Schärding.trend';
                                      var idvalue = '0_userdata.0.Pegelalarm.Schärding.value';
                                      // var idstateMnwMhw = '0_userdata.0.Pegelalarm.Schärding.stateMnwMhw';
                                      // var idstateNswHsw = '0_userdata.0.Pegelalarm.Schärding.stateNswHsw';
                                       
                                      createState('0_userdata.0.Pegelalarm.Schärding.sourceDate', {
                                          name: 'sourceDate',
                                          });
                                       
                                      createState('0_userdata.0.Pegelalarm.Schärding.value', {
                                          name: 'value',
                                          });
                                       
                                      // createState('0_userdata.0.Pegelalarm.Schärding.trend', {
                                      //     name: 'trend',
                                      //     });
                                       
                                      // createState('0_userdata.0.Pegelalarm.Schärding.stateMnwMhw', {
                                      //     name: 'stateMnwMhw',
                                      //     });
                                       
                                      // createState('0_userdata.0.Pegelalarm.Schärding.stateNswHsw', {
                                      //     name: 'stateNswHsw',
                                      //     });    
                                       
                                       
                                       
                                       
                                      function PegelSchärding() { 
                                      request(url, function ( err, state, body){
                                          if (err) {
                                              log("Fehler aufgetreten: " + err);
                                          } else {
                                          var obj = JSON.parse(body);
                                          sourceDate = obj.sourceDate;
                                          value = obj.value;
                                      //     trend = obj.trend;
                                      //     stateMnwMhw = obj.stateMnwMhw;
                                      //     stateNswHsw = obj.stateNswHsw;
                                       
                                          setState(idsourceDate, sourceDate);
                                      //    setState(idtrend, trend);
                                          setState(idvalue, value);
                                      //    setState(idstateMnwMhw, stateMnwMhw);
                                      //    setState(idstateNswHsw, stateNswHsw);
                                          } 
                                      });
                                      }
                                       
                                      schedule('*/21 * * * *', PegelSchärding);
                                      

                                      Problem ist, dass in der JSON 2 Stationen sind, ich aber nur 1 benötige!
                                      Beide Stationen verwenden requestDate und value.

                                      {
                                      	"status": {
                                      		"code": 200
                                      	},
                                      	"payload": {
                                      		"stations": [
                                      			{
                                      				"name": "Inn / Schärding / at",
                                      				"commonid": "206201-at",
                                      				"country": "Österreich",
                                      				"stationName": "Schärding",
                                      				"water": "Inn",
                                      				"region": "Oberösterreich",
                                      				"latitude": 48.456197269621,
                                      				"longitude": 13.428268065578,
                                      				"positionKm": 16.25,
                                      				"altitudeM": 299.8,
                                      				"defaultWarnValueCm": 520.0,
                                      				"defaultWarnValueM3s": 2600.0,
                                      				"defaultAlarmValueCm": 580.0,
                                      				"defaultAlarmValueM3s": 3700.0,
                                      				"data": [
                                      					{
                                      						"type": "height in cm",
                                      						"value": 370.0,
                                      						"requestDate": "13.03.2021T11:20:29+0100",
                                      						"sourceDate": "13.03.2021T11:00:00+0100"
                                      					},
                                      					{
                                      						"type": "flow in m3s",
                                      						"value": 1435.0,
                                      						"requestDate": "12.08.2016T09:42:10+0200",
                                      						"sourceDate": "12.08.2016T08:00:00+0200"
                                      					}
                                      				],
                                      				"trend": 10,
                                      				"situation": 10,
                                      				"visibility": "PUBLIC"
                                      			},
                                      			{
                                      				"name": "Inn / Schärding-Neuhaus Ow / de",
                                      				"commonid": "18007105-de",
                                      				"country": "Deutschland",
                                      				"stationName": "Schärding-Neuhaus Ow",
                                      				"water": "Inn",
                                      				"region": "Bayern",
                                      				"latitude": 48.435577724765,
                                      				"longitude": 13.440730974464,
                                      				"positionKm": 0.0,
                                      				"altitudeM": 0.0,
                                      				"data": [
                                      					{
                                      						"type": "height in cm",
                                      						"value": 314.9,
                                      						"requestDate": "03.08.2016T15:46:12+0200",
                                      						"sourceDate": "03.08.2016T15:30:00+0200"
                                      					}
                                      				],
                                      				"trend": 100,
                                      				"situation": 100,
                                      				"visibility": "PUBLIC"
                                      			},
                                      			{
                                      				"name": "Inn / Schärding-Neuhaus Kw / de",
                                      				"commonid": "18007107-de",
                                      				"country": "Deutschland",
                                      				"stationName": "Schärding-Neuhaus Kw",
                                      				"water": "Inn",
                                      				"region": "Bayern",
                                      				"latitude": 48.435577724765,
                                      				"longitude": 13.440730974464,
                                      				"positionKm": 18.8,
                                      				"altitudeM": 315.17,
                                      				"defaultWarnValueM3s": 2000.0,
                                      				"data": [
                                      					{
                                      						"type": "flow in m3s",
                                      						"value": 840.0,
                                      						"requestDate": "03.08.2016T15:46:12+0200",
                                      						"sourceDate": "03.08.2016T15:30:00+0200"
                                      					}
                                      				],
                                      				"trend": -10,
                                      				"situation": 10,
                                      				"visibility": "PUBLIC"
                                      			}
                                      		]
                                      	}
                                      }
                                      
                                      Negalein paul53 2 Replies Last reply Reply Quote 0
                                      • Negalein
                                        Negalein Global Moderator @Negalein last edited by

                                        @ilovegym

                                        Müsste das dann so passen?

                                        konntest du schon kurz drüberschaun?

                                        1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 @Negalein last edited by paul53

                                          @negalein sagte: in der JSON 2 Stationen sind, ich aber nur 1 benötige!

                                          Es sind sogar 3 Stationen. Welche wird benötigt?
                                          Den Namen der benötigten Station anpassen:

                                          function PegelSchaerding() { 
                                              request(url, function(err, state, body) {
                                                  if (err) {
                                                      log("Fehler aufgetreten: " + err);
                                                  } else {
                                                      let stations = JSON.parse(body).payload.stations;
                                                      for(let i = 0; i < stations.length; i++) {
                                                          if(stations[i].stationName == 'Schärding') { 
                                                              let sourceDate = stations[i].data[0].sourceDate;
                                                              let value = stations[i].data[0].value;
                                                              setState(idsourceDate, sourceDate, true);
                                                              setState(idvalue, value, true);
                                                              break;
                                                          }
                                                      }
                                                  } 
                                              });
                                          }
                                          
                                          Negalein 1 Reply Last reply Reply Quote 0
                                          • Negalein
                                            Negalein Global Moderator @paul53 last edited by

                                            @paul53 sagte in Website auslesen/JSON parsen:

                                            Es sind sogar 3 Stationen. Welche wird benötigt?
                                            Den Namen der benötigten Station anpassen:

                                            Danke

                                            Ja, Schärding wird benötigt.
                                            Also auch wenn im JSON mit ä geschrieben, muss es im Script mit ae sein?

                                            paul53 Neuschwansteini 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            926
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            30
                                            2737
                                            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