diff options
Diffstat (limited to 'scripts/elvia_gridtariff.py')
-rw-r--r-- | scripts/elvia_gridtariff.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/elvia_gridtariff.py b/scripts/elvia_gridtariff.py new file mode 100644 index 0000000..bcf4bd7 --- /dev/null +++ b/scripts/elvia_gridtariff.py @@ -0,0 +1,69 @@ +#!/usr/bin/python3 +''' get grid tariffs''' + +import os +import sys +from datetime import datetime +from datetime import timedelta +import requests +from tzlocal import get_localzone + +from common import dbi + +# API documentation: https://elvia.portal.azure-api.net/docs/services/gridtariffapi/operations/post-digin-api-v-tariffquery-meteringpointsgridtariffs? + +apiKey = os.environ['el_elvia_grid_api_key'] +apiUrl = "https://elvia.azure-api.net/grid-tariff/digin/api/1/tariffquery/meteringpointsgridtariffs" +meteringPointId = os.environ['el_meteringPointId'] + +pg_db = os.environ['el_pg_db'] +pg_host = os.environ['el_pg_host'] +pg_table = "elvia_gridtariff" + + +startTime = datetime.now(get_localzone()) - timedelta(days = 2) +startTime = startTime.strftime('%Y-%m-%d') + +endTime = datetime.now(get_localzone()) + timedelta(days = 2) +endTime = endTime.strftime('%Y-%m-%d') + + +### Get the data +try: + url = apiUrl + # Request headers + hdr = { + 'Cache-Control': 'no-cache', + 'X-API-Key': apiKey, + 'Content-Type': 'application/json' + } + + # Request body + body = { + 'starttime': startTime, + 'endtime': endTime, + 'meteringPointIds': [ meteringPointId ] + } + + response = requests.post(url, headers=hdr, json=body) + if response.status_code != 200: + print(response.status_code) + print("Oh shit") + response.raise_for_status() + +except Exception as e: + print("oh lol") + sys.exit(e) + +data = response.json() + +print("Got "+ str(len(data['gridTariffCollections'][0]['gridTariff']['tariffPrice']['hours'])) +" items from between "+ startTime + " and " + endTime) + + +### insert data into database + +values = [] +for item in data['gridTariffCollections'][0]['gridTariff']['tariffPrice']['hours']: + values.append((meteringPointId, item['startTime'], item['expiredAt'], item['shortName'], item['isPublicHoliday'], item['energyPrice']['total'], item['energyPrice']['totalExVat'])) + +dbi("INSERT INTO " + pg_table + " VALUES(%s,%s,%s,%s,%s,%s,%s) ON CONFLICT (meteringPointId,startTime,endTime) DO NOTHING", values, verbose=True) |