# maak_slapdata.py - een zomer inspecties van de sla in de klimaatmodule (een model, geen echte metingen)
import math
import random

rng = random.Random(1)                                   # vast zaadje: iedereen krijgt dezelfde data


def dampdruk(t):
    """Verzadigde dampdruk van water (kPa) bij t graden Celsius (formule van Tetens)."""
    return 0.6108 * math.exp(17.27 * t / (t + 237.3))


regels = ["tijdstip,temperatuur_C,vocht_pct,licht_klx,bewoner,slap"]
for dag in range(92):                                    # 1 juni tot en met 31 augustus 2026
    maand, nr = (6, dag + 1) if dag < 30 else (7, dag - 29) if dag < 61 else (8, dag - 60)
    w = min(1.0, max(0.0, rng.gauss(0.55, 0.3)))          # hoe helder de dag is (0 tot 1)
    t_buiten = 17 + 11 * w + rng.gauss(0, 2) + (2 if 30 <= dag < 75 else 0)
    bewoner = "A" if (dag // 7) % 2 == 0 else "B"         # om de week kijkt een andere bewoner
    for uur in (11, 14, 17):
        if dag % 7 in (5, 6) and rng.random() < 0.7:
            continue                                      # in het weekend meestal niemand
        zon = max(0.0, math.sin(math.pi * (uur - 5.5) / 15.0)) * w
        t = 18 + (t_buiten - 17) * 0.6 + 4 * zon + rng.gauss(0, 1.0)
        rv = min(95.0, max(30.0, 82 - 1.8 * (t - 18) - 12 * zon + rng.gauss(0, 5)))
        licht = max(0.0, 55 * zon + rng.gauss(0, 3))       # daglicht op de lichtsensor (klx)
        vraag = dampdruk(t) * (1 - rv / 100) * (licht + 15) / 45   # hoe hard de plant verdampt (model)
        slap = vraag > (1.6 if bewoner == "A" else 1.25)   # B noemt de sla sneller slap
        if rng.random() < 0.05:
            slap = not slap                               # een vergissing bij het noteren
        regels.append(f"2026-{maand:02d}-{nr:02d} {uur}:00,{t:.1f},{rv:.0f},{licht:.0f},{bewoner},{int(slap)}")
with open("slap.csv", "w", newline="") as f:
    f.write("\n".join(regels) + "\n")
print(len(regels) - 1, "inspecties in slap.csv")
