Benzinpreis im smartHome
Es gibt sehr viele Webseiten und Apps, die die aktuellen Benzinpreise anzeigen. Aber es hat auch einen gewissen Charme die Tankstellen in der Umgebung der eigenen Wohnung direkt im smartHome anzuzeigen. Mit Hilfe einer freien bereitgestellten API ist die Lösung schnell realisiert.
Einer meiner Lieblingsapps war lange Zeit die von mehr-tanken. Damit habe ich die aktuellen Preise der Tankstellen aus der Umgebung immer im Blick. Doch für zuhause hat die App nicht ausgereicht, eine Schnittstelle musste her: Die API von https://creativecommons.tankerkoenig.de/ erfüllt da genau unseren Zweck, eine oder mehrere Tankstellen abzurufen. Sie enthält die Echtzeit-Daten von der Markttransparenzstelle für Kraftstoffe (MTS-K).
Nur eine Tankstelle:
https://creativecommons.tankerkoenig.de/json/prices.php?ids=IDDERTANKSTELLE&apikey=APIKEY
Es ist bei dieser API zwar auch möglich sich die Tankstellen im Umkreis einer bestimmten GPS-Position anzuzeigen, doch da das zuhause üblicherweise sicht nicht bewegt, habe ich darauf verzichtet und die Tankstellen, die ich sehen will explizipt im Aufruf genannt um nur diese zu bekommen:
https://creativecommons.tankerkoenig.de/json/prices.php?ids=IDDER1.TANKSTELLE%2CIDDER2.TANKSTELLE%2CIDDER2.TANKSTELLE&apikey=APIKEY
Gründe für eine Vorauswahl der Tankstellen könnten sein:
  • mehrere Tankstellen im Umkreis, die vielleicht eh immer den gleichen Preis haben
  • Vergleich von Marken und daher Ausblenden von zwei gleicher Marke
  • man hat eine Lieblingstankstelle, die vielleicht gar nicht unter den fünf nächstgelegenenden liegt
  • es soll auch die angezeigt werden, die sich auf dem Weg zur Arbeit oder Nahe der Arbeitsstelle liegt
Das Ergebnis des Aufrufs sieht dann zum Beispiel so aus:

{"ok":true, 
	"license":"CC BY 4.0 -  https://creativecommons.tankerkoenig.de", 
	"data":"MTS-K", 
	"prices":{
	"IDDER1.TANKSTELLE": {"status":"open", "e5":1.294, "e10":1.274, "diesel":1.099},
	"IDDER2.TANKSTELLE": {"status":"open", "e5":1.294, "e10":1.274, "diesel":1.099},
	"IDDER3.TANKSTELLE": {"status":"open", "e5":1.339, "e10":1.319, "diesel":1.139}
}}
Den API-Aufruf natürlich nicht minütlich durchführen, sondern nur alle 20-30 Minuten, netterweise nicht zur vollen Stunde (ein Cronjob hilft da), und das Ergebnis in eine Datei speichern. Diese Datei kann dann beliebig oft vom smartHome abgerufen werden. Das Parsen des JSON-Objekts übernimmt dabei jq ganz einfach:
jq -r DATEI '.prices.\IDDER1.TANKSTELLE"."e10"'
So erhält man den Preis für E10 der 1. Tankstelle.
Ich habe dieses Vorgehen mit drei Tankstellen in meiner Umgebung umgesetzt und die Werte in einer Datenbank gespeichert. Aus diesen Daten habe ich zwei Grafiken erzeugen lassen: einmal für den aktuellen Tag und eine für den gesamten Monat. So kann man sehen, zu welcher Tageszeit das Benzin am günstigsten ist und wie der Preis in der Tendenz des Monats gerade liegt.