Added carbon API!
This commit is contained in:
parent
75d5a3c664
commit
81c299dffb
5 changed files with 162 additions and 5 deletions
80
api/carbon.py
Normal file
80
api/carbon.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
import requests
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import datetime
|
||||
from util import logging
|
||||
|
||||
def current_level() -> []:
|
||||
url = "https://api.carbonintensity.org.uk/intensity"
|
||||
response = requests.get(url)
|
||||
|
||||
if not response.ok:
|
||||
logging.error(f"Failed to access Carbon API: {response.status_code} [{url}]")
|
||||
|
||||
data = response.json()["data"][0]
|
||||
return [data["from"], data["intensity"]["forecast"], data["intensity"]["actual"], data["intensity"]["index"]]
|
||||
|
||||
def level_at(date: str) -> []:
|
||||
url = f"https://api.carbonintensity.org.uk/intensity/date/{date}"
|
||||
response = requests.get(url)
|
||||
|
||||
if not response.ok:
|
||||
logging.error(f"Failed to access Carbon API: {response.status_code} [{url}]")
|
||||
return []
|
||||
|
||||
if len(response.json()["data"]) == 0:
|
||||
return []
|
||||
|
||||
data = response.json()["data"][0]
|
||||
return [data["from"], data["intensity"]["forecast"], data["intensity"]["actual"], data["intensity"]["index"]]
|
||||
|
||||
def level_from_to(start: str, stop: str) -> str:
|
||||
url = f"https://api.carbonintensity.org.uk/intensity/{start}/{stop}"
|
||||
response = requests.get(url)
|
||||
|
||||
if not response.ok:
|
||||
logging.error(f"Failed to access Carbon API: {response.status_code} [{url}]")
|
||||
return ""
|
||||
|
||||
if len(response.json()["data"]) == 0:
|
||||
return []
|
||||
|
||||
data = response.json()["data"]
|
||||
|
||||
x = []
|
||||
measured = []
|
||||
indices = []
|
||||
|
||||
for i in range(len(data)):
|
||||
intensity = data[i]["intensity"]
|
||||
x.append(datetime.datetime.strptime(data[i]["from"], "%Y-%m-%dT%H:%MZ"))
|
||||
measured.append(intensity["actual"])
|
||||
indices.append(intensity["index"])
|
||||
|
||||
curr_color = indices[0]
|
||||
curr_color_index = 0
|
||||
for i in range(len(measured)):
|
||||
if indices[i] != curr_color:
|
||||
color = ""
|
||||
if curr_color == "very low":
|
||||
color = "#5bcc32"
|
||||
if curr_color == "low":
|
||||
color = "#87cc32"
|
||||
if curr_color == "moderate":
|
||||
color = "#ccc932"
|
||||
if curr_color == "high":
|
||||
color = "#cc8e32"
|
||||
if curr_color == "very high":
|
||||
color = "#cc4f32"
|
||||
|
||||
plt.plot(x[curr_color_index:i+1], measured[curr_color_index:i+1], color)
|
||||
curr_color_index = i
|
||||
curr_color = indices[i]
|
||||
|
||||
plt.xlabel("Time & Date")
|
||||
plt.ylabel("Carbon Intensity [gCO2/kWh]")
|
||||
plt.xticks(rotation=45)
|
||||
plt.gcf().subplots_adjust(bottom=0.2)
|
||||
plt.savefig("plot.png")
|
||||
plt.clf()
|
||||
return "plot.png"
|
Loading…
Add table
Add a link
Reference in a new issue