Hot Tub / Pool Controller Web Interface


Introduction: Hot Tub / Pool Controller Web Interface

The ulimate webbased hottub / pool controller.

Step 1: Step 1: Intro

About 2 years ago i bought myself a raspberry pi and just playing around with it.. After a while i decided to make something useful instead of playing around with it.. So i decided to make a hottub controller with it. I'am running the controller over a year now and decided to share it with you :)

For all the functions see:

So in this tutorial we will see how to make a hottob / pool controller.

The controller is written in PHP with GPIO control

The following packages should be installed.
- Apache 2
- PHP5
- MySQL Database
- PhpMyAdmin
- GPIO Control

In case you don't want to install everything. You can download and install my Image / OS.
You can download my raspbian image HERE
--> Automatic Control does not work in the ready to use image. Please download files in the link below. Working on a new ready to use image.

Version 1.1 is available -> installed on raspbian jessie lite and updated a few bugs.
Download the image 1.1 HERE

Needed Hardware:
- Raspberry PI
- SD card ( 8 GB )
- 5V 4 Channel Relay Module ( or 8 channel is you wish )
- DS18B20 Temperature Sensors - Waterproof.
- Jumper Wires.

Step 2: STEP 2: Hardware Setup

Connect the DS18B20 sensors
Red Wire --> To 3.3v
Black Wire--> GND
Grew Wire (Data) --> GPIO pin 4
Also see Attachment

Contact the relai block as follow:
5v to 5v

See Attachment PDF for the right pin no. (or board overview, blue circles)

Pin 1 (relay) to WiringPi Pin 8
Pin 2 (relay) to WiringPi Pin 9
Pin 3 (relay) to WiringPi Pin 2
Pin 4 (relay) to WiringPi Pin 3

Be Aware ! The relay can switch a maximum of 10A

Step 3: Steps 3: Installing OS

First we will install a new fresh image of raspian.

I installed RASPBIAN JESSIE LITE, because we don't need all other stuff like desktop environment. But all other Raspian versions should be fine as well.

Flash your selected image with Win32DiskManager to the SD Card

Step 4: STEP 4: Install Packages

Download the program "putty" and "advanced port scanner" (both free software).

Scan with "advanced port scanner" and find your raspberry pi IP adress.

Go to Putty insert the IP of the raspberry and login with user "Pi" and password "raspberry".

First we need to expend filesysteem

sudo raspi-config 

Select expend file system en finish installation. The raspberry will restart now.

Wait a minute and connect again with putty to the raspberry and login.

Second we will update the PI

  sudo apt-get update 


 sudo apt-get upgrade 

Type "Y" to update (and upgrade the pi as necessary)

Install Apache2 with the following command:

sudo apt-get install apache2 

Install PHP5

sudo apt-get install php5 libapache2-mod-php5 -y 

Install MySQL

 sudo apt-get install mysql-server 

During installing mysql-server will ask for a password. This is to connect to the mysql server.. choose a password anything you like.. But don't forget this password. Write it down somewhere!! ( i choose "raspberry" )

Install PhpMyAdmin

sudo apt-get install phpmyadmin

Configure Apache to work with PhpMyAdmin

sudo nano /etc/apache2/apache2.conf 

Add the following line at the end of apache2.conf:
Include /etc/phpmyadmin/apache.conf
Control + X to save, type "Y" to overwrite.
Also See:

Install GPIO

sudo apt-get install git-core 
git clone git://

cd wiringPi


To get the DS18B20 sensors working use the follow commands:


 sudo nano /boot/config.txt

Add the following line


Control + X to save, type "Y" to overwrite.

sudo nano /etc/modules 

Add these 2 lines at the and:

Control + X to save, type "Y" to overwrite.

run the gpio command to check the installation:

gpio -v 

gpio readall

Yeah finally all packages installed :)

Step 5: Step 5: Setting Up Scripts...

Before we can upload the files to the raspberry we need to change a few settings

Add the pi user to the group
type: sudo gpasswd -a pi www-data
Change the group for the directory and allow the pi user to update the directory
type: sudo chown www-data:www-data /var/www
type: sudo chmod 775 /var/www

I've you have downloaded debian jessie you need to change the root directory of apache.
type: sudo nano /etc/apache2/sites-available/000-default.conf
Change /var/www/html to /var/www CTRL + X to save "Y" to overwrite.

To have access to control GPIO pins with a webpage.

Type: sudo visudo
Add this line to the end of the file:

Press CTRL + X to save and exit.

Download all the files from here

Download the program Filezilla Client (or other FTP program )
Connect to you're raspberry pi with following details:
SFTP://IpOfYourPi ( port 22 )
User: pi
Password: raspberry

Upload the files to /var/www ( - Just type /var/www in the right screen. )

In case you have another mysql password then "raspberry" you need to change to php configuration of the controller:
Edit the config.php file.
Change mysql_pass to the right password you have set during mysql-server installation.

Next step is to import the SQL file in the database.

Go to http://IP-Raspberry/phpmyadmin
Login with root and you're password (raspberry default)
Add a database with the name "controller"

Click on controller in the left area of the page and then click Import.
Select controller.sql from all controller files and upload by pressing start.

Setting up Cronjobs
type: crontab -e
Add this text to the end of the file.

* * * * * wget -q -O - "" 1,11,21,31,41,51 * * * * wget -q -O - ""

CTRL + X to save. Done !

Step 6: Step 6: Controller Page

Go to: http://raspberryIP

Welcome to the login screen :)..

Login with username: admin password: 123456

There is also a tablet page. special writtin for my tablet :).
See http://raspberryIP/tablet

4 People Made This Project!


  • Water Contest

    Water Contest
  • Oil Contest

    Oil Contest
  • Creative Misuse Contest

    Creative Misuse Contest

60 Discussions

I had the same problem. Put a symbolic link to /etc/phpmyadmin in /var/www or /var/www/html depending on where your document root is (I put it in both places).

Then that host name didn't work for me. Mine is raspberrypi. (it's set in /etc/hostname)

You can also just use the IP address (type /sbin/ifconfig and look for the IP address)


Question 23 days ago

Hi Rickie, great project, thanks!

I selected the default OS when I brought up my raspberry from a CanoKit. It's a variety of Debian with the graphical UI included.

I installed everything per your instructions, but ran into these issues:

1. The hostname seems to be "raspberrypi", and seems to be defined in /etc/hostname and /etc/hosts. In a few places you ask to go to http://PI-Raspberry or http://PI-Raspberry or http://raspberryIP. Only http://raspberrypi works for me.

2. When I go to http://raspberrypi, I only get a listing of the directory. When I go to http://raspberrypi/html, I just get the default apache2 Debian Default Page.

Where should the main page for the Controller be?




4 weeks ago

Hi, I'm trying to use your project as a basis for my own hot tub project. I bought one of those inflatable hot tubs but it was having issues with it's controller so I'm trying to build a controller with the Pi.

I'm working through your steps but I can't seem to get the files to copy over to /var/www as it says I don't have write permissions so I'm trying to figure that.

I'm going to have to add/modify some things though, the pump unit for the inflatable tub already has several sensors in it and the temp sensors are analog, so I have an ADS1115 ADC which I will have to get working with your code. Also there are 2 flow sensors that are just magnetic reed switches but I'd like to implement those as a fail safe for the heater as well.

So I'm just curious if you have any advice on adding the ADC stuff and what not? There are 2 temp sensors on the unit, an intake water temp and an out water temp.


Question 4 weeks ago

@Rickiewickie how do I and change the temperature to Fahrenheit instead of Celsius and thx agian.

The putty and advanced port scan should be downloaded onto a separate computer correct? This also has to be done before setting up the pi also?

On the install PHP5 step I am getting a message that says the package is not available but is referred to by another package. What might that be

4 more answers

A few more points of interest....

1. In the explanation above it states that mysql will prompt you to set a password during install. That's not true anymore. After the install of mysql is done, use this command "sudo mysql_secure_installation" Now just agree to all the questions and set your password to "raspberry" or whatever.

2. You wont have permission to create the directories in FileZilla if you type "type: sudo chmod 775 /var/www" Instead use "sudo chmod -R 777 /var/www"

Php5 is no longer compatible with Raspian... use Php 7 instead

"apt-get install php7.0 libapache2-mod-php7.0"

What version of Raspbian did you use? The tutorial is based on Raspbian Wheezy / Jessie.

I am trying to run off the image you have to download now(ver 1.1). It is asking for a domoticz login. What should that be? I tried to use admin and Pi as the logins but when I try to type in the password nothing can be writen.

3 more answers

Username: admin
Password: 123456

Please let me know if this works.

That did not work. I can input the username but the password doesn't display when I try to type that in.


4 months ago


Ok, got your code all working with MQTT! After considerable head scratching, this is what I did:

Configured a GPIO "listener" to fire off the appropriate MQTT topic whenever one of the pins receives changed. The end result is I didn't even have to alter your code at all to get the pump/heater/lights etc working!

The only thing I had to change in your code was the location of the sensor output files. Since I disabled the 1-wire stuff and i'm pulling temp info via mqtt into a different logging file.


I'm noticing odd behavior. My pump switch seems to be kicking ON automatically even when I've pressed OFF in manual control main screen. Any idea why it would be doing this? I can view the WiringPi readall, and see that it's getting changed.. Also another clue that it is coming from the Pi is the frequency.. Always less than a minute, but sometimes 50sec, sometimes 10 seconds after I turn it off. Is there a loop in the cron or code somewhere that I need to look at?

Thanks again!

4 replies

The "odd behavior" has most likely something to do with the settings, like automatic pump control/frost protection.
To test this, set "Cleaning Mode" to "On" , this disables all the automatic functionality. So when the when this behavior is is gone then you need to know it is something in the settings (Tab: Configuration Sub: Controller)

The interval of switching has something to do with the cronjob that will run every minute and check all the settings / time schedules etc.

Hope this answer is sufficient enough :)

Hey I've got another question. I'd like to see what I can do with the $set_temp_dev function. I can't seem to find it anywhere?

Oh.. and here's what I did to your nice clean work :)



I emailed you directly from the About page with some bugs and suggestions I've found. I *think* I've fixed up the automatic control portion so that it behaves better. If you didn't get the email, let me know here and we'll figure out how to chat about it.. If you'd like :)

thanks, i'll check it out.. though I messed with ALOT on this pi. It's pretty messy right now. I wouldn't be surprised if it was my fault.

If you want the changes I made for a later date, let me know and I can go over it with you. You could also integrate it into your other home automation or for additional MQTT listening devices for single interface control when using your tub. You can add as many MQTT topics as you have unused pins.