Solar Hydronic Floor Heating System

backhoesawyer Registered Users Posts: 3
Solar Hydronic Project Overview

I built a solar hydronic floor heating system for our house last fall, and after some testing and fine-tuning it’s ready and working great.  I originally shared this here on an Arduino forum; if you're interested in the code for the controller, you can find it there.   

We have grid-tied solar PV with batter backup, so this is the final piece of our solar puzzle.

The system consists of:

- Four 4x10’ flat panel solar collectors
- A repurposed 80g water heater used as a drainback tank
- Two circulator pumps: one for the solar panels, and one for the floor hydronics
- An ESP32 controller connected to various temp sensors, light sensor and relays
- An LCD remote display inside the house
- Logging and monitoring sent to ThingSpeak via wifi

System Description and Site

The system heats the 5” concrete slab on the first floor of our small house.  Combined with the passive solar design of the house, the thermal mass of concrete walls, plus R-21 to R-52 insulation in the walls and ceiling, this system heats the house without any other heat source required.  We’re on a south-facing slope at 4000’ in the Sierra Nevada foothills in California, so we have snow and actual seasons, but the winters are on the mild-to-medium side.

The panels we used are two different kinds (different manufacturers, slightly different sizes), and 3 of them had the glass either completely or partially broken out.  I cobbled together glass from old sliding doors and combined that with some left over double-walled acrylic greenhouse wall material to re-seal the panels.  They’re placed at 45° tilt matching the orientation of our house, about 172° AZ.  We live in a conifer forest, so trees to block the panels early and late in the day, but overall the site was chosen for excellent exposure.  I built a custom rack out of scrap steel to hold the panels.

Drainback Design & Plumbing

I designed this to be a non-pressurized drainback system, meaning that it uses normal water (no anti-freeze) that doesn’t stay in the panels when the sun isn’t shining—but drains back into an insulated tank to avoid freezing and breaking pipes.  For this to work, the panels are set at a higher elevation than the tank or the house, plus the rack and the bottom of the manifolds in each of the panels are carefully aligned and tilted about 1° down toward the supply side of the plumbing so that gravity will carry all water back downhill when the pump turns off.  No check valves are used in the plumbing.

The ~80g water tank is from an old Heathkit system—ironically designed for a solar system, but I’m not using it as intended; an old electric water heater tank would work just as well.  There are two independent circulation loops in/out of the tank, each with it’s own pump: one loop to and from the solar panels to collect heat, and one to and from the PEX tubing in the concrete floor to heat the house. There were two heater element ports in the side of the tank that I removed to use as the outputs for each of the loops: colder water off the bottom of the tank to go up to the panels, and hotter water off the top of the tank to go to the floor.  Both loops return to the tank through the ports in the top.  There’s also a hot water manifold in the house to distribute and balance the flows through the various zones in the floor.


The controller is based on an ESP32 with a custom-built shield.  There are eight DS18B20 temperature sensors used to monitor heat at various locations; there’s also a photoresistor at the panels to provide sunlight intensity.  Two SSRs turn the pumps on and off based on conditions and settings in the logic of the software.  There’s a remote display with a 4x20 LCD, two LEDs (showing pump states), a master switch and a ‘house’ temperature sensor.  CAT5 connectors and cables are used to make the system a bit more modular during install and testing.

Here’s a list of the sensors:

At the solar panel array:
    • Panels interior temperature (inside insulated panel enclosure, not touching copper)
    • Ambient exterior temperature (behind panel, in shadow, sheltered from wind)
    • Diffused direct sunlight value (inside sealed enclosure with a frosted window)

Inside the mechanical room:
    • Water tank interior temperature (hanging inside tank, immersed near top of water)
    • Panels loop send temperature (epoxied to brass fitting near exit from tank)
    • Paenls loop return temperature (epoxied to copper return line near tank)
    • Floor loop send temperature (epoxied to brass fitting near exit from tank)
    • Floor loop return temperature (epoxied to brass fitting near tank)

Inside the house:
    • Interior air temperature (at the LCD remote)

Software & Logic Design

In theory, this setup is pretty simple: read temperatures from various sensors and decide when to turn on either of the two independent pumps to collect, store or distribute heat.  But since I’m not a programmer, and reality is always messier than theory, it took some tweaking and adding some extra temp sensors to arrive at the best working version of this system.

The floor loop was definitely the simpler of the two, so I’ll start with that.  Basically the logic looks to see if a) the house needs heat, and b) there’s heat available in the tank; it then turns on the pump (regardless of the state of sunshine or heat in the panels).  It uses software-assigned temperature differentials to trigger the pump, and keep it from triggering too often.  It uses just two sensors: tank temperature and house temperature.  There are copious notes in the sketch explaining this.

The panels loop is more nuanced, with more sophisticated logic to determine when to turn the pump on, when to leave it on, and when to turn it off.  It looks for a minimum sunlight value and higher temperatures in the panels than in the tank; once the pump turns on, it will stay on if those conditions persist, but it will stay on as long as the water returning from the panels is hotter than the water going in.  Again extensive comments in the software on this.

There are some hard limits on the system running; for example, there’s a master ON/OFF switch at the remote which will shut the whole thing down.  There’s also a maximum tank temperature setting, currently 150°F at which point the panels pump will not run under any circumstances.

Logging data is sent to ThingSpeak over wifi.  The most relevant eight sensor and SSR values are stored at ~3 minute intervals for remote analysis and review.

You can find the entire Arduino sketch here on another post.

Sample Data Logging from ThingSpeak

Conclusions & Thoughts

Basically this system works great.  When the sun shines, it works, the house gets warm, and we don’t have to light a fire or think further about it.  It’s a magical kind of heat, and lasts for a long time.  

Initially I didn’t have temperature sensors on the panels loop; adding those, with the condition that ‘once the pump is on, keep it on as long as the temperature returning from the panels is warmer than the water going in’, really smoothed out frequent pump cycling due to clouds passing, a bit of shadow, etc.  

In our case, our house has huge thermal mass with concrete floors and walls; as such, it’s unlikely that we’ll overheat the concrete.  Also, I did not install a temperature sensor in the slab itself, which I had intended to do.  I can see there would have been issues with it; like how close to set it to existing pipes (a bit of a hazard when installing it to be sure), and how the slow change in heat in that mass would affect pump cycling, etc.

Potential problems: if the sun is shining, but the panels pump isn’t running, the panels can get incredibly hot; if the pump suddenly kicks in, the water will boil in the pipes and there’s a tremendous hammering and pressure buildup as the water returns to the tank.  It might be necessary to install some kind of heat diverter at some point, or allow the tank temperature to rise higher—say 180°F; or at least have ThingSpeak send an email when temps rise too high.  By this point, if we have these conditions frequently, it’s probably time to just turn the system off for the season: basically covering up the panels with a big piece of shade cloth to avoid cooking everything.

Hope it’s helpful, send me any questions!



  • BB.
    BB. Super Moderators, Administrators Posts: 33,442 admin
    Thank you very much Mark--And welcome to the forum!

    We used to have more posts on solar/thermal heating--But folks have been pretty quiet over the last few years.

    Thermal systems, over time, seem to have issues with Water leaks, pump leaks, air lock in plumbing, etc... It looks like you kept the plumbing very straight forward--Atmospheric (?) pressure, drain-back / no antifreeze to avoid ice damage.

    Please feel free to update your system experiences here. "Simple" solar thermal systems seem like they are poised for a comeback with the price of fuel these days. Over the years, many systems in my area seem to have been abandoned after a few years--Never to be repaired.

    Using an Arduino and other "relatively off the shelf" hardware and DIY should help do their own repairs/updates as needed.

    Near San Francisco California: 3.5kWatt Grid Tied Solar power system+small backup genset
  • Dave Angelini
    Dave Angelini Solar Expert Posts: 6,746 ✭✭✭✭✭✭
    Abandoned is the history of outdoor thermal water heating. Very few make it a decade and by then the installer is long out of business.

    A good hydronic heating system is super reliable once the outdoor part is removed. Heat pumps or just a 50 gallon water heater are super reliable. Maybe a blend of an outdoor panel source and the indoor heat source as long as it is easy to abandon the outdoor source. New on the market are dual source heat pumps that run a gas loop when it is more efficient.

    I wish I was saying this based on just my own experience. Unfortunately I have seen the bad part too many times with clients. Too Many!
    "we go where power lines don't" Sierra Nevada mountain area

  • backhoesawyer
    backhoesawyer Registered Users Posts: 3
    Well, since I'm the installer, I've got no one to blame if it has a problem; and I know who to call to fix it ;-)

    This system is designed to supplement our primary heat source: our wood stove.  Combined with the passive solar design of the house, I'm looking for maybe ~30% reduction in firewood needed.   So far it's easily doing that.  I did put in a 135k btu Polaris water heater/boiler, so I could tie the system in with gas heat in the future; but I'm not excited about more pumps, heat exchangers, points of failure, cost... I'm trying to keep this as simple as possible.  Of course I can also expand the tank for summertime domestic hot water storage and preheat, but not yet.

    I did expand our grid-tied PV to ~5kw, and I installed an 18k btu mini split for the house, so I think we're easily set for low-impact, high efficiency heating.  We hadn't originally planned on a mini-split, as the house is design with a sub-floor plenum that's charged by a large swamp cooler that we'd run at night in the summertime; but extended periods of wildfire smoke here in the Sierras made that plan unusable at times.

    I've been thinking about building a cedar hottub, and that could also be used as a diversion for excess heat.  I think I'll make a roller for the shade cloth as well, so I can 'reef' the shade and tune the amount of sunlight I'm getting in the spring or fall where overheating might be an issue.

    I'll update this thread if I get around to any of those things!

  • Dave Angelini
    Dave Angelini Solar Expert Posts: 6,746 ✭✭✭✭✭✭
    A good hobby !  We tried for 20 years and the smoke did get to us (9 other things on list) and we headed for the N Nevada desert.

    We would lay a sheet or 2 of OSB to keep from frying pumps and insulation. The shade cloth would also fry if it hit the panels. The power of the sun... 
    "we go where power lines don't" Sierra Nevada mountain area

  • backhoesawyer
    backhoesawyer Registered Users Posts: 3
    Thanks Bill, appreciate the comments.  I actually posted something here 10 years ago on an Arduino-based well and pressure pump controller when we were entirely off-grid; but I'd lost access to that email address, so had to sign up again  :D 

    I've built a lot of unusual stuff over the years (plus plenty of fabrication, plumbing and electrical experience); so while I wasn't worried about being able to do this project, it was surprisingly time consuming for even a 'simple' setup.  Not daunting, just a lot of little pieces that have to be right.  Also, since I'm not a programmer and only have minimal electronics experience, the controller setup, coding, troubleshooting and fine-tuning does take me quite a long time.

    Spring is coming on fast so I'll need to pay attention and not overheat this system, especially with the greenhouse plastic panels.  ThingSpeak has a way to monitor the data and send warnings if values are out of a specified range, so I'll do that soon.  Plus I ordered a big 10x20' 90% shade cloth for when it's time to cover the system up for the summer--or until I build a cedar hottub 'diverter' for the heat!