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.
    • 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
                • paul53
                  paul53 @Negalein last edited by

                  @negalein sagte: muss es im Script mit ae sein?

                  Ich habe nur den Funktionsbezeichner geändert, da ich in Bezeichnern Umlaute vermeide. Es funktioniert wahrscheinlich auch mit "ä".
                  Der Stationsname muss mit "ä" geschrieben werden wie im JSON.

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

                    @negalein Hi, hatte noch keine Zeit, aber so wie @paul53 schreibt muesste es passen.

                    Umlaute so, wie es die json hergibt.

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

                      @paul53

                      habe es nun so

                      // Pegelonline script by ilovegym66
                      // 
                       
                      var request = require('request');
                      var url = 'https://api.pegelalarm.at/api/station/1.0/list?qStationName=Schärding';
                      var sourceDate;
                      // var trend;
                      var value;
                      // var stateMnwMhw;
                      // var stateNswHsw;
                       
                      var idsourceDate = '0_userdata.0.Pegelalarm.Schaerding.sourceDate';
                      // var idtrend = '0_userdata.0.Pegelalarm.Schärding.trend';
                      var idvalue = '0_userdata.0.Pegelalarm.Schaerding.value';
                      // var idstateMnwMhw = '0_userdata.0.Pegelalarm.Schärding.stateMnwMhw';
                      // var idstateNswHsw = '0_userdata.0.Pegelalarm.Schärding.stateNswHsw';
                       
                      createState('0_userdata.0.Pegelalarm.Schaerding.sourceDate', {
                          name: 'sourceDate',
                          });
                       
                      createState('0_userdata.0.Pegelalarm.Schaerding.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 PegelSchaerding() { 
                      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 * * * *', PegelSchaerding);
                      

                      Aber auch nach den 21 Minuten lt. Schedule steht nichts in den beiden DP 0_userdata.0.Pegelalarm.Schaerding.sourceDate und 0_userdata.0.Pegelalarm.Schaerding.value.

                      Könntest du es bei dir testen?

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

                        @negalein sagte: Könntest du es bei dir testen?

                        Ich habe es mit dieser URL erfolgreich getestet:

                        var url = 'https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding';
                        

                        Mit log() anstelle von setState():

                        18:21:09.169	info	javascript.0 (1916) script.js.common.Neuer_Test: 24.03.2021T17:30:00+0100
                        18:21:09.169	info	javascript.0 (1916) script.js.common.Neuer_Test: 361
                        
                        Negalein 1 Reply Last reply Reply Quote 0
                        • Negalein
                          Negalein Global Moderator @paul53 last edited by

                          @paul53 sagte in Website auslesen/JSON parsen:

                          Ich habe es mit dieser URL erfolgreich getestet:

                          Ich bekomme keine Daten

                          Egal ob ich https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding oder https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding verwende.

                          So schaut das Script aus.

                          // 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.Schaerding.sourceDate';
                          // var idtrend = '0_userdata.0.Pegelalarm.Schärding.trend';
                          var idvalue = '0_userdata.0.Pegelalarm.Schaerding.value';
                          // var idstateMnwMhw = '0_userdata.0.Pegelalarm.Schärding.stateMnwMhw';
                          // var idstateNswHsw = '0_userdata.0.Pegelalarm.Schärding.stateNswHsw';
                           
                          createState('0_userdata.0.Pegelalarm.Schaerding.sourceDate', {
                              name: 'sourceDate',
                              });
                           
                          createState('0_userdata.0.Pegelalarm.Schaerding.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 PegelSchaerding() { 
                          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 * * * *', PegelSchaerding);
                          

                          Siehst du noch wo einen Fehler?

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

                            @negalein sagte: Siehst du noch wo einen Fehler?

                            Die Funktion, die ich gepostet habe, sieht ganz anders aus.
                            Versuche es damit:

                            const url = 'https://api.pegelalarm.at/api/station/1.0/list?qStationName=Sch%C3%A4rding';
                            const idsourceDate = '0_userdata.0.Pegelalarm.Schaerding.sourceDate';
                            const idvalue = '0_userdata.0.Pegelalarm.Schaerding.value';
                            
                            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;
                                            }
                                        }
                                    } 
                                });
                            }
                            
                            schedule('*/21 * * * *', PegelSchaerding);
                            
                            Negalein 2 Replies Last reply Reply Quote 1
                            • Negalein
                              Negalein Global Moderator @paul53 last edited by

                              @paul53 sagte in Website auslesen/JSON parsen:

                              Versuche es damit:

                              Danke, damit hats funktioniert! 🙂

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

                                @paul53 sagte in Website auslesen/JSON parsen:

                                Die Funktion, die ich gepostet habe,

                                Noch eine Frage.
                                Wenn ich mehrere Messstellen abfragen möchte, ist es dann besser für jede Messstelle ein eigenes Script, oder kann man in dem bestehendem mehrere einfügen?

                                Es ginge noch um diese zusätzlichen Messstellen.
                                https://api.pegelalarm.at/api/station/1.0/list?qStationName=Pramerdorf
                                https://api.pegelalarm.at/api/station/1.0/list?qStationName=Passau%20Ingling
                                https://api.pegelalarm.at/api/station/1.0/list?qStationName=Passau%20Marienbr%C3%BCcke

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

                                  @negalein sagte: kann man in dem bestehendem mehrere einfügen?

                                  Man kann das Skript um mehrere Messstellen erweitern. Gibt es zeitliche Einschränkungen beim Zugriff auf die API?

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

                                    @paul53 sagte in Website auslesen/JSON parsen:

                                    Gibt es zeitliche Einschränkungen beim Zugriff auf die API?

                                    Kann ich leider nicht sagen, da keine Doku zur 1.0 existiert.

                                    Dann erstell ich besser getrennte Scripte mit unterschiedlichen Schedules.

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    1.1k
                                    Online

                                    31.7k
                                    Users

                                    79.7k
                                    Topics

                                    1.3m
                                    Posts

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