#!/usr/bin/env python3 """ Get energy consumption from Elvia """ import sys from datetime import datetime, timedelta import common import requests from tzlocal import get_localzone apiKey = common.env("el_elvia_token") apiUrl = "https://elvia.azure-api.net/customer/metervalues/api/v1/metervalues" startTime = datetime.now(get_localzone()) - timedelta(days=2) startTime = startTime.isoformat("T") # startTime = '2023-05-23T08:16:15.408667+02:00' # <- edit for manual starttime. Like when filling in missing info. endTime = datetime.now(get_localzone()).isoformat("T") ### Get the data try: # Query parameters params = {"startTime": startTime, "endTime": endTime} # Request headers headers = { "Cache-Control": "no-cache", "Authorization": "Bearer " + apiKey, } response = requests.get(apiUrl, params=params, headers=headers, timeout=10) response.raise_for_status() except requests.exceptions.RequestException as e: sys.exit(e) data = response.json() num_items = len(data["meteringpoints"][0]["metervalue"]["timeSeries"]) print(f"Got {num_items} items from between {startTime} and {endTime}") ### Insert data into database values = [] for item in data["meteringpoints"][0]["metervalue"]["timeSeries"]: # Only append verified items if item["verified"]: values.append( ( data["meteringpoints"][0]["meteringPointId"], item["startTime"], item["endTime"], item["value"], item["uom"], item["production"], ) ) # SQL sql = """INSERT INTO elvia VALUES(%s, %s, %s, %s, %s, %s) ON CONFLICT (startTime,endTime) DO NOTHING;""" common.dbi(sql, values, verbose=True)