Introduction: Web Enabled Pool Control - Raspberry Pi
Last year I had a pool built. It was exciting when the pool builder showed me that the pool industry had moved into the technology age and now offered application control over the internet. Being a computer junkie I jumped for joy. Then the quote... $10,000 for pool automation. Let me say that again... $10,000 for pool automation. Of course that was out of the budget... but not a lost desire.
I thought, let me purchase the components and I'll do the work. Researched and looking into the major builders hardware and it alone would have cost me near $5,000. Without install.
So I made it my mission to create my custom solution.
This is a brief overview of my project. To say I'm proud is an understatement! This project has taken months in planning and learning the software side and the labor to build has been at least 60 hours with an overall hardware cost around $1,000.
It will continue to mature. Better interface. More functionality. But for now it is live.
A word of caution, many of these components use 120V and 240V AC and they are dangerous if you don't have the training. That said... here we go.
Step 1: Drafting the Hardware
Step one, plan the project. Identify inputs (what you will monitor - i.e. water temp) and outputs (pumps, valves, LEDs, etc). Create a Pin-Out drawing for reference. (A lesson learned here was the pin-outs changed to enable cleaning wiring in a later phase). Measure the components. Draft them out to determine the size of the box needed.
A quick drawing is worth its weight in gold (use thin paper :-))
Parts List (links are examples):
1) Raspberry Pi: https://www.amazon.com/CanaKit-Raspberry-Complete-...
2) Raspberry Pi Relay Board: https://www.amazon.com/Elegoo-Channel-Optocoupler-...
3) 24V AC Transformer: https://www.amazon.com/Furnace-Control-Transformer...
4) 24V AC Relay: https://www.amazon.com/White-Rodgers-90-340-Replac...
5) Power Strip (note on this: I wanted to use the USB part of this strip to save my power supply, but it caused the Pi to reboot. Assuming it is under powered): https://www.amazon.com/gp/product/B015MF60O2/ref=o...
6) Project Box: https://www.amazon.com/gp/product/B005T57DF6/ref=o...
7) Terminals for easier connections: https://www.amazon.com/gp/product/B00G9IEMJM/ref=o...
8) Valve Actuator (non-name brand - works great. Can set it at any degree of rotation with cam settings: https://www.amazon.com/gp/product/B002ZPJVV2/ref=o...
9) LevelSmart water level (this cost was not in the original writeup - but is working very well!): https://konalabs.com/levelsmart/
10) Pool Components: Installed by pool contractors. All Pentair name brand except valves - they are Jandy, and the waterfalls, they are Brillian Wonders. For details on each component click on the picture and zoom in. The model is on the component.
11) Waterfall controllers - do not purchase the ones in this photo. You need the Brilliant Wonders Smart Sync. Found it for about $139 at American Best Pool Supply...http://www.americanbestpoolsupply.com/smart-sync-l... This allows the colors to sync with the LED colors from Pentair
12) If you need to integrate to the SPA heater I can help with this brand & model. Others would require additional investigation. I plan on improving this design when I get back to working the details of this project.
Step 2: Setting Up the Raspberry Pi
Setting up the webpage was new and a bit cumbersome, but this page followed step-by-step, will lay the ground work no matter how sizable your project.
http://forums.connectedly.com/raspberry-pi-f179/ho...
Don't miss the small line about making it "mobile enabled". It makes the phone operation look more professional.
Right now, I'm going to stay high level, but will come back later to add more detail. As a general rule, enter the name of each step below followed by raspberry pi into google and with some time you will find what you need. The one that took more time to figure out was 2c, so I've added a link to "patch" webiopi to a newer version.
Sub steps:
2a: Setup Static IP
2b: Setup Remote Desktop
2c: Setup Webiopi - there is a patch required - details here: https://www.raspberrypi.org/forums/viewtopic.php?f...
2d: Setup Apache Server - ensure it loads at startup.
2e: Setup WinSCP to transfer files to the Pi from your PC
2f: Setup No-IP DNS (or other free service) - Point web request to your webpage
2g: Setup port forwarding on your router
After you have this working and you can pull up a working page on your web-browser, your creative work is still to go. Referencing the pin-out you created in step two, set your HTML and Python script names to match the pins. Then, with some planning and trial and error, setup your macros to do the work for you.
Step 3: Wiring the Raspberry Pi Relays
Installing Relay boards. Refer to your relay pinouts in step 1. Label the relays... it helps assembly greatly when you have dozens and dozens of wires in a box.
As a design criteria, I chose to have the relay boards switch 24V AC. The small relays (blue boxes in the pictures) do say they are rated for 120V and 240V, however running "main pump current" through relays this small would likely lead to excessive heat and early failure. I used the low level relays to apply 24V to large relays to switch 120V/240V.
Another important consideration. You should design your system to have everything "off" when the power is not applied to the Pi. What this means is should the Pi reboot, purposefully or power outage, you want the relays to disconnect power to all components during boot. Otherwise, you will have random components turning on when the Pi is down... Maybe not a big deal in some cases, but not desirable in any case. In designing with this in mind, all of the HTML and Python code "seems" backwards. High settings = "off", and Low settings = "On".
Watch the video attached and you can see the relays turn on and off (the red light below each blue relay) when I press the button on my smartphone.
Step 4: Designing and Building the System
As I mentioned in the introduction, working with 120V and 240V is no joke. Don't do it unless you take time to educate yourself!
Determine System Voltages: In this case, the pool industry sets that precedence for our project. It is a mix of output voltages.
1) 120v/240v - Pumps, Chlorinator, Heater, Pool Lighting Transformers
2) 24vAC - Pool valve drive motors, Pool Heater Interface Voltage, Pool LEDs
3) 12vDC - Pool waterfall LEDs.
I had a question for a wiring schematic which I wanted to reply too. Although it is possible to put one together the time investment is just too great. The best wording descriptions I can add are as follows:
1) Each component comes with their own wiring diagram. Each component has an input and an output. The inputs and outputs will be one of the 3 voltages above. Each component requires a particular input to create the correct output.
a. Raspberry Pi - 120v AC- power supply
b. Raspberry Pi - 5v DC- fed from Raspberry Pi
c. 24v Transformer - 120v AC to 240v AC input (refer to schematic provided with the transformer for wire color) - 24v AC Output
d. Control Relays - 24v AC Input to relay connectors - any output voltage to the relay connectors
e. Pool Pump (240v AC) - Chlorinator (240v AC) - Heater (240v or 120v AC) - LED Transformer (120v AC) - Waterfall Transformer (120v AC) - SPA Blower (240v or 120v AC - based on model). Switched with the control relays in step D.
In construction I used plexiglass from Lowes. Lots of sawing, drilling, measuring... you get the jest. I had to make two boxes. One for my pump room. One for my greenhouse where all of the lighting and the spa blower is located. I chose a cabinet with door to prevent prying hands from contacting high voltage.
Take your time and remember one lesson, before turning on the main power ALWAYS ohm between the source and ground to ensure there is NO DIRECT SHORT. Miss this step and you may have unexpected fireworks and burned components.
Step 5: Working With Macros
Referencing the top link in Step 2, creating macros with Python and calling them with HTML does multiple clicks with one button. This creates a set of instructions that will set each pin to the desired state. See the attached "pool setup" macro that is in the "python script" file.
Step 6: Wrapping Up... Watch the Videos
This is a fully functional replacement for some very high end consumer products. It was admittedly a massive undertaking, but in the end, fun and rewarding.
By the way - as you may notice in the videos, the time to pull up the webpage is very slow. The cause has been identified as a defective wireless router. It has been replaced and my controls are fast and have been up for over 2 weeks straight without a single minute of downtime!
When I show it to people, it blows them away! I hope it does you as well.
Good luck with your pool controls!

Participated in the
Automation Contest 2016

Participated in the
Beyond the Comfort Zone Contest

Participated in the
Internet of Things Contest 2016
56 Comments
Question 2 years ago on Step 1
Thanks for posting your experience, always helps to have others to compare to. I am curious, what pumps did you use? Do you communicate with the pump, or just have it on a relay for on/off? I would like to control the Pentair IntelliFlo pump and I am looking for anyone who has experience communicating (over rs485 protocol) between the Pi and the Pump.
Answer 2 years ago
Hey I'm looking at doing this with a pentair as well and it has a 4 spot remote input that you can use the RS485 and 24v signals to trigger different speeds built in to it
Reply 2 years ago
Sorry... no cummunications... just relayed on and off.
Question 3 years ago
I'm missing the whole bit about connecting and controlling the 3-way valve actuators. Any help there?
Reply 3 years ago
Stephen, controlling the valve drive motors is pretty straight forward. On the drive motor, there should be a common - wire that connects to one end of the 24vAC transformer. Then there should be 2 wires left. When you apply 24vAC to one it will spin one way. Apply 24vAC to the other it will spin the other way. To do that, you attach the other side of the transformer to the middle of a blue relay. Then one of the Drive wires to the left terminal, the other to the right. When you trigger the relay with the Pi, it will connect the 24vAC transformer to one leg of the drive motor. Hope this helps...
Reply 3 years ago
I have the same three way valves. And there is a three way toggle switch. What position do I leave the toggle at? I understand about the three wires.
Reply 3 years ago
Hi. I hope I can explain this so it makes sense...
The center position is easy. It's off. Use it for maintenance if necessary.
The other two positions will depend on how your system is plumbed. Typically, you'll have pool/spa suction/return. IOW you'll have one valve pointing at pool /suction and the other at pool /return. You want them to be in sync. If they aren't in sync, use the switch on the wayward valve to put it on sync with the other. Same logic applies to using the spa.
Note that this is how it works on my system, which is about as simple as it can be.
Did that help?
Reply 3 years ago
Perfect! I got it. Thanks. As I suspected, I was making it more difficult than need be. A picture truly is worth a thousand words!
Reply 3 years ago
Glad I could help :-)
6 years ago
first off, this is amazing, you have done a fantastic job. Ive been researching pool automation and youre right, the equipment cost alone is well over 2500 bucks and it seems with every feature you want you have to sacrifice 2 other features. its like they nickel and dime you to get everything.
questions:
are you able to set a schedule for the pump? my pump runs 8 hours a day during the winter and as much as 12 hours a day during the summer.
the chlorinator, runs essentially as long as the pool pump is running but only generates chlorine based on the levels it senses. were you able to automate that as well and how are you sensing the levels?
the valve positions, i assume there is some way to tell it what degree to turn the valves? i only have 2 valves on my pool. one for return and one for supply. they are 3 position valves so i can control more return in spa or more return in pool, or a mix, and same for the supply. this is how my waterfall feature works.
heaters, i assume youre sensing water temperature and the heater being preset, youre just using the relays to turn it on or off to reach desired temperature. what about if youre using both solar and say a gas heater. solar valve i imagine would turn on and off on to actuate temperature and if you wanted a quick boost you could turn on the gas.
i want the hot key functions to take over the schedule. so typical schedule mixes the spa and pool for x hours per day, but i come home from work and want to sit in the spa for a bit, so i hit a "hot key" to switch the valves around so only the spa is circulating, measure temperature, then kick heater on to bring water to desired temp.
i feel like the hardware and wiring part is simple, its the coding that i have no idea about. aside from making a few macros in excel and some basic C++ i am no programmer. but i can do HTML, just no idea about web apps. also setting up router, web server, ip addresses, etc, very easy.
at any rate im glad i found this, i think i now have a project i can play with (as if i needed more projects) Good job!
Reply 6 years ago
Thank you... you are definitely asking the next set of questions. Unfortunately I don't have them all solved yet.
Right now my pump is on a mechanical timer. I have looked into the timer function built into Linux on the Pi, but I have not tried to get it working (just as you say I have TOO many projects).
Initially I designed my system to work my chlorinator with its own button, but thought better of it. I have it wired to the main pool pump. As soon as the pump comes on the chlorinator turns on. I don't think mine senses the level - mine has a % on button that I keep on 80%.
I have 3 valves now as well. All 3 are 3 way valves. I am in the process of installing 3 more for better controls between the spa, fountains, pool, and now my solar heaters that I just got finished last weekend. The valve motors have a cam where you can set two different stop positions - CW and CCW. Unfortunately, using just one relay, you can only stop on one of those two positions.
On the heater - I am not sensing the temp yet - I use 24v inputs on the heater and the heater measures the temp and turns on and off. The problem with that is I can't adjust the temp from my phone. I have purchased the sensor and the fitting to pipe it in is on the way as well (if it works). I see on-line tutorials ((http://webiopi.trouch.com/Tutorial_Devices.html) on how to setup the monitoring of the temp, but not how to turn it on and off with the temp - so I have some work to do there.
My new solar system also does not sense the temp... I installed it with its own dedicated pump and set it up so the valve opens when the pump turns on to move the warm water to the pool. My plan is to put it on a timer as well. If I turn the system on, I want it to circulate into the pool every 30 min when the sun is up. I'll be working that in the coming weeks.
Bottom line, is like you I well versed in visual basic - so the coding logic is not difficult - the coding syntax is painful. You can see I have enough python and html to get it working, but not enough to get the timers integrated - yet... I did have a gentleman (https://www.instructables.com/id/Hottub-Pool-Contr... share is controller program files, that are much more sophisticated than mine, which I plan to utilize.
But I am also exploring other options that are just "prettier" - such as OpenHab - as one person suggested. (http://www.makeuseof.com/tag/getting-started-openh...
I'm more that willing to send you my files - in exchange for you sharing if you are able to integrate the timer and temp controls.
Reply 3 years ago
You can use inexpensive 2 1Wire DS18B20 sensors for the solar panel vs the pool heater and a 3rd/4th 1Wire DS18B20 thermal sensor for the heater low / High temp. The 1Wire protocol can go 100 meters.
https://www.linkedin.com/learning/raspberry-pi-gpio-2/program-the-1-wire?u=2130250
Reply 6 years ago
Might I suggest http://home-assistant.io over Openhab I looked at both projects and went with Home Assistant much better and the development is awesome every 2 weeks something new is out! Can you access the PIs gpio pins direct from the browser i.e. http://home-assistant.io ? If so Integrating it into Home Assistant would be a snap! and all your programing of the on off times would be super easy via the direct Home Assistant Automations or AppDaemon. I like your project built something similar but more crude with an Arduino and Xbee but it runs 1 pump with 4 speeds, 3 auxiliary pumps, valves for solar, spill over, water falls, heaters and valves to isolate spa and pool (filter pool while spa is running on a single system), pump chlorinator, and Air temp, pool temp, spa temp, solar temp, and other things.
Nice Project!
Question 3 years ago on Introduction
What pool heater did you interface to? I have a Pentair Ultratemp 110 and will need to remotely turn on/off, read the pool temp, air temp and remotely set the desired temp.
So my system is simpler than yours. I have the following equipment;
Pool Pump (240v)
Pool heater (240v)
Pool light (12v)
Saltwater Chlorine generator (Aquarite 120v)
I plan on using the micro-relays (blue) to 24v (isolation relays) relays to control the 120v/240v circuits.
Answer 3 years ago
Mine is a Pentair MasterTemp 400. I don't have the temp monitoring built. It still uses the keypad for the temp settings and regulation. There is a low voltage interface where you can apply 24v to one connector to select pool, the other for spa settings. I had control board problems after a couple of years. I decided to switch to the high voltage side so I did not interface with the control board directly. The manual said to put the control relay in line with the "firemans switch". In this picture, the fireman's switch is the fuse with the yellow wires, at the bottom right. I wired the 24v relay in-line where the small yellow loop is connected. If you setup the temp and software, this is the config to turn it on and off. When you have the setup running, I would love to get the code from you. Hope this helps!
Question 3 years ago
I have been thinking about doing something very similar (actually much simpler). Can you elaborate on the solar control? I have a thermistor on the roof in one of the pipes and another in the pool return pipe, and a motor actuated valve in place. The trick is not to send water to the solar panels if the pool is already warmer than the roof. Do you have a sample script of how you did temp control? Thanks.!
Answer 3 years ago
John, sorry, I don't. I like your idea. Can you post a pic or parts you used to put the thermistor into the piping?
Reply 3 years ago
This is not the exact thermistor I have, but solar controller kits come with two of them. You drill a hole in the pipe, stick in the probe and put a hose clamp around it. I have replaced the controller about ten times and have decided to make my own. The jandy valve is in place and what I need is a ui for the temp setting and schedule (choosing heating or heating and cooling which would require a second relay for the pump) , and a function that compares the two thermistor values and decides whether to open or close the valve. That and a one time calibration of the thermistors with a thermometer.
https://www.ebay.com/itm/264539887119
Reply 3 years ago
John, I would use 2 DS18B20 temperature sensor (one up top and one down below). The you will have to program a logic sequence that says if the temperature in the pool is higher than the top sensor to shut the valve and stop the pump for the solar panel. You may also want to use the solar panel to cool the pool in the summer if it gets too hot by running it at night if the top sensor is cooler than the pool temperature. I used to do this with a fountain spray using the evaporative cooling effect at night to keep the pool at 88 degrees.
Reply 3 years ago
This looks promising... https://www.instructables.com/id/Raspberry-Pi-Temperature-Sensor/ at least a great start.