Ankündigung

Einklappen
Keine Ankündigung bisher.

Deutsche Bahn Monitor - Denkanstöße gesucht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Hi Jan,

    du musst vor dem JSON parsing in deinem JS Code einfach folgende 2 Zeilen einfügen. Wie udo1toni schon geschrieben hat, sind die Daten vorher noch nicht JSON valide.
    Code:
    input = input.replace("; BAHN_MNB.processFahrtmoeglichkeiten();","");
    input = input.replace("BAHN_MNB.fm = ","");
    Gruß Marc

    Kommentar


      #17
      Vielen Dank Marc. Werde ich gleich mal probieren!

      Jan

      Kommentar


        #18
        Hallo Marc,

        leider funktioniert das irgendwie nicht:

        folgender Code ist nun in der bahn.js

        Code:
        input = input.replace("BAHN_MNB.fm =","");
        input = input.replace("; BAHN_MNB.processFahrtmoeglichkeiten();","");
        JSON.parse(input).fl[0].abpm;
        Ich hatte nochmal geschaut, wie der Syntax für die Funktion input.replace lauten muss und das JSON mit einem funktionierenden verglichen und entsprechend das zu entfernende identifiziert. Trotzdem bekomme ich im openhab.log nun einen Fehler

        Code:
        2016-03-09 21:23:23 [HTTP Refresh Service] ERROR o.o.b.http.internal.HttpBinding - transformation throws exception [transformation=JS(bahn.js), response=BAHN_MNB.fm = {
        "S": "Hamburg Dammtor",
        "Z": "Berlin Hbf",
        "fl": [
        {
        "ab":"21:45",
        "abps":0,
        "abpm":"p??nktlich",
        "an":"23:54",
        "anps":0,
        "anpm":"-",
        "u":0,
        "d":"2:09",
        "g":"4",
        "ps":"ICE",
        "pl":"ICE",
        "durl":"http://reiseauskunft.bahn.de/bin/query2.exe/dn?ld=15079&country=DEU&rt=1&date=09.03.16&time=21:40&S=008002548&Z=008011160&start=1&",
        "surl":"http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?input=Hamburg%20Dammtor%238002548&boardType=dep&date=09.03.16&time=21%3A45&productsFilter=111111111&rt=1&start=1",
        "zurl":"http://reiseauskunft.bahn.de/bin/bhftafel.exe/dn?input=Berlin%20Hbf%20(tief)%238098160&boardType=arr&date=09.03.16&time=23%3A54&productsFilter=111111111&rt=1&start=1"
        }
        ]};
        BAHN_MNB.processFahrtmoeglichkeiten();
        ]
        org.openhab.core.transform.TransformationException: An error occured while executing script.
            at org.openhab.core.transform.internal.service.JavaScriptTransformationService.transform(JavaScriptTransformationService.java:86) ~[na:na]
            at org.openhab.binding.http.internal.HttpBinding.execute(HttpBinding.java:182) ~[na:na]
            at org.openhab.core.binding.AbstractActiveBinding$BindingActiveService.execute(AbstractActiveBinding.java:156) [org.openhab.core_1.8.0.jar:na]
            at org.openhab.core.service.AbstractActiveService$RefreshThread.run(AbstractActiveService.java:173) [org.openhab.core_1.8.0.jar:na]
        Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: SyntaxError: Expected end of stream at char 681 (<Unknown source>#3) in <Unknown source> at line number 3
            at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:224) ~[na:1.7.0_40]
            at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249) ~[na:1.7.0_40]
            at org.openhab.core.transform.internal.service.JavaScriptTransformationService.transform(JavaScriptTransformationService.java:84) ~[na:na]
            ... 3 common frames omitted
        Caused by: sun.org.mozilla.javascript.internal.EcmaError: SyntaxError: Expected end of stream at char 681 (<Unknown source>#3)
            at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3771) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3749) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.NativeJSON.parse(NativeJSON.java:144) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.NativeJSON.execIdCall(NativeJSON.java:120) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.IdFunctionObject.call(IdFunctionObject.java:126) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.Interpreter.interpretLoop(Interpreter.java:1706) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.Interpreter.interpret(Interpreter.java:849) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.InterpretedFunction.call(InterpretedFunction.java:162) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.ContextFactory.doTopCall(ContextFactory.java:433) ~[na:1.7.0_40]
            at com.sun.script.javascript.RhinoScriptEngine$1.superDoTopCall(RhinoScriptEngine.java:116) ~[na:1.7.0_40]
            at com.sun.script.javascript.RhinoScriptEngine$1.doTopCall(RhinoScriptEngine.java:109) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.ScriptRuntime.doTopCall(ScriptRuntime.java:3161) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.InterpretedFunction.exec(InterpretedFunction.java:173) ~[na:1.7.0_40]
            at sun.org.mozilla.javascript.internal.Context.evaluateReader(Context.java:1159) ~[na:1.7.0_40]
            at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:214) ~[na:1.7.0_40]
            ... 5 common frames omitted
        Vielen Dank für eure Hilfe

        Jan

        Kommentar


          #19
          Der hintere Teil wurde nicht abgeschnitten, vermutlich müsstest Du die Zeile
          Code:
          input = input.replace("; BAHN_MNB.processFahrtmoeglichkeiten();","");
          abändern in
          Code:
          input = input.replace(";[COLOR=#FF0000]\r[/COLOR]BAHN_MNB.processFahrtmoeglichkeiten();","");
          oder sowas ähnliches.

          Kommentar


            #20
            Hallo Marc,

            kannst du mir ein Tool empfehlen, mit dem ich prüfen kann wie das Ergebnis aussieht? Ich habe das mit Fiddle versucht, da passiert aber gar nichts.

            Danke

            jan

            Kommentar


              #21
              Hallo Jan,

              Ich hatte es am PI mit Rhino getestet. Eventuell ist aber beim Inhalt kopieren ein Zeichen wie \n oder \r verloren gegangen. Ich kann das im Moment leider nicht ausprobieren.

              Viele Grüße aus Sulawesi.
              Zuletzt geändert von fog; 10.03.2016, 08:26.

              Kommentar


                #22
                Notepad++ hat ein JSON-Viewer Modul, wenn man sich dann noch zusätzlich die nicht druckbaren Zeichen einblendet, hat man schön Quelltext und JSON nebeneinander bzw. der Viewer motzt die Fehler auch an.

                Kommentar


                  #23
                  Hallo,

                  kurzes Update: Ich habe es nun hinbekommen, das Bahn JSON so zu bearbeiten, das ich Werte auslesen kann.

                  Die js muss wie folgt befüllt werden:
                  Code:
                  input = input.replace("BAHN_MNB.fm =","");
                  input = input.replace(";\nBAHN_MNB.processFahrtmoeglichkeiten();","");
                  JSON.parse(input).fl[0].abpm;
                  Das Item sieht wie folgt aus:
                  Code:
                  String Zug "Pünktlich? [%s]" { http="<[http://reiseauskunft.bahn.de/bin/query.exe/dn?cb=processFahrtmoeglichkeiten&nrCons=1&S=8002548&SBH=1&Z=8011160&ZBH=1&journeyProducts=1023&wTime=17:25&widget=1&start=1&encoding=utf-8:300000:JS(bahn.js)]"}
                  Damit kann ich mir nun anzeigen ob mein Zug pünktlich losfährt.

                  Nächste Stufe wird nun das Erstellen einer Regel, das die für mich passenden Züge angezeigt werden. Alle dazwischen haben keine Relevanz für mich.

                  Danke für die bisherige Unterstützung.

                  ​Jan

                  Kommentar


                    #24
                    Zitat von jantum Beitrag anzeigen
                    Hallo,

                    kurzes Update: Ich habe es nun hinbekommen, das Bahn JSON so zu bearbeiten, das ich Werte auslesen kann.

                    Die js muss wie folgt befüllt werden:
                    Code:
                    input = input.replace("BAHN_MNB.fm =","");
                    input = input.replace(";\nBAHN_MNB.processFahrtmoeglichkeiten();","");
                    JSON.parse(input).fl[0].abpm;
                    Das Item sieht wie folgt aus:
                    Code:
                    String Zug "Pünktlich? [%s]" { http="<[http://reiseauskunft.bahn.de/bin/query.exe/dn?cb=processFahrtmoeglichkeiten&nrCons=1&S=8002548&SBH=1&Z=8011160&ZBH=1&journeyProducts=1023&wTime=17:25&widget=1&start=1&encoding=utf-8:300000:JS(bahn.js)]"}
                    Damit kann ich mir nun anzeigen ob mein Zug pünktlich losfährt.

                    Nächste Stufe wird nun das Erstellen einer Regel, das die für mich passenden Züge angezeigt werden. Alle dazwischen haben keine Relevanz für mich.

                    Danke für die bisherige Unterstützung.

                    ​Jan
                    Hi, gibt es was neues zu dem Thema?

                    Kommentar


                      #25
                      So, ich habe selbst für mich eine Lösung gebastelt, so sieht es aus:

                      2017-10-25 20.27.38.png
                      2017-10-25 20.27.32.png

                      Das braucht man:
                      sitemap:
                      Code:
                      Frame  { //"Bahn"
                              Text item=verbindung0 label="Zug" valuecolor=[farbe0=="gruen"="green",farbe0=="rot"="red",farbe0=="gelb"="orange"]{
                                      Text item=direction  
                                      Text item=verbindung0 valuecolor=[farbe0=="gruen"="green",farbe0=="rot"="red",farbe0=="gelb"="orange"]
                                      Text item=verbindung1 valuecolor=[farbe1=="gruen"="green",farbe1=="rot"="red",farbe1=="gelb"="orange"]
                                      Text item=verbindung2 valuecolor=[farbe2=="gruen"="green",farbe2=="rot"="red",farbe2=="gelb"="orange"]
                                  }
                          }
                      items:
                      Code:
                      String direction "Richtung: [%s]"     <train>
                      String sbahn0     "S: [%s]"
                      String ure0     "U,RE: [%s]"
                      String verbindung0 "Verbindung 1: [%s]" <train>
                      String farbe0    "Farbe [%s]"
                      String sbahn1     "S: [%s]"
                      String ure1     "U,RE: [%s]"
                      String verbindung1 "Verbindung 2: [%s]" <train>
                      String farbe1    "Farbe [%s]"
                      String sbahn2     "S: [%s]"
                      String ure2     "U,RE: [%s]"
                      String verbindung2 "Verbindung 3: [%s]" <train>
                      String farbe2    "Farbe [%s]"
                      rule:
                      Code:
                      rule "Bahn"
                      when
                          Time cron "0 0/3 * * * ?"  //prüfe alle 3 Minuten
                      then
                      
                          var String bahnJson
                          if(now.getMinuteOfDay > 719 ){ //ab 12:00 weg Zurück
                              postUpdate(direction,"ERL ► NBG Rtbrg.")
                              bahnJson = sendHttpGetRequest("http://reiseauskunft.bahn.de/bin/query.exe/dn?cb=processFahrtmoeglichkeiten&nrCons=3&Z=8004473&SBH=1&S=8001844&journeyProducts=1016&widget=1&start=1&encoding=utf-8")
                          }
                          else
                          {
                              postUpdate(direction,"NBG Rtbrg. ► ERL")
                              bahnJson = sendHttpGetRequest("http://reiseauskunft.bahn.de/bin/query.exe/dn?cb=processFahrtmoeglichkeiten&nrCons=3&S=8004473&SBH=1&Z=8001844&journeyProducts=1016&widget=1&start=1&encoding=utf-8")
                          }
                          bahnJson = bahnJson.replace("BAHN_MNB.fm = ","")
                          bahnJson = bahnJson.replace("; BAHN_MNB.processFahrtmoeglichkeiten(); ","")
                      
                          var String ab0        = transform("JSONPATH", "$.fl[0].ab", bahnJson)
                          var String abpm0    = transform("JSONPATH", "$.fl[0].abpm", bahnJson)
                          var String u0        = transform("JSONPATH", "$.fl[0].u", bahnJson)
                          var String an0        = transform("JSONPATH", "$.fl[0].an", bahnJson)
                          var String anpm0    = transform("JSONPATH", "$.fl[0].anpm", bahnJson)
                          var String pl0        = transform("JSONPATH", "$.fl[0].pl", bahnJson)
                          var String ab1        = transform("JSONPATH", "$.fl[1].ab", bahnJson)
                          var String abpm1    = transform("JSONPATH", "$.fl[1].abpm", bahnJson)
                          var String u1        = transform("JSONPATH", "$.fl[1].u", bahnJson)
                          var String an1        = transform("JSONPATH", "$.fl[1].an", bahnJson)
                          var String anpm1    = transform("JSONPATH", "$.fl[1].anpm", bahnJson)
                          var String pl1        = transform("JSONPATH", "$.fl[1].pl", bahnJson)
                          var String ab2        = transform("JSONPATH", "$.fl[2].ab", bahnJson)
                          var String abpm2    = transform("JSONPATH", "$.fl[2].abpm", bahnJson)
                          var String u2        = transform("JSONPATH", "$.fl[2].u", bahnJson)
                          var String an2        = transform("JSONPATH", "$.fl[2].an", bahnJson)
                          var String anpm2    = transform("JSONPATH", "$.fl[2].anpm", bahnJson)
                          var String pl2        = transform("JSONPATH", "$.fl[2].pl", bahnJson)
                      
                          var delayab0 = ""
                          var delayan0 = ""
                          var delayab1 = ""
                          var delayan1 = ""
                          var delayab2 = ""
                          var delayan2 = ""
                      
                      if(abpm0 != "pünktlich" && abpm0 != "-")
                      {
                          delayab0 = "+" + abpm0
                      }
                      if(anpm0 != "pünktlich" && anpm0 != "-")
                      {
                          delayan0 = "+" + anpm0
                      }
                      var String verb0 = ""
                      if(delayab0 != "")
                          postUpdate(farbe0,"rot")
                      else
                          if(u0 != "0")
                              postUpdate(farbe0,"gelb")
                          else
                              postUpdate(farbe0,"gruen")
                      
                          verb0 = pl0 + " " + ab0 + delayab0 + " ► " + an0 + delayan0
                      
                          logInfo("BAHN0", verb0)
                          postUpdate(verbindung0,verb0)
                      
                      if(abpm1 != "pünktlich" && abpm1 != "-")
                      {
                          delayab1 = "+" + abpm1
                      }
                      if(anpm1 != "pünktlich" && anpm1 != "-")
                      {
                          delayan1 = "+" + anpm1
                      }
                      var String verb1 = ""
                      
                      if(delayab1 != "")
                          postUpdate(farbe1,"rot")
                      else
                          if(u1 != "0")
                              postUpdate(farbe1,"gelb")
                          else
                              postUpdate(farbe1,"gruen")
                      
                          verb1 = pl1 + " " + ab1 + delayab1 + " ► " + an1 + delayan1
                      
                          logInfo("BAHN1", verb1)
                          postUpdate(verbindung1,verb1)
                      if(abpm2 != "pünktlich" && abpm2 != "-")
                      {
                          delayab2 = "+" + abpm2
                      }
                      if(anpm2 != "pünktlich" && anpm2 != "-")
                      {
                          delayan2 = "+" + anpm2
                      }
                      var String verb2 = ""
                      if(delayab2 != "")
                          postUpdate(farbe2,"rot")
                      else
                          if(u2 != "0")
                              postUpdate(farbe2,"gelb")
                          else
                              postUpdate(farbe2,"gruen")
                          verb2 = pl2 + " " + ab2 + delayab2 + " ► " + an2 + delayan2
                      
                          logInfo("BAHN2", verb2)
                          postUpdate(verbindung2,verb2)
                      end
                      Um eigene Stationen einzutragen, muss man im http-Link die Haltestellenummer nach "S=" und "Z=" ändern. (S=Start, Z=Ziel)
                      Die Nummer findet man hier: http://www.michaeldittrich.de/ibnr/online.php

                      Die Farben bedeuten:
                      Grün: keine Verspätung und kein Umstieg.
                      Orange: mindestens ein Umstieg, aber keine Verspätung
                      Rot: Verspätung

                      Kommentar

                      Lädt...
                      X