Repository navigation
Expand file tree
/
Copy pathshouldi.py
More file actions
73 lines (63 loc) · 1.88 KB
/
Copy pathshouldi.py
File metadata and controls
73 lines (63 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from func import *
import pytz, datetime
from functools import reduce
tz = pytz.timezone("Europe/London")
apiBase = "https://api.carbonintensity.org.uk"
apiGeneration = "/generation"
generationMixWanted = ["solar", "wind", "hydro"]
generationLimit = 33
"""
Get current total renewable gen
"""
def now():
responseNow = requests.get(apiBase + apiGeneration)
data = responseNow.json()
shouldINow = getGenerationMixTotalForSlot(data["data"], generationMixWanted)
return shouldINow > generationLimit, shouldINow
"""
Get 5 day forecast
"""
def forecast():
dataOut = {}
formatted = {}
dateNowUTC, dateEndUTC = getStartAndEndDates()
responseForecast = requests.get(
apiBase
+ apiGeneration
+ "/"
+ dateNowUTC.isoformat()
+ "/"
+ dateEndUTC.isoformat()
)
data = responseForecast.json()
for d in data["data"]:
date = datetime.datetime.strptime(d["from"], "%Y-%m-%dT%H:%MZ")
if date.day < dateNowUTC.day:
continue
dateKey = date.strftime("%Y-%m-%d")
if dateKey not in formatted:
formatted[dateKey] = {}
slot = getSlotName(d["from"])
if not slot:
continue
if slot not in formatted[dateKey]:
formatted[dateKey][slot] = []
formatted[dateKey][slot].append(
getGenerationMixTotalForSlot(d, generationMixWanted)
)
for day in formatted:
if day not in dataOut:
dataOut[day] = {}
for slot in formatted[day]:
if slot not in dataOut[day]:
dataOut[day][slot] = []
total = sum(formatted[day][slot])
dataOut[day][slot] = (
True if total / len(formatted[day][slot]) > generationLimit else False
)
return dataOut
shouldINow, gen = now()
print(shouldINow)
print(gen)
out = forecast()
print(out)