
Een huishoudplanner die tijdvensters van 30 minuten voor de komende 48 uur rangschikt op koolstof, prijs, weer en comfort. Hij biedt een primair en een reservevenster, met gemodelleerde verschillen in kg CO₂ en besparingen op Britse elektriciteitsprijzen tegenover een expliciete baseline.
- Probleem
- De onderzochte tools tonen koolstofprognoses of elektriciteitsprijzen, maar combineren die niet met weer en comfort tot een benoemd huishoudschema
- Inzicht
- Het tijdstip kan de geschatte koolstofvoetafdruk van een taak veranderen; een benoemd venster en een expliciete baseline maken die keuze bruikbaar
- Oplossing
- Ik bouwde een planner die elk slot van 30 min over 48 uur scoort op koolstof, prijs, weer en comfort, met gemodelleerde verschillen in kg CO₂ voor 3 steden en besparingen in £ voor het VK
- Resultaat
- Live op climatique.app: de hele site is één kleine realtime planeet waarvan de lucht, de nevel en het roodborstje het stroomnet uur per uur volgen, in 3 steden met 5 gratis datafeeds. Besparingen worden vergeleken met de toegestane uren van de taak zelf, dus de cijfers zijn klein maar verdedigbaar
Van netprognose naar een bruikbaar huishoudschema
Een rekenvoorbeeld met gemiddelde koolstofintensiteit: aan een was-en-droogcyclus van 4,2 kWh bij 380 gCO₂/kWh wordt ongeveer 1,6 kg CO₂ toegerekend; bij 50 gCO₂/kWh ongeveer 0,2 kg. Deze invoerwaarden illustreren de berekening, geen beloofd dagbereik of gemeten huishoudresultaat. Rekenen met het netgemiddelde toont niet welke marginale uitstoot werkelijk vermeden wordt door een taak te verschuiven.
Ik nam acht tools onder de loep voordat ik één regel code schreef. NESO (voorheen National Grid ESO) toont de koolstofintensiteit, maar heeft geen prijs of planning. Octopus toont de Agile-prijzen, maar geen koolstofsignaal. Loop is louter historisch. Home Assistant vraagt hardware en een technische installatie. Wat ontbreekt: geen enkele tool versmelt koolstof × prijs × weer × comfort tot een benoemd tijdvenster met een besparingscijfer — leverancieronafhankelijk, zonder hardware.
Wat ontbreekt is de vertaling: een benoemd venster en een expliciete vergelijking met een baseline, zonder gespecialiseerde hardware
Climatique vandaag: de hele startpagina is de planeet, hier op een Londense avond
Vier weken onderzoek, geen code — databronnen, taakprofilering, ontwerp van het scoremodel
November 2025 ging volledig naar onderzoek. Week 1: concurrentieaudit van 8 tools en evaluatie van de netdatabronnen. Week 2: carbon-API’s testen voor het VK, Frankrijk en België, plus controles op de datakwaliteit. Week 3: energieprofilering van apparaten — het reële kWh-verbruik van wasgoed, vaatwasser, EV-laden en ventilatie. Week 4: ontwerp van het scoremodel en de architectuurkeuzes.
Voor Londen vraagt de app een regionale prognose van 48 uur op bij de UK Carbon Intensity API, met een resolutie van 30 minuten. Frankrijk (RTE éco2mix via ODRE) en België (Elia ods192) publiceren enkel actuele waarden, dus bouwde ik een cyclische proxy op basis van het tijdstip van de dag voor hun vooruitkijkende vensters. Electricity Maps dekt 50+ landen met een resolutie van 15 minuten, maar zit achter een betalend niveau. Open-Meteo verzorgt het weer voor alle drie de steden, gratis en zonder sleutel.
De koolstofinvoer voor België komt nu uit de werkelijke Elia ods192-data. Het toekomstige venster gebruikt een benoemde tijdstipproxy in plaats van het oorspronkelijke koolstofmodel op basis van het weer.
Van datadashboard naar een planeet die je kunt lezen
De interface ging door drie fasen. De eerste ordende stad, prioriteiten en taken rond een grote grafiek van koolstof en prijs. De planner van oktober gaf de aanbeveling een benoemd tijdvenster en zette de lokale omstandigheden naast een gerenderde botanische weide. Sinds 25 oktober is de planner de wereld zelf: één planeet over het hele scherm, met de bediening in glazen panelen erboven. Deze schermen tonen de ontwikkeling van het ontwerp; ze bewijzen geen gemeten verbetering in bruikbaarheid.
Fase 1: het vroege dashboard, een bewaarde iteratie met illustratieve waarden
Fase 2, 10 oktober 2026: de planner naast een native Redshift-weide
Een score-engine met 4 assen, een schuifvensterplanner en verwisselbare dataproviders
De stack is bewust minimaal: FastAPI + Python als backend, React + Vite als frontend, pandas voor het slotraster, SQLAlchemy met SQLite lokaal en Postgres in productie. Geen berichtenwachtrij, geen workerprocessen, geen vectordatabase. De optionele wekelijkse Groq-samenvatting staat los van het planningsverzoek.
Elke taak krijgt een score van 0–100 per slot van 30 minuten. Als prijsgegevens en taakspecifieke weergegevens beide beschikbaar zijn, gebruikt Groen koolstof 55%, prijs 10%, weer 35%; Geld besparen gebruikt 10%, 55%, 35%; Gebalanceerd gebruikt 33/33/34. Bij ontbrekende invoer gelden aparte terugvalgewichten. Comfort is een harde drempel: een venster dat een voorwaarde schendt, zoals regen tijdens buiten drogen, valt weg. De schuifvensterplanner geeft een primair en een niet-overlappend reservevenster terug. Een horizon van 48 uur bevat 96 slots van een halfuur per taak, een klein eindig raster dat een exacte scan mogelijk maakt zonder solver.
De provider-aanroepen zijn asynchroon (httpx) en worden per bron gecachet. pandas voegt de koolstof-, prijs- en weerreeksen samen, herleidt weerdata per uur tot slots van een halfuur en scoort het raster: koolstof, prijs en fit als gevectoriseerde kolommen, de weerdeelscores rij voor rij. Een tijdzonebewuste index houdt lokale huishouduren gescheiden van de UTC-tijdstempels van de feeds.
Benoemde tijdvensters, echte cijfers, drie steden — zonder hardware, zonder account
Schermen vastgelegd op 28 en 29 oktober 2026 op de live site, met live data. De cijfers erop zijn de voorspelling van die dag, geen gemeten besparingen van huishoudens. Op de aanbevelingskaart vergelijkt het percentage de netintensiteit met de vroegste start van de taak; de kg en £ vergelijken met het gemiddelde van alle toegestane starts en tellen bij aan de lucht gedroogde was de droogtrommel mee die niet draait, het grootste deel van de besparing.

Live — het dock toont het uur, de koolstofintensiteit ervan, de Britse opwekkingsmix en de komende 48 uur; sleep de zon of scrol en vraag dan naar het schonere uur
Invoer links, het antwoord rechts, de planeet ertussen
Op een telefoon staat de kop boven de planeet en past de bovenbalk op één rij
Het plan als paneel; het percentage vergelijkt met de vroegste start
Parijs op 29 oktober: er bestaat geen netprognose, dus de kaart zegt dat de uren recente dagen herhalen en hoe oud de netdata zijn; zonder prijsfeed geen bedrag
Kostenbesparingen gelden alleen voor het VK: ze komen uit de halfuurprijzen van Octopus Agile, en Frankrijk en België hebben geen vergelijkbare gratis publieke prijsfeed. De interface toont de munteenheid per stad (£ of €), zodat geen bedrag verkeerd wordt toegeschreven. De nachtelijke EV-planner had twee fixes nodig: een naïeve “zelfde dag”-beperking verwierp alle starts na middernacht, en een latere codereview bracht een subtielere bug aan het licht die stilletjes de schoonste nachtslots liet vallen. De echte fix gebruikt een absoluut openingsmoment van het venster, met een regressietest. “Werkt in het standaardgeval” en “is correct” zijn twee verschillende beweringen.
De hele site is een kleine wereld die de tijd van het stroomnet aangeeft
De planeet maakt het antwoord zichtbaar. De zon staat waar ze echt staat voor de gekozen stad, berekend met een astronomische formule; de maan toont haar fase tot op ongeveer een dag en de sterren en de weide volgen het seizoen. De nevel volgt de absolute koolstofintensiteit, weg bij 30 gCO₂/kWh en maximaal bij 350, omdat de score van de planner relatief is binnen het venster van 48 uur en het zeer schone net van Parijs anders als smog zou tonen. De relatieve score bepaalt in plaats daarvan hoeveel de bloemen bloeien.
Middag, schone lucht: een beeld uit de live wereld, geen render
Dezelfde code bij 350 gCO₂/kWh of meer: de nevel toont hoe vuil de stroom is, niet de luchtkwaliteit
Het roodborstje is een Europees roodborstje dat ik in Cinema 4D modelleerde, riggede en animeerde, geëxporteerd als glTF en gecomprimeerd tot ongeveer 319 KB bij levering. Het leeft op de klok van de planeet: overdag pikt het, bij dageraad zingt het en ’s nachts slaapt het. Vraag je naar het schonere uur, dan zoekt het vanaf zijn paal terwijl het plan laadt, vliegt daarna een snel rondje om de planeet, landt en zingt tijdens het aanbevolen venster terwijl de bloemen opengaan. Wind, regen en vorst veranderen zijn houding.
Het roodborstje op zijn paal, van dichtbij in de live wereld
Eromheen: een optioneel geluidslandschap dat ter plekke wordt gemaakt met de Web Audio API (wind, regen, een netgezoem dat ruwer wordt met de nevel, vogels die het roodborstje volgen), een deelbare ansichtkaart gerenderd door een tweede wereld buiten beeld, een korte timelapse die de klok van de wereld naar het aanbevolen uur draait, een strook met de opwekkingsmix voor Londen en een pagina /story die uitlegt waar de cijfers vandaan komen. Een kwaliteitsladder beschermt het toestel: de wereld neemt het pas over van de poster boven 50 fps op desktop of 28 fps op een telefoon, verlaagt de pixelratio als beelden vertragen en valt terug op de poster in plaats van te haperen. Het mobiele profiel blijft onder 380.000 driehoeken.
Een levende weide, opgebouwd in Cinema 4D en gerenderd met Redshift
De planeet geeft een abstract koolstofsignaal een tastbare, levende vorm. Ik bouwde de scène in Cinema 4D op met botanische plantmodellen: een doorlopende klaverbodembedekking, grassen, lavendelgroepen, witte madeliefjes, kleine gele bloemen en roze klaverbloemen. Variatie in schaal, rotatie en groepering doorbreekt de herhaling, terwijl de lage beplanting de open plekken op het boloppervlak opvult.
Definitief Redshift-frame — gelaagde beplanting en zacht gericht licht
Cinema 4D-werkviewport — lichte previews houden de dichte scène werkbaar
Multi-Instance-cloners hergebruiken de plantgeometrie in plaats van die over de bol te dupliceren. Warm licht van linksboven, een brede frontale invulling en zacht hemellicht scheiden de bloemen van het blad. De windanimatie buigt de beplanting met verschillende fases, terwijl de wortels verankerd blijven; de oorspronkelijke lus telt 240 frames bij 30 fps, gerenderd vanuit een bron van 1024 × 1024 pixels.
De Redshift-windlus van 8 seconden, geëxporteerd uit de oorspronkelijke framereeks
De Redshift-render was het eerste gezicht van de planeet. Vandaag is de poster die je ziet voordat de realtime wereld start, en de terugval als die niet kan draaien, een stilstaand beeld van de live wereld zelf. De live planeet is een nieuwe three.js-bouw en geen omzetting van de Redshift-scène: procedurele planten als instances, wind in een vertex shader, en de weide en de wolkenatlas die in een web worker buiten de hoofdthread groeien.
Hetzelfde visuele systeem, van de planner tot het kleinste scherm
Koppen in The Seasons 700, lopende tekst in Manrope en Streamline Flex Line-iconen brengen het product samen in één systeem voor typografie, witruimte en bediening. Geselecteerde modi behouden dezelfde regelafbreking en afmetingen. Compacte instellingen en taakbewerking delen een dialoog met ondersteuning voor Terug en focusherstel; de rondleiding volgt het zichtbare doel wanneer de lay-out verandert. De 404-pagina gebruikt dezelfde identiteit en biedt een duidelijke weg terug.
Release van 10 oktober: startpagina op een smal scherm — leesbare typografie en oorspronkelijke illustratie
Een echte HTTP 404 met een duidelijke terugkeeractie
De oktoberrelease doorstond geautomatiseerde controles op toetsenbordbediening, contrast, responsiviteit, routes en beveiliging, naast de applicatietests. Een korte geïnstrumenteerde controle op een iPhone 15 Pro bevestigde dat de mobiele renderer draait. Gesproken VoiceOver/NVDA-controles, scrollen met de vinger en de bewegende Safari-werkbalk en verdere optimalisatie van de laadtijd blijven open; dit is een technische en expertreview, geen gebruikerstest of toegankelijkheidscertificering.
Mijn eigen model schrappen toen de echte data het tegensprak
België gebruikte oorspronkelijk een koolstofmodel op basis van het weer, omdat de integratie niet over een gratis vooruitkijkende feed beschikte. De huidige provider leest werkelijke, verbruiksgebaseerde Elia ods192-data en bouwt een benoemde tijdstipproxy voor toekomstige slots. Ik verwijderde het weergebaseerde koolstofpad, zodat het niet ongemerkt als fallback kon terugkeren. De bron is herleidbaar, terwijl het toekomstige venster een patroonschatting blijft en geen prognose van de netbeheerder.
Een kleinere beslissing loopt door de hele planner. Een slot dat een harde randvoorwaarde schendt, zoals regen tijdens buiten drogen van was, wordt volledig uitgesloten in plaats van beboet in de score. Een boete houdt een slecht slot rankbaar en laat een mooi ogend totaal iets aanbevelen dat de gebruiker zichtbaar niet kan doen. Uitsluiten is minder elegant en lastiger af te stellen. Het is ook waarom aanbevelingen het contact met het weer overleven.
Bij de nachtelijke EV-planner was dat principe het moeilijkst vol te houden. Een naïeve randvoorwaarde voor dezelfde dag wees starts na middernacht volledig af, en een latere code review bracht een subtielere bug aan het licht die stilletjes juist de schoonste nachtelijke slots liet vallen, precies de uren waarvoor de functie bestaat. Beide zijn opgelost in plaats van omzeild. Een planner die het beste antwoord stil overslaat, is erger dan een planner die toegeeft er geen te hebben.
Kleinere cijfers die ik kan verdedigen
Een audit op 28 oktober veranderde wat de planner beweert. Besparingen werden vergeleken met de Britse avondpiek, 17:00–20:00, ongeacht de taak; daardoor leek nachtelijk EV-laden 0,55 kg CO₂ en £1,43 te besparen. Nu worden ze vergeleken met het gemiddelde van alle uren waarin de taak mocht draaien, wat dezelfde laadbeurt op ongeveer 0,1 kg en £0,01 brengt, afhankelijk van de prognose van die dag. De eerdere jaarschatting (~£184 en ~68 kg CO₂ voor een Londens huishouden) trok ik in, omdat die op de oude basislijn rustte. Parijs en Antwerpen tonen nu hoe oud hun netdata zijn, behandelen data ouder dan 48 uur als verouderd, en het weekoverzicht rangschikt alleen dagen met een echte voorspelling.
De 7-daagse vooruitblik na de audit: alleen dagen binnen de 48-uursprognose krijgen een koolstofscore; de rest meldt ‘no carbon forecast’ in plaats van te gokken
Wat ik anders zou doen: eerst de eerlijke basislijn kiezen en de feedbacklus eerder meten. De browsergebonden geschiedenis ondersteunt “Gevolgd” en “Niet gevolgd” met eigenaarscontroles, maar dat bewijst geen echte besparingen. Volgende stappen: aanbevelingen valideren met deelnemers, een proefjury houden voor inzendingen bij awards en lokale prijsfeeds voor Frankrijk en België onderzoeken.
Bouwfeiten, bijgewerkt op 29 oktober 2026: 6 maanden voor de kern, daarna vanaf half oktober de realtime wereld. 3 steden (Londen, Parijs, Antwerpen), 5 taaktypes en 5 gratis databronnen. Lighthouse 12 mobiel op productie achter Cloudflare scoorde 78–82 in acht runs op 28 oktober (LCP 3,3–3,8 s); het doel van 90 is nog niet gehaald. Zelf gehost op Coolify met interne Postgres en nachtelijke back-ups van de database; geen kosten voor data-abonnementen.
Bronnen
- National Energy System Operator — UK Carbon Intensity API (regional 48-hour forecast).
- Sukprasert et al. (2024). On the Implications of Choosing Average versus Marginal Carbon Intensity Signals on Carbon-aware Optimizations. ACM e-Energy. — gemiddelde en marginale signalen beantwoorden verschillende vragen; de planner meet geen werkelijk vermeden uitstoot
