🧶Les pelotes de ficelle

Catch a loose end, pull the thread, unravel the whole ball.

← Back to the ball of yarn

The night works for us

Chronicles of an instrumented house, heatwave episode

It’s 4 p.m., it’s 37.7 °C outside at the hottest point of the past twenty-four hours, and my bathroom reads 30 °C. Not the bathroom after a shower: the bathroom empty, shutters closed, nobody in it. That’s what a heatwave does to a house — it fills it slowly, degree by degree, through the roof, through the walls, through every pane of glass, and by evening the house has become a radiator that hands the day back to you while you’re trying to sleep.

Against that, there’s not much you can do in the moment. But a heatwave has a weakness: the night. Around 4 a.m., the outside air drops to 20 °C, sometimes lower. For a few hours, there is out there a stock of free coolness, immense, renewed every night — and the only question worth asking is: how do we get it inside?


A bathroom extractor fan as a workhorse

The house already had everything it needed, actually. It just took looking at it differently.

Downstairs, a fresh-air inlet, originally installed to feed the wood stove. Upstairs, the bathroom — the hottest spot in the house, elementary physics. And between the two, a modest VMC (the French term for a mechanical ventilation unit) that, for years, has concerned itself only with humidity: it switches on when the shower fogs things up, off when it’s dry.

But if you run that extractor fan at night, something more interesting happens: it sucks up the hot air accumulated upstairs, throws it outside, and the resulting low pressure draws the cool night air in through the inlet downstairs. The whole house becomes a circuit: fresh air comes in on the ground floor, crosses, rises, and leaves through the top, carrying the day’s heat with it. The benefit isn’t local to the bathroom — it’s a house-scale stack effect, with a fan of a few tens of watts as the only engine.

The technical term for this is free cooling. I prefer the way we say it in French: the night works for us.


The rule, and the traps it avoids

What remained was to write the decision rule. The little computer that drives the extractor fan now queries the weather and only switches on extraction if four conditions are met at the same time:

  1. the outdoor maximum over the past 24 hours is above 22 °C — we really are in the hot season;
  2. the bathroom is above 24 °C — it really is hot upstairs;
  3. the living room is above 20 °C — the house isn’t already cooled down;
  4. the outside air is at least 3 °C cooler than the inside — otherwise we’d be stirring air for nothing.

The subtlety is in the first condition. You might think it’s enough to compare inside and outside. Wrong — and a mistake that would cost dearly in January: a house heated by the stove to 24 °C with 5 °C outside shows a 19 °C gap, more than enough to trigger a naive rule… which would then throw the wood’s heat out the window, sucking in freezing air through the air inlet. The very same one that feeds the stove. The system would sabotage itself.

Hence the season criterion: the outdoor max over a rolling 24 hours. My January readings top out at 14.6 °C; the summer ones never drop below 22 °C. Between the two, a chasm — the guardrail can’t be crossed by accident. And above all, it doesn’t look at the temperature of the moment: a 13 °C night after a 32 °C day is precisely the time to extract, and an instantaneous threshold would have forbidden it.


What the numbers say

Before wiring anything up, I replayed the rule against the real data from the past week — the house has been logging everything for years, it might as well be useful.

A week of heatwave: the outdoor temperature swings between 20 and 38 °C while the bathroom settles around 28-30 °C; at the far right, the fan command switches to ON

The week in one picture: the outdoors (blue) breathes from 20 to 38 °C, the bathroom (pink) takes the hit and settles around 28-30 °C. And at the far right, that line going up: the fan command switching to ON — the system has just been armed, a few hours before its first night.

Verdict: over the week of July 6 to 13, the rule would have triggered 48 hours of extraction. Average gap between inside and outside at the moments of triggering: 4.9 °C. Time slots: concentrated between 1 a.m. and 9 a.m., never in the afternoon — the rule found the rhythm of the nights all by itself.

And the figure that amused me most: during that same heatwave week, the extractor fan didn’t run a single minute. The air was so dry (29 to 37% humidity in the bathroom, against a trigger threshold of 60%) that its historical mission never woke it up. A perfectly functional motor, installed, wired, powered — and 100% dormant, precisely during the week when it had the most to offer. That’s exactly the kind of untapped resource I love: zero hardware to buy, just a rule to write.

Tonight is the first night under real conditions. The unknown is a frank one: the air inlet was sized for a stove’s combustion, not for ventilating a house. If its cross-section is too tight, the fan will mostly pull on the leaks in the building envelope and the actual airflow will be disappointing. Tomorrow morning’s curve will settle it — if the bathroom drops off sharply compared with the previous nights, we’ve won.


Remarkable events: −7 °C and +41.7 °C, the same year

A house that logs everything builds up its own little mythology. The table of outdoor records for 2026 almost speaks for itself:

  • January 6, 2026: −7.0 °C. The coldest day ever recorded by the station. The stove ran nonstop, the air inlet downstairs was sucking in frost.
  • June 23, 2026: 41.7 °C. The hottest — before summer had even officially begun. Three hours in a row above 41 °C.

Snow-covered plain in low-angled sunlight, clear sky, during the January 2026 cold spell

The morning of the record: the plain under snow, crystal-clear sky — the same clear sky that, six months later, would let the sun push the thermometer to 41.7 °C.

A 48.7-degree range in under six months, at the same spot, measured by the same chain of sensors. The average, meanwhile, drifts without a sound — and that’s precisely the trap.

It reminded me of Mélenchon, during his first presidential campaign, already bristling at the word “warming” (réchauffement): too gentle a word, almost the promise of an early spring, two more degrees on an average, who would even notice? And who insisted, pointedly, on “climate disruption” instead (dérèglement climatique, a climate knocked out of adjustment). The nuance isn’t cosmetic, it’s the whole question: what damages houses, crops and people isn’t the average drifting — it’s the extremes pulling apart in both directions. Sharper frosts and earlier heatwaves. A climate machine that hasn’t simply gained a degree: one that has lost its thermostat.

Climate trend for July 13 in Puilboreau since 1970: minimums, averages and maximums over ±7 days, with a slope of +0.32 °C per decade

July 13 over the years, since 1970 (Open-Meteo aggregates for my location). The average climbs by +0.32 °C per decade — 19.5 °C in the first years of the series, 21.5 °C over the last ten. Two degrees in half a century: that’s the “warming,” and on this graph it looks harmless. What you only see by squinting is the pink curve of the maximums running wild — the recent peaks blow through the ceiling of the 1970s. That curve is the disruption.

My two records of 2026 make the case on their own. And that’s exactly why you instrument a house: you don’t prepare for an average, you prepare for extremes — in both directions.


Under the hood, for those who’d like to build it

Everything above runs on hardware from the back of a drawer — that’s the important point, and the reason this post exists: anyone can put this together on a Sunday.

  • In the bathroom: a Raspberry Pi Zero W (~€15), a €2 DHT11 temperature/humidity sensor on one GPIO, and a €2 433 MHz radio transmitter on another.
  • The ventilation unit isn’t modified by a single wire. It’s plugged into a supermarket 433 MHz remote-controlled outlet (~€10): the Pi simply replays the ON/OFF codes of the original remote (rpi-rf library, protocol 1, 350 µs pulse — the values are captured by listening to the remote with a €1 receiver). No 230 V wiring, reversible in thirty seconds.
  • A small server somewhere — here a VPS for a few euros a month, but a NAS or a second Pi would do exactly the same: one PHP page, one SQLite database, and that’s it.

Raspberry Pi Model B Revision 2, the 2012 board Raspberry Pi Zero, the tiny board that drives the extractor fan DHT11 temperature and humidity sensor, the little ridged blue box

The house’s workforce. Top, the veteran: a 2012 Raspberry Pi Model B — 14 years of service, it drives the living-room heating in Ruby. Middle, the bathroom’s Pi Zero, which has just learned free cooling. Bottom, their eyes: the DHT11, the €2 temperature/humidity sensor — the little ridged blue box every tinkerer has come across at some point. (Photos: Gareth Halfacree CC BY-SA 2.0; Evan-Amos, public domain; Crackopl CC BY-SA 3.0.)

Hunting down watts is part of the game, for machines that run around the clock. The Pi Zero draws ~0.6 W. The old Model B pulls ~2.5 — blame its 2012 linear regulators, which burn the excess voltage off as pure heat, and its USB/Ethernet chip, powered permanently. Nothing can be done about the architecture, but you can trim the software fat: rummaging through the veteran this week, I found a MySQL and an Apache from 2017 that had been running for nothing for nine years, an HDMI output active in NTSC with no screen on the end of it, a Bluetooth never paired, and a daemon waiting for shortcuts from a phantom keyboard. All of it cut: two degrees less on the processor in the middle of a heatwave, 38 MB of RAM given back, and above all no more pointless writes to the SD card — that’s the real killer. On the scale of the bill it’s anecdotal (2.5 W ≈ 22 kWh/year ≈ €5), but a system you want to see last ten years owes it to itself to be lean.

The architecture choices are all dictated by the same obsession: surviving outages, router reboots and the years.

  • No daemon, a cron. The controller launches every 5 minutes, lives for twenty seconds, measures, decides, sends its radio code, exits. A process that isn’t running can neither leak nor hang — the Pi is at 267 days of uptime without giving it a thought.
  • It’s always the Pi that pulls, never the server that pushes. The Pi re-downloads its configuration (a YAML file) every minute with a plain curl, and queries the weather at decision time. Behind any router, NAT or IP change, it works — and the “Enable” box ticked on the web page takes effect in the field the following minute.
  • The weather comes from Open-Meteo (open-meteo.com): a free API, no key, with history. An hourly cron archives it server-side, and the Pi receives a minimal JSON: current temperature, max over a rolling 24 h, living-room temperature. Serving only observations — never the forecast — matters: the 11 p.m. line was announcing 24 °C while it was 35 outside, and a rule fed on forecasts would have sucked in the furnace’s air.
  • A single table for everything: observations (source, metric, value, unit, metadata). Sensors, setpoints, commands, weather — everything goes into the same mold. Adding a sensor means adding a source, zero migration. It’s this table that made it possible to replay the rule against the archives before wiring it up.
  • Fail closed. Server unreachable or weather more than two hours old → the Pi falls back to its original humidity logic. No 24 h max → no extraction (the season guardrail can’t be bypassed by accident). The worst-case scenario of a failure is the behavior from before.
  • The curves on the page are drawn by uPlot, a ~50 KB library that handles tens of thousands of points without flinching.

And a word on what, to my mind, is non-negotiable: this data never leaves my perimeter. What these sensors measure is the inside of a house — when someone showers, when it’s heated, when it’s empty. The Pis push their readings over SSH to a server that I administer, the page that displays them asks for a password, and the loop stops there. No manufacturer cloud, no Alexa “skill,” no home-automation SaaS that shuts down in three years taking the history with it, not one byte in anybody’s analytics. The only outside dependency runs the other way: the house downloads Open-Meteo’s public weather, it sends nothing. The day the server changes — a NAS, another VPS, a shoebox — you move one SQLite file and everything starts back up.

Total budget per instrumented room: under €30. The luxury isn’t in the hardware — it’s in the years of data you accumulate, that you can query the day you have an idea, and that belong to no one but you.


Next: getting into the thickness of things

So far, all my sensors measure rooms. The next step is more intimate: getting inside the insulation.

The project: a rod planted vertically in the attic insulation, with four temperature probes at staggered depths — surface, one third, two thirds, bottom against the plasterboard. Above it, a fifth probe in the air under the roof tiles, which climbs to 60-70 °C right now. Below, the living-room thermostat, already in place. A complete measurement column, from the sun to the living space.

What it will tell, day after day:

  • The real thermal lag: how many hours does the heat peak under the tiles take to cross the insulation? The manufacturer states a theoretical value; the settled, aged insulation does as it pleases. I want the true number, in my house.
  • The damping: by how much is the day/night amplitude squashed between the surface and the bottom?
  • The effect of the draft chimneys I installed on the roof to evacuate the heat under the tiles: in comparable weather, the insulation surface should be cooler if the draft is doing its job. Two columns of probes — one near the chimneys, one far away — and the answer will fall out on its own.
  • And in the long run, an aging detector: a thermal lag that shortens year after year is insulation that’s degrading. Better to know before the heating bill says so.

Hardware-wise, nothing heroic: waterproof probes at a few euros each on a one-pair-of-wires bus, a microcontroller that sleeps 99.9% of the time on two salvaged rechargeable cells — enough to last about two years without changing the batteries. The electronics stay cool at the bottom of the attic; only the probes go up to the front line.


And in winter, we flip everything around

The heatwave will end. And the same intellectual plumbing will serve again, turned inside out like a glove.

The next project running through my head: air-based solar thermal panels on the outside wall — dead-simple solar collectors, a glazed black box in which air warms up in the winter sun. Even at 5 °C outside, a well-exposed panel puts out air at 30 or 40 °C in the middle of the day. Hooked up to the house’s air inlet, it becomes free preheating: instead of drawing in 5 °C air to feed the stove and make up for the extraction, we draw in air already warmed by the sun.

And the loop closes elegantly: it’s the same decision logic as free cooling, inverted. In summer, we extract at night when outside \< inside. In winter, we’ll inject during the day when panel > inside. The same sensors, the same weather, the same four-condition rule with its guardrails — only the sign changes. The probes in the insulation will even say whether the preheating shows up in the attic gradient.

A house, at bottom, is a thermal system that doesn’t know it. Mine is only just getting to know itself — and tonight, for the first time, it’s going to try to cool itself down while I sleep. I’ll tell you tomorrow whether it managed.


Postscript, on the morning of July 14

The first night has happened. The fan extracted for nearly twelve hours, from 7 p.m. to 8 a.m., with a one-hour pause around 1 a.m. — the gap had fallen back below the stop threshold, the rule did exactly what it was taught.

Raw result: bathroom from 31 °C at bedtime to 26 °C at rising. The best night of the week. But the figure I like is elsewhere. On the previous nights, the outdoors dropped to 23-24 °C and the bathroom stayed stuck at 28: a four-to-five-degree gap in the morning, the signature of a house that exchanges nothing with the night. This time, the controller held the gap between 1.4 and 2.4 °C until morning — the inside followed the outside on its way down, hour after hour. The air renewal is really there, and the air-inlet unknown is resolved: it delivers.

Transparency demands it: the windows were open that night, heatwave obliging — impossible to separate their share from the fan’s. The next night will be done windows closed, extractor fan alone. If the bathroom still hugs the outdoors to within two degrees in the morning, the demonstration will be complete. Domestic science advances one night at a time.


Next episode: the curves from the first night with the windows closed, and what 48 hours of nighttime draft change (or don’t) about a heatwave.