#!/usr/bin/env python3 """ Get energy consumption from Elvia """ import os import sys from datetime import datetime, timedelta import common import requests from tzlocal import get_localzone apiKey = os.environ["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: url = apiUrl + "?startTime=" + startTime + "&endTime=" + endTime # Request headers hdr = { "Cache-Control": "no-cache", "Authorization": "Bearer " + apiKey, } response = requests.get(url, headers=hdr, 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["meteringpoints"][0]["metervalue"]["timeSeries"])) + " items from between " + startTime + " and " + endTime ) ### insert data into database values = [] for item in data["meteringpoints"][0]["metervalue"]["timeSeries"]: # Only deal with 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)