Benzinpreismonitor Österreich

Begonnen von rallye, 09 Februar 2021, 13:54:01

Vorheriges Thema - Nächstes Thema

rallye

Da der Benzinpreismonitor wie er für die Kollegen in Deutschland implementiert ist für uns in Österreich nicht funktioniert und ich nichts adäquates gefunden habe, habe ich mich daran gemacht für Österreich etwas zu implementieren. Die einzige Quelle die ich gefunden habe ist https://api.e-control.at/, siehe auch https://api.e-control.at/sprit/1.0/doc/index.html?url=https://api.e-control.at/sprit/1.0/api-docs%3Fgroup%3Dpublic-api#/ Der Nachteil dieser Quelle ist, dass sie die 10 billigsten Tankstellen in der Umgebung von Lat/Lon für nur eine Sorte (Super, Diesel, Gas) hergibt und nur die 5 billigsten Tankstellen Preise ausweisen. Ich habe das Ganze für mich wie folgt implementiert (bitte eure eigenen Werte für "latitude" & "longitude" einsetzen:

defmod Diesel HTTPMOD https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.xxxxxxxxxx&longitude=16.xxxxxxxxxx&fuelType=DIE&includeClosed=false 900
attr Diesel bodyDecode ISO-8859-1
attr Diesel enableControlSet 1
attr Diesel enableCookies 1
attr Diesel reading01Name Diesel
attr Diesel reading01RegOpt g
attr Diesel reading01Regex "id"[\d\D]{900,1400}"amount":(\d.\d\d\d)
attr Diesel reading02Name Tankstellenname
attr Diesel reading02RegOpt g
attr Diesel reading02Regex "id":[\d\D]{1,12}"name":"([^"]+)"
attr Diesel reading03Name Ort
attr Diesel reading03RegOpt g
attr Diesel reading03Regex "id":[\d\D]{1,200}"city":"([^"]+)"
attr Diesel reading04Name Adresse
attr Diesel reading04RegOpt g
attr Diesel reading04Regex "id":[\d\D]{1,150}"address":"([^"]+)"
attr Diesel timeout 5

und
defmod Super HTTPMOD https://api.e-control.at/sprit/1.0/search/gas-stations/by-address?latitude=48.xxxxxxxxxx&longitude=16.xxxxxxxxxx&fuelType=SUP&includeClosed=false 900
attr Super bodyDecode ISO-8859-1
attr Super enableControlSet 1
attr Super enableCookies 1
attr Super reading01Name Super 95
attr Super reading01RegOpt g
attr Super reading01Regex "id"[\d\D]{900,1400}"amount":(\d.\d\d\d)
attr Super reading02Name Tankstellenname
attr Super reading02RegOpt g
attr Super reading02Regex "id":[\d\D]{1,12}"name":"([^"]+)"
attr Super reading03Name Ort
attr Super reading03RegOpt g
attr Super reading03Regex "id":[\d\D]{1,200}"city":"([^"]+)"
attr Super reading04Name Adresse
attr Super reading04RegOpt g
attr Super reading04Regex "id":[\d\D]{1,150}"address":"([^"]+)"
attr Super timeout 5


Nun noch das alles in eine Tabelle für Super:
defmod Top_5_Tankstellen_S readingsGroup <Treibstoff>,<Preis/l>,<Name>,<Ort>,<Adresse>\
Super:Super.95-1,Tankstellenname-1,Ort-1,Adresse-1\
Super:Super.95-2,Tankstellenname-2,Ort-2,Adresse-2\
Super:Super.95-3,Tankstellenname-3,Ort-3,Adresse-3\
Super:Super.95-4,Tankstellenname-4,Ort-4,Adresse-4\
Super:Super.95-5,Tankstellenname-5,Ort-5,Adresse-5\

attr Top_5_Tankstellen_S alias Top 5 Tankstellen Super
attr Top_5_Tankstellen_S nameStyle style="color:yellow"
attr Top_5_Tankstellen_S sortby 1
attr Top_5_Tankstellen_S style style="font-size:12px"
attr Top_5_Tankstellen_S valueFormat {wrapLine($VALUE, 50)}


und eine Tabelle für Diesel
defmod Top_5_Tankstellen_D readingsGroup <Treibstoff>,<Preis/l>,<Name>,<Ort>,<Adresse>\
Diesel:Diesel-1,Tankstellenname-1,Ort-1,Adresse-1\
Diesel:Diesel-2,Tankstellenname-2,Ort-2,Adresse-2\
Diesel:Diesel-3,Tankstellenname-3,Ort-3,Adresse-3\
Diesel:Diesel-4,Tankstellenname-4,Ort-4,Adresse-4\
Diesel:Diesel-5,Tankstellenname-5,Ort-5,Adresse-5\

attr Top_5_Tankstellen_D alias Top 5 Tankstellen Diesel
attr Top_5_Tankstellen_D nameStyle style="color:yellow"
attr Top_5_Tankstellen_D sortby 1
attr Top_5_Tankstellen_D style style="font-size:12px"
attr Top_5_Tankstellen_D valueFormat {wrapLine($VALUE, 50)}


und fertig ist der Zauber. Sieht dann aus wie im Dateianhang
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

Icinger

Coole Sache......
Lustigerweise habe ich hier 4 Tankstellen in der Umgebung, die zwar gelistet sind, aber scheinbar keine Preise einspielen :(

Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

rallye

Danke !

Die Preise werden schon eingespielt aber nicht angezeigt auf der HP von https://www.e-control.at/spritpreisrechner kannst du nachlesen:
Warum zeigt der Spritpreisrechner nur jeweils die fünf günstigsten Preise?
Dies ist eine Vorgabe des Gesetzgebers, die wiederum europäischem Wettbewerbsrecht entspricht. Sinn ist es, eine Preisorientierung nach oben zu vermeiden. Wenn Unternehmen sehen, welcher Preis der teuerste ist, können Sie leichter knapp darunter gehen und damit günstiger erscheinen, ohne tatsächlich günstig sein zu müssen. Mit der Anzeige von nur den günstigsten Preisen können sich die Unternehmen dagegen lediglich eben an den günstigsten ausrichten. So wird der gewünschte Effekt einer Preisorientierung nach unten eher erzielt.

Ist zwar eine Erklärung, aber trotzdem fragwürdig für den Konsumenten.
RaspiPi v4, HM-LGW, 6x HM-TC-IT-WM-W-EU, 11x HM-CC-RT-DN, 1x HUE Bridge, 4x HUE-RC, 5x HUE White&Color, 15xHUE White, 3xHM-LC-SW1-FM, 1xHM-LC-SW2-FM, 1x ConBeeII, 15x Shelly1, 5xShellyplug, Aquara: 2x Temp-Sensor, 1x Vibrationssensor, 2x Lichtsensor, 19x Tür/Fenstersensor

50watt

Hier wurden die Umlaute nicht richtig angezeigt.
Mit UTF8 decodeing passen die Umlaute nun hier:

Mit
attr Super bodyDecode UTF8
attr Diesel bodyDecode UTF8

statt
attr Super bodyDecode ISO-8859-1
attr Diesel bodyDecode ISO-8859-1

Die Statuszeile lässt sich auch noch füllen:
attr Diesel stateFormat Niedrigster Preis:Diesel-1 €/l,Tankstellenname-1,Ort-1,Adresse-1
attr Super stateFormat {"Niedrigster Preis:".ReadingsVal($name,"Super 95-1",0)." €/l,".ReadingsVal($name,"Tankstellenname-1","").",".ReadingsVal($name,"Ort-1","").",".ReadingsVal($name,"Adresse-1","")}

RaspberryPi, EnOcean PI
Sonos Play1, Connect
Eltako FT55, FSB61, FAM12, FSR12-4x