#!/usr/bin/env python3 ''' Get energy consumption from Elvia ''' import os import sys from datetime import datetime from datetime import timedelta from tzlocal import get_localzone import requests from common import dbi apiKey = os.environ['el_elvia_token'] apiUrl = "https://elvia.azure-api.net/customer/metervalues/api/v1/metervalues" pg_table = "elvia" startTime = datetime.now(get_localzone()) - timedelta(days = 2) startTime = startTime.isoformat('T') 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'])) # Count new rows and insert dbi("INSERT INTO " + pg_table + " VALUES(%s,%s,%s,%s,%s,%s) ON CONFLICT (startTime,endTime) DO NOTHING", values, verbose=True)