Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Aktuelle Abfahrtszeiten Straßenbahn-Haltestelle einlesen ?!?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Aktuelle Abfahrtszeiten Straßenbahn-Haltestelle einlesen ?!?

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

      Hallo in die Runde,

      bin recht neu bei Iobroker ,habe bis jetzt aber dennoch alle Wünsche dank dem Forum und den

      sehr guten Beschreibungen umsetzen können.

      Ich würde jetzt gern die aktuellen Abfahrtszeiten einer Straßenbahn-Haltestelle im VIS darstellen ,

      habe aber leider keinerlei Ahnung von Scripten usw.

      Im Internet bin ich auf GitHub auf ein Node.js Script usw. gestoßen:

      https://github.com/kiliankoe/dvbjs

      außerdem noch auf andere Versionen in verschiedenen Script-Sprachen: Python usw…

      https://github.com/kiliankoe/vvo#libraries

      Ist zwar sehr speziell und funktioniert sicherlich auch nur für Dresden, aber besteht die Möglichkeit,

      dies "einfach" in iobroker zu integrieren oder gibt es einen anderen Weg, mein Vorhaben umzusetzen?

      Bin für jede Hilfe Dankbar.

      Grüße

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

        In der Konfiguration der Javascript-Instanz unter 'Zusätzliche NPM-Module" eingeben: dvbjs

        Hier ein Beispiel für die Haltestelle "Zellescher Weg":

        var dvb = require('dvbjs');
        
        var stop = 'Zellescher Weg';
        var timeOffset = 1; // how many minutes in the future, 0 for now
        var numResults = 18; // number of results
        var dirs = [];
        
        function Zeiten(obj) {
            var name = 'dvb.' + obj.line + '.' + obj.direction;
            if (dirs.indexOf(name) == -1) {
                dirs.push(name);
                var idAbfahrt = getIdByName(name + '.Abfahrt');
                if(!idAbfahrt) log('Datenpunkte zu ' + name + ' existieren nicht !', 'warn');
                else {
                    var idDelay = getIdByName(name + '.Verspätung');
                    var abfahrt = formatDate(obj.scheduledTime, 'hh:mm');
        //            log(name + '.Abfahrt: ' + abfahrt);
                    setState(idAbfahrt, abfahrt, true);
                    setState(idDelay, obj.delayTime, true);
                }
            }    
        }
        
        function getData () {
            dvb.monitor(stop, timeOffset, numResults, function(err, data) {
                if (err) log('Fehler DVB-Abfrage: ' + err, 'error');
                else {
                    dirs = [];
                    for( var i = 0; i < data.length; i++) {
                        Zeiten(data[i]);
                    }
                }    
            });
        }
        
        schedule('* * * * *', getData);  // jede Minute
        
        function createDP(id, name) {
            createState('dvb.' + id + '.Abfahrt', '00:00', {
                type: 'string',
                name: 'dvb.' + name + '.Abfahrt'
            });
            createState('dvb.' + id + '.Verspaetung', 0, {
                type: 'number',
                name: 'dvb.' + name + '.Verspätung',
                min: 0,
                max: 60,
                unit: 'min'
            });
         }
        
        createDP('11.Buehlau', '11.Bühlau');
        createDP('11.Zschertnitz', '11.Zschertnitz');
        createDP('61.Fernsehturm', '61.Fernsehturm');
        createDP('61.E_Karcherallee', '61.E Karcherallee');
        createDP('61.Loebtau', '61.Löbtau');
        createDP('61.Weissig', '61.Weißig');
        

        EDIT: So sieht es dann im Reiter "Objekte" aus:
        493_dvb_dp.jpg

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

          Verbesserte Version mit automatischer Erzeugung der Datenpunkte beim ersten Auftreten einer Richtung:

          var dvb = require('dvbjs');
          
          var stop = 'Zellescher Weg';
          var timeOffset = 1; // how many minutes in the future, 0 for now
          var numResults = 18; // number of results
          var dirs = [];
          
          function umlaut(value){
            value = value.replace(/Ä/g, 'Ae');
            value = value.replace(/Ö/g, 'Oe');
            value = value.replace(/Ü/g, 'Ue');
            value = value.replace(/ä/g, 'ae');
            value = value.replace(/ö/g, 'oe');
            value = value.replace(/ü/g, 'ue');
            value = value.replace(/ß/g, 'ss');
            value = value.replace(/ /g, '_');
            value = value.replace(/\./g, '');
            value = value.replace(/,/g, '');
            value = value.replace(/\(/g, '');
            value = value.replace(/\)/g, '');
            return value;
          }
          
          function createDPs(id, name) {
              createState('dvb.' + id + '.Abfahrt', '00:00', {
                  type: 'string',
                  name: 'dvb.' + name + '.Abfahrt'
              });
              createState('dvb.' + id + '.Verspaetung', 0, {
                  type: 'number',
                  name: 'dvb.' + name + '.Verspätung',
                  min: 0,
                  max: 60,
                  unit: 'min'
              });
          }
          
          function newDPs(line, dir) {
              var name = line + '.' + dir;
              var id = line + '.' + umlaut(dir);
              createDPs(id, name);
              log('Neue Datenpunkte erstellt zu: ' + name);
          }
          
          function Zeiten(obj) {
              var name = 'dvb.' + obj.line + '.' + obj.direction;
              if (dirs.indexOf(name) == -1) {
                  dirs.push(name);
                  var idAbfahrt = getIdByName(name + '.Abfahrt');
                  if(!idAbfahrt) newDPs(obj.line, obj.direction);
                  else {
                      var idDelay = getIdByName(name + '.Verspätung');
                      var abfahrt = formatDate(obj.scheduledTime, 'hh:mm');
          //            log(name + '.Abfahrt: ' + abfahrt);
                      setState(idAbfahrt, abfahrt, true);
                      setState(idDelay, obj.delayTime, true);
                  }
              }    
          }
          
          function getData () {
              dvb.monitor(stop, timeOffset, numResults, function(err, data) {
                  if (err) log('Fehler DVB-Abfrage: ' + err, 'error');
                  else {
                      dirs = [];
                      for( var i = 0; i < data.length; i++) {
                          Zeiten(data[i]);
                      }
                  }    
              });
          }
          
          schedule('* * * * *', getData);  // jede Minute
          
          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Halllo,

            Unglaublich, wie einfach es gehen kann. In meiner Stadt muss ich mich mit dem Parsen der mobilen Webseite des Verkehrsbetriebes rumschlagen und langen Code schreiben, um die nächste Bahn in eine Richtung zu erhalten. Wäre echt gut, auch solche Daten, wie in Dresden zu haben. Aber hier ist man eine Kooperation mit google eingegangen. Google erhält alle Daten für seine Apps, nicht aber die Öffentlichkeit.

            Auf dieser Basis macht ein Adapter auch keinen Sinn.

            Musste ich mal loswerden. 🙂

            Pix

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

              Eine einfachere Variante schreibt die Abfahrzeiten in 8 Datenpunkte in der Form

              19:00 +2 Linie 11 nach Zschertnitz

              var dvb = require('dvbjs');
              
              var stop = 'Zellescher Weg';
              var timeOffset = 1; // how many minutes in the future, 0 for now
              var numResults = 8; // number of results
              
              function umlaut(value){
                value = value.replace(/Ä/g, 'Ae');
                value = value.replace(/Ö/g, 'Oe');
                value = value.replace(/Ü/g, 'Ue');
                value = value.replace(/ä/g, 'ae');
                value = value.replace(/ö/g, 'oe');
                value = value.replace(/ü/g, 'ue');
                value = value.replace(/ß/g, 'ss');
                value = value.replace(/ /g, '_');
                value = value.replace(/\./g, '');
                value = value.replace(/,/g, '');
                value = value.replace(/\(/g, '');
                value = value.replace(/\)/g, '');
                return value;
              }
              
              var idStop = 'dvb.' + umlaut(stop) + '.';
              
              for(var i = 0; i < numResults; i++) {
                  createState(idStop + i, '00:00', {
                      type: 'string',
                      name: 'dvb.' + stop + '.' + i,
                      desc: 'Abfahrt ' + stop
                  });
              }
              
              function Zeiten(obj, id) {
                  var abfahrt = formatDate(obj.scheduledTime, 'hh:mm');
                  setState(id, abfahrt + ' +' + obj.delayTime + ' Linie ' + obj.line + ' nach ' + obj.direction, true);
              }
              
              function getData () {
                  dvb.monitor(stop, timeOffset, numResults, function(err, data) {
                      if (err) log('Fehler DVB-Abfrage: ' + err, 'error');
                      else {
                          for( var i = 0; i < data.length; i++) {
                              Zeiten(data[i], idStop + i);
                          }
                      }    
                  });
              }
              
              schedule('* * * * *', getData);  // jede Minute
              
              1 Reply Last reply Reply Quote 0
              • R
                Ritschy2000 last edited by

                Ich bin begeistert…. 10000 x DANKE für die Hilfe...

                Leider bekomme ich folgende Fehlermeldung:

                javascript.0 script.js.Straßenbahn.dvbs: Cannot find module 'bluebird' at Module._compile (module.js:409:26), at Object.Module._extensions..js (module.js:416:10), at Module.load (module.js:343:32), at Function.Module._load (module.js:300:12), at Module.require (module.js:353:17), at require (internal/module.js:12:17), at Object. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/dvbjs/index.js:6:14), at Module._compile (module.js:409:26), at Object.Module._extensions..js (module.js:416:10), at Module.load (module.js:343:32), at Function.Module._load (module.js:300:12), at Module.require (module.js:353:17), at require (internal/module.js:12:17), at sandbox.require (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:748:32), at script.js.Straßenbahn.dvbs:1:11

                liegt sicherlich daran, dass ich noch :

                Javascript/Node.js 0.13.2 statt: 1.0.3 installiert habe, oder?

                Werde es mal update und erneut probieren...

                Grüße

                1 Reply Last reply Reply Quote 0
                • R
                  Ritschy2000 last edited by

                  muss leider noch mal nerven, bekomme es einfach nicht hin:

                  habe folgendes gemacht:

                  im Bereich Adapter über:

                  "installiere aus eigener URL" : https://github.com/kiliankoe/dvbjs installiert:

                  LOG:iobroker 2017-07-16 17:24:29.083 info exit 0

                  iobroker 2017-07-16 17:24:29.012 info └── request-promise@4.2.1 (stealthy-require@1.1.1, bluebird@3.5.0, tough-cookie@2.3.2, request-promise-core@1.1.1)

                  iobroker 2017-07-16 17:24:29.012 info ├── request@2.81.0 (aws-sign2@0.6.0, tunnel-agent@0.6.0, oauth-sign@0.8.2, forever-agent@0.6.1, is-typedarray@1.0.0, caseless@0.12.0, safe-buffer@5.1.1, stringstream@0.0.5, aws4@1.6.0, isstream@0.1.2,

                  iobroker 2017-07-16 17:24:29.012 info dvbjs@4.3.5 opt/iobroker/node_modules/dvbjs├── proj4@2.4.3 (wkt-parser@1.2.0, mgrs@1.0.0)

                  iobroker 2017-07-16 17:23:50.746 info npm install https://github.com/kiliankoe/dvbjs/tarball/master –production --prefix "/opt/iobroker" (System call)

                  iobroker 2017-07-16 17:23:50.362 info install https://github.com/kiliankoe/dvbjs/tarball/master

                  iobroker 2017-07-16 17:23:49.032 info url "https://github.com/kiliankoe/dvbjs" --debug

                  zusätzliches NPM Modul: "dvbjs" eingetragen, Script kopiert und gestartet:

                  folgende Fehlermelung:

                  javascript.0 script.js.Straßenbahn.dvbs: Cannot find module 'bluebird' at Module._compile (module.js:409:26), at Object.Module._extensions..js (module.js:416:10), at Module.load (module.js:343:32), at Function.Module._load (module.js:300:12), at Module.require (module.js:353:17), at require (internal/module.js:12:17), at Object. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/dvbjs/index.js:6:14), at Module._compile (module.js:409:26), at Object.Module._extensions..js (module.js:416:10), at Module.load (module.js:343:32), at Function.Module._load (module.js:300:12), at Module.require (module.js:353:17), at require (internal/module.js:12:17), at sandbox.require (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:748:32), at script.js.Straßenbahn.dvbs:1:11

                  17:19:14.975 [info] javascript.0 script.js.Straßenbahn.dvbs: registered 0 subscriptions and 1 schedule

                  Jemand eine Idee??

                  Was habe ich falsch gemacht.

                  Danke im Voraus.

                  Gruße

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

                    @Ritschy2000:

                    habe folgendes gemacht:

                    im Bereich Adapter über:

                    "installiere aus eigener URL" : https://github.com/kiliankoe/dvbjs installiert: `
                    Das ist unnötig, da das NPM-Modul, das in der JS-Konfiguration neu eingetragen wird, automatisch installiert wird.
                    @Ritschy2000:

                    javascript.0 script.js.Straßenbahn.dvbs: Cannot find module 'bluebird' `
                    Welche node-Version ? Auf Konsole prüfen mit node -v .

                    1 Reply Last reply Reply Quote 0
                    • R
                      Ritschy2000 last edited by

                      ahhh, okay. war mir nicht bekannt, dass es durch den Eintrag mit installiert wird…

                      Node Version ist 4.7.0

                      welche Version wird empfohlen??

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

                        Version 4.7.0 sollte o.k. sein. Existiert bei Dir das Verzeichnis ?
                        > ioBroker\node_modules\iobroker.javascript\node_modules\dvbjs\node_modules\bluebird
                        Ich würde einen zweiten Versuch wagen: dvbjs aus der Konfig löschen und Adapter neu starten (speichern) und anschließend wieder dvbjs eintragen. Vielleicht wird das Modul 'bluebird' dann installiert ?

                        Oder installiere 'bluebird' manuell

                        npm install --save bluebird
                        
                        1 Reply Last reply Reply Quote 0
                        • R
                          Ritschy2000 last edited by

                          geht leider immer noch nicht…

                          bluebird war im Verzeichnis nicht vorhanden, habe es jetzt installiert:

                          /opt/iobroker/node_modules/dvbjs/node_modules# ls

                          bluebird proj4 request request-promise

                          /opt/iobroker/node_modules/dvbjs/node_modules/bluebird# ls

                          changelog.md js LICENSE package.json README.md

                          sollte alles vorhanden sein. Reboot habe ich auch gemacht...

                          Fehlermeldung bleibt: 😞

                          javascript.0 script.js.dvbjs.dvbs: Cannot find module 'bluebird' at Module._compile (module.js:409:26), at Object.Module._extensions..js (module.js:416:10), at Module.load (module.js:343:32), at Function.Module._load (module.js:300:12), at Module.require (module.js:353:17), at require (internal/module.js:12:17), at Object. (/opt/iobroker/node_modules/iobroker.javascript/node_modules/dvbjs/index.js:6:14), at Module._compile (module.js:409:26), at Object.Module._extensions..js (module.js:416:10), at Module.load (module.js:343:32), at Function.Module._load (module.js:300:12), at Module.require (module.js:353:17), at require (internal/module.js:12:17), at sandbox.require (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:748:32), at script.js.dvbjs.dvbs:1:11

                          1 Reply Last reply Reply Quote 0
                          • R
                            Ritschy2000 last edited by

                            Jetzt habe ich es doch noch hinbekommen:

                            unter opt/iobroker/node_modules/iobroker.javascript/node_modules/dvbjs/node_modules/

                            Bluebird installiert, jetzt läuft es…

                            VIELEN VIELEN DANK!

                            Gruß

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

                              @Ritschy2000:

                              Jetzt habe ich es doch noch hinbekommen:

                              Es freut mich, das zu lesen 😄

                              Dann markiere bitte noch das Thema als gelöst (im ersten Beitrag).

                              1 Reply Last reply Reply Quote 0
                              • R
                                Ritschy2000 last edited by

                                erledigt. 🙂

                                1 Reply Last reply Reply Quote 0
                                • D
                                  DUDU last edited by

                                  hallo ich würde gerne so etwas mit dem VBN Haltestellenfahrplan umsetzen.

                                  Kann mir jemand eine Möglichkeit nennen?

                                  1 Reply Last reply Reply Quote 0
                                  • R
                                    RMortan last edited by

                                    Hallo habe grad versucht das um zusetzen… Leider bleiben mir um Script die Zeiten für Abfahrten auf 00:00 stehen woran kann das liegen einer ne idee.

                                    Liebe Grüße aus Dresden

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

                                      Hallo,

                                      geht scheinbar nicht mehr oder?
                                      Weil bekomme eine Fehlermeldung wenn ich per eigen URL installieren möchte:

                                      Fertig mit Fehler: (node:13094) UnhandledPromiseRejectionWarning: ParserError: Protocol error, got "H" as reply type byte. Please report this. at handleError (/opt/iobroker/node_modules/redis-parser/lib/parser.js:190:15) at parseType (/opt/iobroker/node_modules/redis-parser/lib/parser.js:304:14)

                                      Gruß Micha

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      610
                                      Online

                                      31.9k
                                      Users

                                      80.1k
                                      Topics

                                      1.3m
                                      Posts

                                      6
                                      17
                                      2754
                                      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