Ankündigung

Einklappen
Keine Ankündigung bisher.

Spritpreise per HTTP-Binding und JSON

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

    #46
    So unterschiedlich tickt die Welt...Ich sehe bei 1,199 immer 1,19, die kleine Neun nehme ich kaum war. Mathematisch hast du aber recht, es sind, wenn man es auf 2 Nachkommastellen kürzt, 1,20.

    Kommentar


      #47
      Hallo, Danke für die Beschreibung wie man die Tankerkönig API in OpenHAB nutzen kann.

      Leider bekomme ich es anscheinend nicht hin das SSL richtig zu installieren (richtiger Ausdruck).
      Musss ich die Beschreibung von mitch77 von einem bestimmten User aus durchführen?
      Muss ich in einem bestimmten Verzeichnis sein?
      Auf meinem Raspi (Raspbian GNU/ Linux 8) finde ich kein Verzeichnis jre/lib/security. (Java Version ist "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode))

      Kann mir da jemand helfen?
      Sorry bin neu auf dem Raspi und damit unter Linux ein Anfänger!

      Der Part mit der Tankerkönig läuft aber sicher (u.a. in meiner eigenen Android App)

      Danke
      Zuletzt geändert von Gast; 29.01.2016, 17:07.

      Kommentar


        #48
        Lösung gefunden (wozu hat man "Schwiegerkinder" ), es war die fehlende Definition von JAVA_HOME und dann noch die fehlenden Root-Rechte für die Kommandos "Wget" und "Keytool". Ergo letztere Kommandos mit "sudo" ausführen wenn es nicht klappt!

        Danke

        Kommentar


          #49
          Hallo, kann mir jemand sagen, wie ich die Preise auf den KNX Bus bekomme? Meine Visu läuft auf einem EibPort. Eigentlich dachte ich, ich könnte es über einen Job HTTP-Request direkt auf dem Eibport lösen. Hier bin ich leider gescheitert. Mit Openhab hat es auf Anhieb funktioniert. Nur habe ich keine Ahnung, wie ich die Werte auf meinen KNX Bus bekomme. Kann mir jemand helfen?

          Danke im Voraus.

          Gruß Mirko

          Kommentar


            #50
            Hast Du schon versucht, es als 7-Byte Text zu verschicken? Im Sourcecode ist DPT 16.000 jedenfalls aufgeführt.

            Kommentar


              #51
              Hallo, danke für die schnelle Antwort.
              Ich habe jetzt folgendes probiert:
              Code:
              Number diesel "Diesel [%.3f Euro]" { http="<[https://creativecommons.tankerkoenig.de/json/detail.php?id=e1a15081-2534-9107-e040-0b0a3dfe563c&apikey=Mein_Key:900000:JS(diesel.js)]", knx="16.000:7/7/0" }
              Leider auch ohne Erfolg. (EIS 15) Probiert habe ich EIS 5, EIS 9 und EIS 15. Gibt es eine Möglichkeit der Umwandlung per Rules?

              Ergänzung: In der Log steht: DPT 16.000 is not supported by the KNX binding.
              Zuletzt geändert von Micro; 24.03.2016, 08:14. Grund: Ergänzung

              Kommentar


                #52
                Vielleicht muss es DPT16.001 sein, die Hauptgruppe 16 ist jedenfalls im Sourcecode gelistet. Ansonsten könntest Du noch versuchen, ob Du die Zahl als Float auf den Bus bekommst. Eine Umwandlung in was auch immer sollte per Rule kein Problem sein, einfach auf Item diesel changed triggern und im then-Teil den umgewandelten Wert mit diesel_knx.sendCommand(wert) an das Item diesel_knx schicken (was natürlich passend mit dem knx Binding angelegt sein muss)

                Kommentar


                  #53
                  Danke für die Bemühungen, aber ich steige hier aus. Du hattest recht, DPT 16.001 funktioniert. Leider versteht der EibPort nur DPT 16.000 (also ASCII EIS 15).
                  Ich werde mich jetzt noch kurz mit dem Thema Rule beschäftigen, aber ob ich da durchsteige... Ich melde mich auf jeden Fall, wenn ich eine Lösung finde.
                  Danke!

                  Kommentar


                    #54
                    Hat jemand eine Sortierung in der Sitemap eingebaut?
                    Zuletzt geändert von Dom1n1c; 26.03.2016, 17:29.

                    Kommentar


                      #55
                      Ja, die Sortierung habe ich jetzt gebaut. Siehe folgenden Thread Sortieren in Sitemap


                      Thomas

                      Kommentar


                        #56
                        Hallo an alle,

                        hat einer von euch die Preise mit der "prices.php" hinbekommen? Ich habe vorher wie auch die detail.php benutzt allerdings bin ich aufgefordert worden umzustellen auf die prices.php. Ich bekomme nun keine Werte mehr angezeigt.

                        Hier mein Item
                        Code:
                        Number BenzinRiedelbach        "Riedelbach[%.3f Euro]"        &lt;ED&gt;                         (Benzin)            { http="&lt;[https://creativecommons.tankerkoenig.de/json/prices.php?ids=5039c7a7-ffe3-480f-8dd0-92c1797edea3&amp;apikey=xxxxx-xxxxx-xxx-xxxxxxx-xx:300000:JS(benzin.js)]" }
                        benzin.js
                        Code:
                        JSON.parse(input).prices.e5;
                        Allerdings bekomme ich hier nur eine Fehlermeldung
                        Code:
                        2016-08-03 19:42:52.832 [ERROR] [.o.b.http.internal.HttpBinding] - transformation throws exception [transformation=JS(benzin.js), response={"ok":true,"license":"CC BY 4.0 -  http:\/\/creativecommons.tankerkoenig.de","data":"MTS-K","prices":{"5039c7a7-ffe3-480f-8dd0-92c1797edea3":{"status":"open","e5":1.219,"e10":1.199,"dies$
                        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.201601052309.jar:na]
                                at org.openhab.core.service.AbstractActiveService$RefreshThread.run(AbstractActiveService.java:173) [org.openhab.core_1.8.0.201601052309.jar:na]
                        Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: missing ; before statement (&lt;Unknown source&gt;#1) in &lt;Unknown source&gt; at line number 1
                                at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:224) ~[na:1.7.0_79]
                                at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:249) ~[na:1.7.0_79]
                                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.EvaluatorException: missing ; before statement (&lt;Unknown source&gt;#1)
                                at sun.org.mozilla.javascript.internal.DefaultErrorReporter.runtimeError(DefaultErrorReporter.java:109) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.DefaultErrorReporter.error(DefaultErrorReporter.java:96) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.addError(Parser.java:232) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.addError(Parser.java:210) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.reportError(Parser.java:267) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.reportError(Parser.java:254) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.reportError(Parser.java:247) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.autoInsertSemicolon(Parser.java:1111) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.statementHelper(Parser.java:1088) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.statement(Parser.java:945) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.parse(Parser.java:570) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Parser.parse(Parser.java:532) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Context.compileImpl(Context.java:2438) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Context.compileReader(Context.java:1355) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Context.compileReader(Context.java:1327) ~[na:1.7.0_79]
                                at sun.org.mozilla.javascript.internal.Context.evaluateReader(Context.java:1166) ~[na:1.7.0_79]
                                at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:214) ~[na:1.7.0_79]
                                ... 5 common frames omitted
                        Die Ausgabe wenn ich die URL im Browser aufrufe:
                        Code:
                        {"ok":true,"license":"CC BY 4.0 -  http:\/\/creativecommons.tankerkoenig.de","data":"MTS-K",
                        "prices":{"5039c7a7-ffe3-480f-8dd0-92c1797edea3":{"status":"open","e5":1.259,"e10":1.239,"diesel":1.009}}}
                        Ein weiteres Problem ist folgendes: Wenn die Tankstelle geschlossen hat werden die Preise nicht mehr wie bisher angezeigt sondern nur noch
                        Code:
                        {"ok":true,"license":"CC BY 4.0 -  http:\/\/creativecommons.tankerkoenig.de","data":"MTS-K","prices":{"5039c7a7-ffe3-480f-8dd0-92c1797edea3":{"status":"closed"}}}
                        Wie kann ich weiterhin den Service von Tankerkönig nutzen und wie habt ihr die Umstellung vorgenommen?

                        Viele Grüße
                        Torsten

                        Kommentar


                          #57
                          JA, das geht. Ich habe bei mir gerade alles Umgebaut mit Sortieren usw. Kann ich gerne bereitstellen.

                          Thomas

                          Kommentar


                            #58
                            Wäre echt super Thomas... Ich bin da leider etwas überfordert. Bin jetzt schon Stunden dran und bekomme es nicht auf die reihe :-(

                            Kommentar


                              #59
                              So jetzt aber. Ich habe die Abfrage der Preise jetzt komplett von Items getrennt. Da fehlt zwar noch eine Fehlerabfrage, aber ....

                              Items. Ich habe sechs Tankstellen in meiner Liste, entsprechend auch 6 String Items definiert.
                              /
                              Code:
                              / Items to show fuel prices in sitemap. Prices are obtained from internet site www.Tankerkoenig.de
                              String    OhVl_FuelStation1_Value    "Günstigste Tankstelle [%s]" <scene_gas_station> 
                              String    OhVl_FuelStation2_Value    "2. Tankstelle [%s]" <scene_gas_station>
                              String    OhVl_FuelStation3_Value    "3. Tankstelle [%s]" <scene_gas_station>
                              String    OhVl_FuelStation4_Value    "4. Tankstelle [%s]" <scene_gas_station>
                              String    OhVl_FuelStation5_Value    "5. Tankstelle [%s]" <scene_gas_station>
                              String    OhVl_FuelStation6_Value    "6. Tankstelle [%s]" <scene_gas_station>
                              Sitemap. Die zeigt quasi die günstigste Tankstelle an und wenn man draufklickt, dann bekommt man alle angezeigt
                              Code:
                              Text item=OhVl_FuelStation1_Value {
                                   Text item=OhVl_FuelStation1_Value 
                                   Text item=OhVl_FuelStation2_Value 
                                   Text item=OhVl_FuelStation3_Value 
                                   Text item=OhVl_FuelStation4_Value
                                   Text item=OhVl_FuelStation5_Value
                                   Text item=OhVl_FuelStation6_Value
                              }
                              Rules. Und jetzt die passende rule, die die Magie macht.
                              Code:
                              rule "Check and display fuel prices"
                              when
                                  Time cron "0 0/6 * * * ?"
                              then
                                  
                                  val String Station01_ID = "3d8c2dfb-4612-4aff-8ae7-96e3f88eafe6"     //Nordoel Uetersen
                                  val String Station02_ID = "1ceea95b-d46e-4159-91f6-71f57d612bdb"    // Nordoel Elmshorn
                                  val String Station03_ID = "e1a15081-24e2-9107-e040-0b0a3dfe563c"    // HEM Elmshorn
                                  val String Station04_ID = "005056ba-7cb6-1ed2-bceb-bc577a5e6d4e"    // Star Elmshorn
                                  val String Station05_ID = "e1a15081-254f-9107-e040-0b0a3dfe563c"    // HEM Wedel
                                  val String Station06_ID = "65c348cf-5ce7-4820-a24a-da0dbf816204"    // SB Wedel
                                  val String API_Key = "xxxxxxxx"
                                      
                                  var String URL
                                  var String json
                                  var ArrayList<StringItem> FuelPriceItems =  new ArrayList<StringItem>()
                                  var Map <String, Double> FuelPricesMap = new HashMap<String, Double>()
                                  var i = 0
                                      
                                  // First read the fuel prices for defines stations
                                  URL= "https://creativecommons.tankerkoenig.de/json/prices.php?ids=" + Station01_ID + "," + Station02_ID + "," + Station03_ID  + "," + Station04_ID  + "," + Station05_ID + "," + Station06_ID + "&apikey=" + API_Key
                                  json = sendHttpGetRequest(URL)
                              
                                  // The check if response is OK
                                  if (transform("JSONPATH",  "$.ok", json) == "true") {
                              
                                      // Assign display items to array
                                      FuelPriceItems.add(0, OhVl_FuelStation1_Value)
                                      FuelPriceItems.add(1, OhVl_FuelStation2_Value)
                                      FuelPriceItems.add(2, OhVl_FuelStation3_Value)
                                      FuelPriceItems.add(3, OhVl_FuelStation4_Value)
                                      FuelPriceItems.add(4, OhVl_FuelStation5_Value)
                                      FuelPriceItems.add(5, OhVl_FuelStation6_Value)
                              
                                       // Assign actual prices and station name to map    
                                      FuelPricesMap.put("Nordoel (Uetersen)",    Double.parseDouble(transform("JSONPATH",  "$.prices." + Station01_ID + ".diesel", json)))
                                      FuelPricesMap.put("Nordoel (Elmshorn)",    Double.parseDouble(transform("JSONPATH",  "$.prices." + Station02_ID + ".diesel", json)))
                                      FuelPricesMap.put("HEM (Elmshorn)",        Double.parseDouble(transform("JSONPATH",  "$.prices." + Station03_ID + ".diesel", json)))
                                      FuelPricesMap.put("Star (Elmshorn)",    Double.parseDouble(transform("JSONPATH",  "$.prices." + Station04_ID + ".diesel", json)))
                                      FuelPricesMap.put("HEM (Wedel)",        Double.parseDouble(transform("JSONPATH",  "$.prices." + Station05_ID + ".diesel", json)))
                                      FuelPricesMap.put("SB (Wedel)",            Double.parseDouble(transform("JSONPATH",  "$.prices." + Station06_ID + ".diesel", json)))
                                      
                                      // Sort map by price an assign values from display array
                                      for (PriceEntry : FuelPricesMap.entrySet.sortBy[value]) {
                                          FuelPriceItems.get(i).postUpdate(String::format("%s - %.3f €", PriceEntry.getKey(), PriceEntry.getValue()))
                                           i = i+1
                                      }
                                          
                                      logInfo("rule.internet", "Fuel prices updated sucessfull")
                                      
                                  }
                              
                              end
                              Du benötigst damit keinen http Cache mehr und auch nicht für jede Tankstelle ein Item. Wenn du die Rule umbaust. dann kannst du glaube ich max. 10 Tanken abfragen, aber nur die Besten drei anzeigen lassen.

                              Wenn es Verbesserungen gibt z.B. Closed Anzeige oder bin ich natürlich daran interessiert.

                              Viel Spaß damit
                              Thomas

                              Kommentar


                                #60
                                Wow, Danke!!!

                                Das werde ich gleich heute Abend nachbauen. Vielen lieben Dank.

                                Viele Grüße
                                Torsten

                                Edit: Folgende imports habe ich jetzt gefunden
                                import java.util.List
                                import java.util.ArrayList
                                import org.openhab.core.library.items.StringItem
                                import org.openhab.core.library.types.DecimalType
                                import java.util.Map
                                import java.util.HashMap
                                Jetzt fehlt mir nur noch
                                - Couldn't resolve reference to JvmIdentifiableElement 'Double'.
                                - Couldn't resolve reference to JvmIdentifiableElement 'parseDouble'.
                                Allerdings sagt mir da Google auch nichts wirklich.
                                Zuletzt geändert von toto1975; 05.08.2016, 13:54.

                                Kommentar

                                Lädt...
                                X