#!/usr/bin/env python3 ''' import energy prices from tibber ''' import os import sys from datetime import datetime from datetime import timedelta from tzlocal import get_localzone import requests from common import dbi # variables apiKey = os.environ['el_tibber_token'] apiUrl = "https://api.tibber.com/v1-beta/gql" pg_db = os.environ['el_pg_db'] pg_host = os.environ['el_pg_host'] pg_table = "tibber_prices" startTime = datetime.now(get_localzone()) - timedelta(days = 1) startTime = startTime.isoformat('T') endTime = datetime.now(get_localzone()).isoformat('T') # Get the data try: url = apiUrl # Request headers hdr = { 'Authorization': "Bearer " + apiKey, 'Content-Type': 'application/json', } body = {"query":"""{ viewer { homes { currentSubscription{ priceInfo{ today { total energy tax startsAt level currency } tomorrow { total energy tax startsAt level currency } } } } } }"""} 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() numdata = len(data["data"]["viewer"]["homes"][0]["currentSubscription"]["priceInfo"]["today"]) + len(data["data"]["viewer"]["homes"][0]["currentSubscription"]["priceInfo"]["tomorrow"]) print("Got " + str(numdata) + " rows from Tibber") ### insert data into database # prices prices = [] for item in data["data"]["viewer"]["homes"][0]["currentSubscription"]["priceInfo"]["today"]: prices.append((item["startsAt"],item["total"],item["energy"],item["tax"],item["level"])) for item in data["data"]["viewer"]["homes"][0]["currentSubscription"]["priceInfo"]["tomorrow"]: prices.append((item["startsAt"],item["total"],item["energy"],item["tax"],item["level"])) dbi("INSERT INTO " + pg_table + " VALUES(%s,%s,%s,%s,%s) ON CONFLICT (startsat) DO NOTHING", prices, verbose=True)