Back in 2018, I coiled 200 m of black irrigation pipe on the tool shack roof and called it a pool heater. It still is the pool heater. What changed this summer is that the two pumps around the pool – the filter and the solar circulator – stopped running on a fixed schedule and became a Home Assistant package with its own dashboard, so for the first time the pumps follow the PV forecast instead of the clock.
My setup is a 13 m³ Bestway pool, a filter pump, and a Gardena Classic 3000/4 pump that pushes water up to the roof loop. Each sits behind an IKEA INSPELNING Zigbee plug for switching and power reading. The water temperature comes from a SONOFF SNZB-02LD, the IP65 version of their Zigbee thermometer with a small display and a wired probe, so the probe sits in the water and the unit stays dry on the edge. The outside air comes from the Zigbee T&H sensor that the rest of the garden automation uses.
A word on cost, because a pool in the garden reads as a luxury, but this one is not. It is a Bestway frame pool bought in 2017 for about 650 €, and this was its tenth summer. The heating is free: the roof coil costs nothing to run, and the two pumps draw from PV surplus while the sun is out. Filtration is a sand filter; Bestway’s start around 100 €, and the sand lasts for years. A season of chlorine and pH correction tops out at about 40 €. It is up for slightly over two months a year, then drained (used for irrigation), dried, and packed away with some care, which is why it survives ten seasons. For those two months, it is where the family and guests end up.



The filter runs on a daily target instead of a fixed schedule, the idea being to filter most when the electricity is free and the pool is busy. The PV forecast for the day picks a tier: 2.5 hours when the forecast is under 10 kWh and nobody will swim, 4.5 hours by default, 7 hours when the day promises more than 30 kWh and the air is above 18 °C. Forecast.Solar is consistently pessimistic for this roof, so the tier can also be promoted by the PV actually delivered so far, or by a 30-minute average above 2.5 kW. The run is placed inside the PV window, sunrise plus three to five hours to sunset minus three, split into a morning and an afternoon half when there is room, and topped up every five minutes until the target is met. Nothing is cached, so a restart or a sensor blip just gets recomputed on the next tick.
The solar circulator is different. It runs in bursts, on the theory that water left standing in 200 m of black pipe gets hotter than a steady trickle would: 50 minutes on, 15 minutes off, only between four hours after sunrise and four hours before sunset, only when the day’s PV forecast is above 18 kWh or the panels are already averaging 2.5 kW, only while the air is above 18 °C. It stops the moment the 30-minute PV average falls under 2.2 kW, so a cloud front ends the burst rather than the timer.
Two things guard the pumps. Any manual tap on the dashboard, or a physical press on the plug, backs the schedulers off for six hours, so my intent wins over the automation without me having to disable anything. And an anomaly guard compares the five-minute median load with the 300 W and 500 W I told it to expect, and kills the pump with a push notification if it deviates by more than 15 %, which is what a pump running dry or a blocked skimmer looks like from the plug. The whole package, both schedulers and the guards, is in a gist.
Now the numbers, for the four weeks from 25 June to 21 July, which happen to hold a warm spell, a cold spell and the recovery. The solar circulator ran 104 hours and used 46 kWh. The filter ran 184 hours and used 50 kWh. The PV made 812 kWh in the same period, so the pool’s whole electricity bill was about an eighth of the roof’s output, and by construction it was spent while the sun was shining.

What the water did is the more interesting part. The last week of June took the pool from 23.5 to 26.3 °C mean in five days, +2.8 °C on 13 m³, which is roughly 42 kWh of heat net of the night losses, for 14 kWh of pump electricity. Then July fell apart: ten days with daily air means around 19 °C, the burst scheduler correctly sat idle most of the time, and the water sagged to 21.4 °C. When the sun came back on 14 July, the loop lifted it from 21.5 to 25.3 °C in a week, another 57 kWh net, and the warmest reading of the four weeks, 27.3 °C, came on 20 July. Over the four weeks, the water averaged 23.6 °C against 21.4 °C for the air, and it touched my 25 °C swimming threshold on roughly half of the days. In the two warm spells that is roughly 3.5 kWh of heat, net of night losses, for every kWh the pump used.

Anything under 25 °C is too cold for us, and the roof got there on about half of July, so a small pool heat pump running on PV surplus is on the list for next year. That would also extend the pool season. The other open problem has nothing to do with electronics: the pool attracts wasps that come to drink from it, and a wasp on the water scares the family more than a cold pool does. I have tried most of the usual remedies without much success, so that one stays unsolved for now. If you have beaten it, I would like to hear how.
