Objective

Replacing the current spa controller with a custom wifi controlled controller.

Control Board

Verison 1

Schematic

Board Layout

Produced Board


We used an old spa board and removed the micro-controller, dc supply, etc.. This way we can use the power inputs and relays. All relays on the board are 12v.



2022:

  • Moved flow check to GPIO-3 (RX). 
  • Installed board in original Watkins Case
  • Revised Firmware


Problems

  • Having the flow check on GPIO-0 can cause reboot failures if the flow is stuck closed.Moving flow check to RX. Revised in 2020.



2023:

  • Went to add the pump button and discovered a design error. The pump ADC input is floating and should have a pull-down to ground. Removing the 10K from the 3V supply.




New Control Panel

Since I have a custom controller, I decided to add a control panel to the hot tub. The plate was 3D printed with light grey PLA filament. It was then sanded smooth. The center switch controls the lights and the small switch to the left controls the pump. All other controls are set using HomeKit.


Software

Arduino Web User Interface

Homekit/Homebridge Integration

AUTO = Powersave Mode

Temperature 

...
        {
            "accessory": "mqttthing",
            "type": "thermostat",
            "name": "spa",
            "url": "http://192.168.1.50:1883",
            "username": "homebridge",
            "password": "pass",
            "topics":
            {
                "getCurrentTemperature": {
                    "topic": "spa/status",
                    "apply": "return JSON.parse(message).temperature_f;"
                },
                "getTargetTemperature":{
                    "topic": "spa/status",
                    "apply": "return JSON.parse(message).tarTemperature_f;"
                },
                "getTemperatureDisplayUnits":{
                    "topic": "spa/status",
                    "apply": "return 0;"
                },
                "getCurrentHeatingCoolingState":{
                    "topic": "spa/status",
                    "apply": "return JSON.parse(message).state;"
                },
                "getTargetHeatingCoolingState":{
                    "topic": "spa/status",
                    "apply": "return JSON.parse(message).mode;"
                },
                "setTargetTemperature": {
                    "topic": "spa/command",
                    "apply": "return 'setTemp ' + message;"
                },
                "setTargetHeatingCoolingState": {
                    "topic": "spa/command",
                    "apply": "return 'mode ' + message;"
                },
                "setTemperatureDisplayUnits": {
                    "topic": "spa/command",
                    "apply": "return 'tempUnits ' + message;"
                }
            },
            "heatingCoolingStateValues": ["0","1","2","3"],
            "temperatureDisplayUnitsValues": [0,1],
            "minTemperature": 50,
            "maxTemperature": 110
        },
...

Pump

...
        {
            "accessory": "mqttthing",
            "type": "fan",
            "name": "hottub",
            "url": "http://192.168.1.50:1883",
            "username": "homebridge",
            "password": "pass",
            "topics": {
              "getOn": {
                "topic": "spa/status",
                "apply": "return JSON.parse(message).pump > 0 ? true : false;"
              },
              "setOn": {
                "topic": "spa/command",
                "apply": "if(message) return 'pumpOnOff 1'; if(message==false) return 'pumpOnOff 0';"
              },
              "getRotationSpeed": {
                "topic": "spa/status",
                "apply": "return JSON.parse(message).pump;"
              },
              "setRotationSpeed": {
                "topic": "spa/command",
                "apply": "console.log('MESSAGE: ' + message); if(message >50) return 'pumpState 2'; if(message==0) return 'pumpState 0'; return 'pumpState 1';"
              }
            }
        },
...


Future

Hardware Changes

Changes

  • Move Flow sensor to ADC on CH7 in order to free up GPIO-0 or RX/TX.
  • Add light control

Appendix

Pump

Specifications

Waterway Executive 48 2.0 HP pump


Description

2.0HP Waterway Executive 48 Spa Pump, 2 Speed   

Waterway OEM part # 3420820-1A

2.0" intake and 2.0" discharge, (Measures 3" outside to outside)

Voltage

220-240volt

High Speed Details

10.5 Amps high speed (3450 RPM) 

2.5KW
Low Speed Details

2.8 Amps low speed (1725 RPM)

0.67KW


Cost Calculations

Assuming PEAK RATE = $0.21/kwh, OFF-PEAK = $0.13

Assuming pump is running for 9 hours/day @LOW SPEED

Assuming pump is running for  hours/day @HIGH SPEED


SPEEDPower ConsumptionRateCost/hourCost/day
Low Speed0.67kwPEAK$0.14$1.26


OFF-PEAK$0.09$0.81
High Speed2.5kwPEAK$0.52$0.52


OFF-PEAK$0.33$0.33


Assuming

  • PEAK Power Rate
  • 9 hours on LOW
  • 1 hour on HIGH


CostCalculationTotal
Cost/day9*$0.14 + 1*$0.52 = $1.26 + $0.52$1.78
Cost/mothCost/day *30 = $1.78 * 30$53.40

 

Heater

Specifications

NameUniversal Heater Assembly - 4 kW
Description

15" heater manifold (measured from stainless steel flange to flange).

5 options for location of pressure switch (includes threaded plugs).

Moveable bands allow movement of thermal well (for sensors) and studs to connect to pack box.

Includes black split nut unions and white PVC unions (as pictured).

- 2" white PVC slip connections accept 2" pipe (2-3/8" O.D.).

- 2" threaded connections measure 3" O.D. on threads.

SupplierHot Tub Essentials
Voltage240v
Power Consumption4 kw


Cost Calculations

Assuming PEAK RATE = $0.21/kwh, OFF-PEAK = $0.13


Power ConsumptionRateCost/hour
4kwPEAK$0.84

OFF-PEAK$0.52


Assuming 

  • OFF-PEAK Rate
  • 2 hours per day
CostCalculationTotal
Cost/day2 * $0.52$1.04
Cost/monthCost/day *30 = $1.04 * 30$31.20