# per_blok.py - de minuten van de logger samenvatten in blokken van 3 uur (het formaat van hoofdstuk 28)
import csv
from logboek import lees_week, opschonen
rijen = lees_week()
opschonen(rijen)
blokken = {} # begin van het blok -> de regels van dat blok
for r in rijen:
t = r["tijd"]
begin = t.replace(hour=t.hour - t.hour % 3, minute=0)
if begin not in blokken:
blokken[begin] = []
blokken[begin].append(r)
with open("klimaatmodule_oktober.csv", "w", newline="", encoding="utf-8") as bestand:
schrijver = csv.writer(bestand)
schrijver.writerow(["tijdstip", "temperatuur_C", "vocht_pct", "verbruik_Wh", "zon_Wh"])
for begin in sorted(blokken):
rs = blokken[begin]
t = [r["T"] for r in rs if r["T"] is not None]
rv = [r["RV"] for r in rs if r["RV"] is not None]
genoeg = len(t) >= 90 # minstens de helft van de 180 minuten geldig
rij = [begin.strftime("%Y-%m-%d %H:%M"),
f"{sum(t) / len(t):.1f}" if genoeg else "",
f"{sum(rv) / len(rv):.0f}" if genoeg else "",
round(sum(r["verbruik"] for r in rs)),
round(sum(r["zon"] for r in rs))]
schrijver.writerow(rij)
if begin.day == 14: # woensdag tonen
print(rij, len(rs), "minuten")
print("blokken:", len(blokken))
Uitvoer:
['2026-10-14 00:00', '18.0', '84', 22, 0] 180 minuten
['2026-10-14 03:00', '18.0', '84', 22, 0] 180 minuten
['2026-10-14 06:00', '19.4', '82', 545, 78] 180 minuten
['2026-10-14 09:00', '19.4', '82', 272, 464] 180 minuten
['2026-10-14 12:00', '20.3', '80', 219, 547] 180 minuten
['2026-10-14 15:00', '20.3', '80', 475, 183] 180 minuten
['2026-10-14 18:00', '19.4', '82', 570, 0] 180 minuten
['2026-10-14 21:00', '18.0', '84', 22, 0] 180 minuten
blokken: 56