Ankündigung

Einklappen
Keine Ankündigung bisher.

Spritpreise per HTTP-Binding und JSON

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

    Spritpreise per HTTP-Binding und JSON

    Hallo,

    in einem anderen Forum (Homematic) habe ich mit Spannung verfolgt, wie man dort die Spritpreise auf seinem Interface darstellen kann. Habe mich deshalb in das HTTP-Binding eingelesen, aber irgendwie kapiere ich das nicht.

    Ich würde gerne die Spritpreise meiner "Haus"-Tankstelle in openHAB abbilden. Dafür kann man sich auf https://creativecommons.tankerkoenig.de/#techInfo einen API-Key besorgen. Dann kann man per URL die Daten abfragen. Diese werden in JSON geliefert. Wird auch alles gut auf dieser Seite erklärt.

    Weiß allerdings nicht wie man dann das HTTP-Binding und die Items konfiguriert. Würde gerne die Preise für Diesel, E5 und E10 abfragen und darstellen.

    Auch das mit der getValue.js kapiere ich nicht. Kann mir da einer auf die Sprünge helfen??

    Gruss teasy

    #2
    Hi,

    hier tankerkoenig.de:

    wir haben Beispielcode auf GitHub (https://github.com/tankerkoenig) für verschiedene Anwendungen gesammelt. Vielleicht hilft das ja beim speziellen Anwendungsfall weiter. Wen jemand eine fertige Lösung hat, können wir die gerne auch dort einstellen.

    Kommentar


      #3
      Ich habe es hiermit versucht:

      So sieht es in der Item-Datei aus
      Code:
      String diesel "Diesel" { http="<[https://creativecommons.tankerkoenig.de/json/detail.php?id=Tankstellen_Id&apikey=Mein_Api_key:300000:JS(diesel.js)]" }
      Die diesel.js sieht so aus:
      Code:
      JSON.parse(input).diesel;
      Das klappte aber nicht. Habe dann versucht die Ausgabe zu formatieren mit "Diesel [%.2f Euro]". Mit der ganzen Formatierung stehe ich allerdings auf Kriegsfuß.

      Im Log steht jetzt:
      Code:
      Exception while formatting value 'null' of item diesel with format '%.2f Euro': java.util.IllegalFormatConversionException: f != java.lang.String
      Ist das jetzt ein Formatierungsproblem oder kommt da gar nichts an, weil value "null" ???

      Gruß Teasy

      Kommentar


        #4
        Also der Aufruf im Browser liefert das folgende Ergebnis:

        Code:
         
         {"license":"CC BY 4.0 -  http:\/\/creativecommons.tankerkoenig.de","data":"MTS-K","station":{"id":"3e4fb3a6-6404-4181-9e39-280e680c1585","name":"Herne, Castroper Stra\u00dfe 152","brand":"West-Tank","street":"Castroper Stra\u00dfe 152","houseNumber":"","postCode":44628,"place":"Herne","overrides":[],"openUntil":1440705600,"isOpen":true,"e5":1.339,"e10":1.319,"diesel":1.079,"lat":51.5495,"lng":7.25889,"state":null,"openingTimes":[{"text":"Sonntag, Feiertag","start":"08:00:00","end":"22:00:00"},{"text":"t\u00e4glich ausser Sonn- und Feiertagen","start":"06:00:00","end":"22:00:00"}]}}
        Habe dann auch das Item mal als "Number" und nicht als "String" eingefügt,
        Code:
         
         Number diesel "Diesel [%.2f Euro]" { http="<[https://creativecommons.tankerkoenig.de/json/detail.php?id=Tankstellen_Id&apikey=Mein_Api_key:300000:JS(diesel.js)]" }
        weil ja das Ergebnis 1.079 geliefert wurde. Aber irgendwie will es nicht klappen. Ich denke mal es liegt an der diesel.js oder an der Formatierung.

        Hat vielleicht jemand eine Idee?

        Kommentar


          #5
          Hi Teasy1,

          kann es sein, dass der Wert "Diesel" in dem Array "Station" steckt? Müsste dann die diesel.js so aussehen? (Bin nicht wirklich fit in JSON!):
          HTML-Code:
          JSON.parse(input).station[0].diesel;
          Viele Grüße
          Marc

          Kommentar


            #6
            Jetzt hat es geklappt. Das Objekt in der JSON-Ausgabe war ja verschachtelt. Die Änderung in der diesel.js
            Code:
            JSON.parse(input).station.diesel;
            brachte den Erfolg.
            Anbei noch ein Screenshot:

            DSC_0727.JPG


            Jetzt habe ich die drei nächsten Tankstellen immer im Blick.
            Angehängte Dateien
            Zuletzt geändert von teasy1; 27.08.2015, 18:55.

            Kommentar


              #7
              Hier stand alles doppelt. Weiß leider nicht wie man Beiträge löschen kann. Sorry
              Zuletzt geändert von teasy1; 27.08.2015, 18:56.

              Kommentar


                #8
                Das war jetzt zeitgleich. Aber du hattest fast recht. War nur un verschachteltes Objekt.

                Gruß Teasy

                Kommentar


                  #9
                  Hallo teasy1,

                  wie hast du es mit der Aktualisierung der Sprit preise gemacht? Hast du dafür eine Regel erstellt?

                  Gruß
                  Torsten

                  Kommentar


                    #10
                    Hi Teasy,
                    super coole Idee. Das hab ich gleich nachgebaut.
                    Allerdings bekomme ich eine blöde Exception:

                    Code:
                    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
                    Und dann kommen keine Daten.
                    Hattest du das auch? Und wenn ja, wie gelöst?

                    Danke und Grüße
                    Mitch

                    Kommentar


                      #11
                      Moin,

                      toto1975
                      wie hast du es mit der Aktualisierung der Sprit preise gemacht? Hast du dafür eine Regel erstellt?
                      Also, die Aktualisierung kommt vom Wert "300000" in der Item-Beschreibung, d.h. alle 5 Minuten wird ein Aufruf auf die Webseite getätigt.

                      mitch77
                      Deine Fehlermeldung kenne ich nicht, hast du auch das HTTP-Binding in den Addon-Ordner kopiert???

                      Werde mal im Laufe des Tages eine kleine Beschreibung formulieren.

                      Gruß Teasy

                      Kommentar


                        #12
                        Anleitung für Anzeige der Spritpreise in Openhab:

                        Zuerst müsst ihr euch auf https://creativecommons.tankerkoenig.de einen API-Key besorgen. Das ist einfach und schnell gemacht.
                        Auf dieser Seite gibt es auch einige Erklärungen.

                        Dann geht es zu Openhab. Dort natürlich das Http-Binding ins Addon-Verzeichnis kopieren. In der openhab.cfg müsst ihr nichts mehr ändern.

                        Jetzt müssen wir in der Item-Datei ein Item definieren. Bei mir sieht das so aus:
                        Code:
                        Number diesel "Diesel [%.3f Euro]" { http="<[https://creativecommons.tankerkoenig.de/json/detail.php?id=Tankstellen_Id&apikey=Mein_Api_key:300000:JS(diesel.js)]" }
                        Number, weil der Wert des Spritpreises ja als 1.079 aus JSON kommt. In dem Link müsst ihr euren API-Key einbauen und die jeweilige Tankstellen-Id. Die Tankstellen-Id bekommt man ganz einfach über die Webseite von Tankerkönig heraus, indem man dort eine Abfrage seiner in der Nähe befindlichen Tankstellen macht, die jeweilige Tankstelle anklickt, dann kommt ihr in die Kartenansicht, anschließend auf den Spritpreis klicken und dann auf Meldung klicken. Oben in der URL steht dann die Tankstellen-Id wie z.B. e1a15081-255c-9107-e040-0b0a3dfe563c.

                        Wenn man dan den Link z.B. so zusammen gebastelt hat https://creativecommons.tankerkoenig...y=Mein_Api_key,
                        kann man das ganze auch im Browser testen und bekommt ein JSON Ergebnis zurück geliefert.

                        Anschließend noch eine Datei, bei mir z.B. diesel.js erzeugen und in das Verzeichnis "transform" ablegen. Der Inhalt der Datei muss so aussehen:
                        Code:
                        JSON.parse(input).station.diesel;
                        weil ich ja die Dieselpreise haben wollte. Man kann auch andere Werte darstellen, siehe JSON Ausgabe.

                        Zum Schluss noch die sitemap anpassen, Text item=diesel und an der gewünschten Stelle einbauen

                        Ich hoffe es war alles richtig und verständlich.

                        Man könnte das Ganze jetzt noch weiterspinnen, indem man eine Regel erzeugt und sich per Pushover eine Nachricht aufs Handy schicken lässt, wenn
                        ein bestimmter Preis vorhanden ist, usw. .......
                        Zuletzt geändert von teasy1; 29.08.2015, 05:34.

                        Kommentar


                          #13
                          Danke teasy1, gute Anleitung. Genauso hab' ich's gemacht und bekomme dann die o.g. Fehlermeldung. Hab inzwischen weitergesucht und gesehen, dass es mit der HTTPS Verbindung zu tun hat und dem Zertifikat von tankerkönig im Java keystore.

                          @All. Wenn ihr mir da weiterhelfen könntet, wäre super.

                          Kommentar


                            #14
                            mitch77,

                            sorry, da kann ich leider nicht weiterhelfen.

                            Kommentar


                              #15
                              mitch77 ,

                              ich bekomme leider den selben Fehler :-( Hast du eventuell schon eine Lösung gefunden? Im Browser kann ich die URL ohne Probleme aufrufen und bekomme auch das passende Ergebnis.

                              So sieht die Fehlermeldung aus:
                              Code:
                              2015-08-28 20:52:52.767 [ERROR] [g.openhab.io.net.http.HttpUtil] - Fatal transport error: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
                              2015-08-28 20:52:52.767 [ERROR] [.o.b.http.internal.HttpBinding] - No response received from 'https://creativecommons.tankerkoenig.de/json/detail.php?id=888c4611-a1e7-4671-b38f-44f8d1f0b77f&apikey=d5d3f55c-aa21-5151-225d-b602382bd6d6'
                              2015-08-28 20:52:52.892 [ERROR] [g.openhab.io.net.http.HttpUtil] - Fatal transport error: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
                              2015-08-28 20:52:52.892 [ERROR] [.o.b.http.internal.HttpBinding] - No response received from 'https://creativecommons.tankerkoenig.de/json/detail.php?id=5039c7a7-ffe3-480f-8dd0-92c1797edea3&apikey=d5d3f55c-aa21-5151-225d-b602382bd6d6'
                              teasy1 ,

                              vielen Dank für deine Anleitung. Kannst du bitte noch einen kleinen Fehler in deiner Anleitung korrigieren, falls andere dies als Beispiel nutzen?

                              /json/detail.php?d=Tankstellen_Id&apikey= Es muss "Id" sein.... ;-)
                              Viele Grüße
                              Torsten
                              Zuletzt geändert von toto1975; 28.08.2015, 20:02.

                              Kommentar

                              Lädt...
                              X