TankerKoenig

Requirements

This plugin requires lib requests. You can install this lib with:

sudo pip3 install requests --upgrade

All mappings to items need to be done via your own logic.

Forum thread to the plugin: https://knx-user-forum.de/forum/supportforen/smarthome-py/938924-benzinpreis-plugin

Take care not to request the interface too often or for too many petrol stations. Please follow instructions given on https://creativecommons.tankerkoenig.de/#techInfo and e.g. use prices function for price retrieval. Static information such as name or location can be directly set in your python logics.

Recommended by tankerkoenig is to store meta data (Name, Address etc.) statically in your code, db, file cache etc and just request / update prices via get_petrol_station_prices. Other ways of using the interface may result in mail communication with responsibles of tankerkoenig, telling you of using the interface in the way described above (static storage of meta data). Please take this into account when integrating it..

Configuration

plugin.yaml

tankerkoenig:
    class_name: TankerKoenig
    class_path: plugins.tankerkoenig
    apikey: <your own api key>

Attributes

  • apikey: Your own personal API key for TankerKoenig. For your own key register to https://creativecommons.tankerkoenig.de

items.yaml

Example (for cheapest station and for one station that is requested via its id):

petrol_station:

    cheapest:

        isOpen:
            type: bool
            visu_acl: ro

        name:
            type: str
            visu_acl: ro

        price:
            type: num
            visu_acl: ro

    DemoBavariaPetrol:
        tankerkoenig_id: a07b7f50-6e6f-4e6e-9bce-17d79bf0778c

        diesel:
            type: num
            visu_acl: ro

        name:
            type: str
            visu_acl: ro

        isOpen:
            type: bool
            visu_acl: ro

Functions

get_petrol_stations(lat, lon, type, sort, rad):

Gets a list of petrol stations around provided coordinates, depending on a provided type, sort order and radius. In the example, sh._lat and sh.._long are the geocoordinates configured for smarthome in etc/smarthome.yaml. You can also set your own coordinates!

cheapest = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'diesel', 'price', rad='2')

Returned is an array of petrol station data, with the following available keys: ‚place‘, ‚brand‘, ‚houseNumber‘, ‚street‘, ‚id‘, ‚lng‘, ‚name‘, ‚lat‘, ‚price‘, ‚dist‘, ‚isOpen‘, ‚postCode‘ Note: Take care with too high rad values, as this also increases load on tankerkoenig interface.

get_petrol_station_detail_full(id)

This function gets the details (incl. prices) of one petrol station, identified by its internal TankerKoenig ID.

detail = sh.tankerkoenig.get_petrol_station_detail(sh.petrol_station.DemoBavariaPetrol.conf['tankerkoenig_id'])

Returned keys are ‚e5‘, ‚e10‘, ‚diesel‘, ‚street‘, ‚houseNumber‘, ‚postCode‘, ‚place‘, ‚brand‘, ‚id‘, ‚lng‘, ‚name‘, ‚lat‘, ‚isOpen‘

Logics

Fill items with cheapest petrol station data

cheapest = sh.tankerkoenig.get_petrol_stations(sh._lat, sh._lon, 'diesel', 'price', rad='10')
sh.petrol_station.cheapest.name(cheapest[0]['name'])
sh.petrol_station.cheapest.isOpen(cheapest[0]['isOpen'])
sh.petrol_station.cheapest.price(cheapest[0]['price'])

Get data of one petrol station

detail = sh.tankerkoenig.get_petrol_station_detail(sh.petrol_station.DemoBavariaPetrol.conf['tankerkoenig_id'])
sh.petrol_station.DemoBavariaPetrol.name(detail['name'])
sh.petrol_station.DemoBavariaPetrol.isOpen(detail['isOpen'])
sh.petrol_station.DemoBavariaPetrol.diesel(detail['diesel'])

Get prices of one petrol stations

prices = sh.tankerkoenig.get_petrol_station_prices([sh.petrol_station.DemoBavariaPetrol.conf['tankerkoenig_id']])