#!/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)