#!/usr/bin/python3 """ get grid tariffs""" import sys from datetime import datetime, timedelta import common import requests from tzlocal import get_localzone # API documentation: https://elvia.portal.azure-api.net/docs/services/gridtariffapi/operations/post-digin-api-v-tariffquery-meteringpointsgridtariffs? apiKey = common.env("el_elvia_grid_api_key") apiUrl = "https://elvia.azure-api.net/grid-tariff/digin/api/1/tariffquery/meteringpointsgridtariffs" meteringPointId = common.env("el_meteringPointId") startTime = datetime.now(get_localzone()) - timedelta(days=2) startTime = startTime.strftime("%Y-%m-%d") # startTime = '2023-05-23' # <- edit for manual starttime. Like when filling in missing info. 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, timeout=10) response.raise_for_status() except requests.exceptions.RequestException as e: sys.exit(e) data = response.json() num_items = len(data["gridTariffCollections"][0]["gridTariff"]["tariffPrice"]["hours"]) print(f"Got {num_items} 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"], ) ) # SQL sql = """INSERT INTO elvia_gridtariff VALUES(%s, %s, %s, %s, %s, %s, %s) ON CONFLICT (meteringPointId,startTime,endTime) DO NOTHING""" common.dbi(sql, values, verbose=True)