#!/usr/bin/python3 """ get grid tariffs""" import os 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 = 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"] 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) if response.status_code != 200: print(response.status_code) print("Oh shit") response.raise_for_status() except requests.exceptions.RequestException 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"], ) ) # 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)