Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]JSON.parse Problem mit WienerLinien Daten

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    [gelöst]JSON.parse Problem mit WienerLinien Daten

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

      Ich habe nun folgendes Problem. Die Wiener Linien stellen mit einem Aufruf (z.B. Abfahrtsdaten77A-Lusthaus JSON Daten für den Abfahrtsmonitor zur Verfügung.


      {"data":{"monitors":[{"locationStop":{"type":"Feature","geometry":{"type":"Point","coordinates":[16.4401136,48.1934097]},"properties":{"name":"60200818","title":"Lusthaus, Aspernallee","municipality":"Wien","municipalityId":90001,"type":"stop","coordName":"WGS84","attributes":{"rbl":2139}}},"lines":[{"name":"77A","towards":"Rennweg S","direction":"R","platform":"2","richtungsId":"2","barrierFree":true,"realtimeSupported":true,"trafficjam":false,"departures":{"departure":[{"departureTime":{"timePlanned":"2020-02-02T18:27:00.000+0100","timeReal":"2020-02-02T18:27:00.000+0100","countdown":8}},{"departureTime":{"timePlanned":"2020-02-02T18:37:00.000+0100","timeReal":"2020-02-02T18:37:00.000+0100","countdown":18}},{"departureTime":{"timePlanned":"2020-02-02T18:47:00.000+0100","timeReal":"2020-02-02T18:47:00.000+0100","countdown":28}},{"departureTime":{"timePlanned":"2020-02-02T18:57:00.000+0100","timeReal":"2020-02-02T18:57:00.000+0100","countdown":38}},{"departureTime":{"timePlanned":"2020-02-02T19:07:00.000+0100","timeReal":"2020-02-02T19:07:00.000+0100","countdown":48}},{"departureTime":{"timePlanned":"2020-02-02T19:17:00.000+0100","timeReal":"2020-02-02T19:17:00.000+0100","countdown":58}},{"departureTime":{"timePlanned":"2020-02-02T19:27:00.000+0100","timeReal":"2020-02-02T19:27:00.000+0100","countdown":68}}]},"type":"ptBusCity","lineId":477}],"attributes":{}}]},"message":{"value":"OK","messageCode":1,"serverTime":"2020-02-02T18:18:38.000+0100"}}

      Sind also die Rohdaten.
      mit folgendem Code

      on({id: "parser.0.WL77A", change: 'any'}, function(obj) {
      var gasStation = JSON.parse(obj.state.val);
      if (!Array.isArray(gasStation) ) {
      log ("Array nicht angelegt!");
      return;
      }
      if (gasStation.length === 0) {
      log ("Array hat Länge 0");
      return;
      }
      var myStation = obj.data.monitors[0].locationStop.properties.title;
      log ("Station: " + myStation);

      komme ich nur bis: Array nicht angelegt!
      Da klappt das parsen wohl nicht.
      Im Adapter habe ich wie folgt eingestellt:
      ![Bild Text](3ef11c63-731c-4db8-b089-8f43f4a49bfc-grafik.png Bild Link)
      Was mache ich da falsch?

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

        @Stephan66 sagte:

        Was mache ich da falsch?

        Der "Umweg" über den Parser-Adapter ist nicht nötig, da man den JSON direkt per request() von der Webseite einlesen kann. Welche Werte brauchst Du ?

        Wien77A.JPG

        1 Reply Last reply Reply Quote 0
        • S
          Stephan66 last edited by

          Vielen Dank für die rasche Antwort.
          Benötigt werden nur die Daten von departure: "0"-"3" TimePlanned, TimeReal und countdown.
          Also eigentlich nur diese 12 Werte. Sollten dann in Datenpunkte geschrieben werden - dürfte aber dann das geringere Problem sein.

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

            @Stephan66 sagte:

            "0"-"3" TimePlanned, TimeReal und countdown.

            Anstelle von log in Datenpunkte schreiben:

            const url = 'https://www.wienerlinien.at/ogd_realtime/monitor?rbl=2139';
            
            function abfahrten() {
                request(url, function(error, response, result) {
                    let zeiten = JSON.parse(result).data.monitors[0].lines[0].departures.departure;
                    let anzahl = zeiten.length;
                    if(anzahl > 4) anzahl = 4;
                    for(let i = 0; i < anzahl; i++) {
                        log(zeiten[i].departureTime.timePlanned);
                        log(zeiten[i].departureTime.timeReal);
                        log(zeiten[i].departureTime.countdown);
                   }
                });
            }
            
            schedule('* * * * *', abfahrten); // jede Minute
            
            1 Reply Last reply Reply Quote 0
            • S
              Stephan66 last edited by

              @paul53 sagte in JSON.parse Problem mit WienerLinien Daten:

              const url = 'https://www.wienerlinien.at/ogd_realtime/monitor?rbl=2139';

              Super. Klappt. Vielen Dank.
              Da habe ich wohl über zu viele Ecken gedacht.
              Ich bastle dann mal weiter.

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

              Support us

              ioBroker
              Community Adapters
              Donate

              870
              Online

              31.6k
              Users

              79.4k
              Topics

              1.3m
              Posts

              javascript
              2
              5
              389
              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