# opwarmsnelheid.py - hoe snel warmt de meetkas op? Centrale differenties op een meetreeks.
import csv

tijden, temps = [], []                            # tijd in uren, temperatuur in graden Celsius
with open("meetkas_aprildag.csv", newline="") as f:
    for rij in csv.DictReader(f):
        uur, minuut = rij["tijdstip"].split(":")
        tijden.append(int(uur) + int(minuut) / 60)
        temps.append(float(rij["temperatuur_C"]))


def klok(t):
    m = round(t * 60)
    return "%d:%02d" % (m // 60, m % 60)


def afgeleide(t, y, k):
    """Centrale differentie over k meetstappen aan elke kant: (y[i+k] - y[i-k]) / (t[i+k] - t[i-k])."""
    return [(t[i], (y[i + k] - y[i - k]) / (t[i + k] - t[i - k])) for i in range(k, len(y) - k)]


for k in (1, 3, 6, 9):
    d = afgeleide(tijden, temps, k)
    t_max, v_max = max(d, key=lambda p: p[1])
    print("h = %2d min: grootste opwarmsnelheid %.1f °C/h om %s" % (5 * k, v_max, klok(t_max)))

# voorspelling om 11:00 met de raaklijn (h = 15 min): wanneer is het 28 °C?
nu = tijden.index(11.0)
snelheid = dict(afgeleide(tijden, temps, 3))[11.0]
t_28 = 11.0 + (28.0 - temps[nu]) / snelheid
echt = next(t for t, T in zip(tijden, temps) if T >= 28.0)
print("om 11:00: %.1f °C en %.1f °C/h -> 28 °C om ongeveer %s (gemeten: %s)"
      % (temps[nu], snelheid, klok(t_28), klok(echt)))
