# dagopbrengst.py - de energie van de zonnepanelen uit het vermogen om het kwartier (trapeziumregel)
import csv

tijden, vermogen = [], []                   # uren, watt
with open("zonnestroom_12mei.csv", newline="") as f:
    for rij in csv.DictReader(f):
        uur, minuut = rij["tijdstip"].split(":")
        tijden.append(int(uur) + int(minuut) / 60)
        vermogen.append(float(rij["vermogen_W"]))


def trapezium(t, p):
    """Oppervlakte onder de punten (t, p): energie in Wh als t in uur en p in W."""
    return sum((p[i] + p[i + 1]) / 2 * (t[i + 1] - t[i]) for i in range(len(t) - 1))


E = trapezium(tijden, vermogen)
E_uur = trapezium(tijden[::4], vermogen[::4])      # alleen de volle uren
P_max = max(vermogen)
print("dagopbrengst:          %.0f Wh (%.2f volle zonuren voor 1400 Wp)" % (E, E / 1400))
print("met alleen uurwaarden: %.0f Wh (%+.1f %%)" % (E_uur, (E_uur / E - 1) * 100))
t_max = tijden[vermogen.index(P_max)]
print("grootste vermogen:     %.0f W om %d:%02d" % (P_max, *divmod(round(t_max * 60), 60)))
print("gemiddeld vermogen:    %.0f W over 24 uur" % (E / 24))

opgebouwd, helft = 0.0, None
for i in range(len(tijden) - 1):
    opgebouwd += (vermogen[i] + vermogen[i + 1]) / 2 * (tijden[i + 1] - tijden[i])
    if helft is None and opgebouwd >= E / 2:
        helft = tijden[i + 1]
print("de helft van de energie is binnen om %d:%02d" % divmod(round(helft * 60), 60))
