Back in 2018 I coiled 200 m of black irrigation pipe on the tool shack roof and called it a pool heater, and it is still the pool heater. This summer I moved the two pumps around the pool (the filter and the solar circulator) from a fixed schedule to a Home Assistant package with its own dashboard. For the first time the pumps follow the PV forecast instead of the clock.
We have a 13 m³ Bestway pool with a filter pump and a Gardena Classic 3000/4 pump that pushes the water up to the roof loop. Each pump is behind an IKEA INSPELNING Zigbee plug, I use it for switching and for the power reading. For the water temperature I got a SONOFF SNZB-02LD (the IP65 version of their Zigbee thermometer, with a small display and a wired probe). The probe sits in the water and the unit stays dry on the edge of the pool. For the air temperature I reuse the Zigbee T&H sensor from the garden automation.
I know a pool in the garden sounds like a luxury, but this one is pretty cheap to keep. It is a Bestway frame pool we bought in 2017 for about 650 €, and this was its tenth summer. Heating costs nothing (the roof coil needs no power, and the two pumps draw from PV surplus while the sun is out). The filter is a sand filter, Bestway ones start at around 100 € and the sand lasts for years. Chlorine and pH correction for a season come to about 40 € at most. We keep the pool up for slightly over two months a year, then I drain it (the water goes to irrigation), dry it and pack it away with some care. I think that is why it survived ten seasons. For those two months it is where the family and our guests end up.



I decided to run the filter on a daily target instead of a fixed schedule, the idea is to filter most when the electricity is free and the pool is busy. The PV forecast for the day picks the target:
- 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 my roof, so I let the PV actually delivered so far, or a 30-minute average above 2.5 kW, promote the tier. The run goes 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. Every five minutes HA tops it up until the target is met. I do not cache anything, a restart or a sensor blip just gets recomputed on the next tick.
The solar circulator I run in bursts. The theory is that water standing still in 200 m of black pipe gets hotter than with a steady trickle. It runs 50 minutes on and 15 minutes off, and only when all of these hold:
- between four hours after sunrise and four hours before sunset
- PV forecast for the day above 18 kWh, or the panels already averaging 2.5 kW
- air above 18 °C
When the 30-minute PV average falls under 2.2 kW the pump stops right away, a cloud front ends the burst and not the timer.
I added two guards for the pumps:
- A manual tap on the dashboard, or a press of the button on the plug, backs the schedulers off for six hours. My intent wins over the automation and I do not have to disable anything.
- The anomaly guard compares the five-minute median load with the 300 W and 500 W I told it to expect. If it deviates by more than 15 %, the guard kills the pump and sends me a push notification (a pump running dry or a blocked skimmer looks exactly like that from the plug).
The whole package with both schedulers and the guards is in a gist.
For the numbers I took the four weeks from 25 June to 21 July, with a warm spell, a cold spell and the recovery in them:
- solar circulator: 104 hours, 46 kWh
- filter: 184 hours, 50 kWh
- PV production: 812 kWh
The pool used about 1/8 of what the roof produced, all of it while the sun was shining since the schedulers only run them in the PV window.

The water temperature tells more. In the last week of June the pool went from 23.5 to 26.3 °C mean in five days, +2.8 °C on 13 m³. That is roughly 42 kWh of heat net of the night losses, for 14 kWh of pump electricity. Then July fell apart. We had 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. The sun came back on 14 July and the loop lifted the water from 21.5 to 25.3 °C in a week, another 57 kWh net. The warmest reading of the four weeks was 27.3 °C 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 I got 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. The roof got the water there on about half of July. A small pool heat pump running on PV surplus is on my list for next year, it 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’ve tried most of the usual remedies without much success, so that one stays unsolved for now. If you’ve beaten it, I’d like to hear how.
