Jump to content

I hacked my 2018 Hot Springs hot tub so I could control the temperature over the internet


Recommended Posts

Hardware

20And0CgLYYwpuqIywW66f5E3vMnDn155A06-3SnXcUYGbsgbIoFvqhz3YEWv_5IhZsrMIOypAyGzUdhHKzyrOc1ROmY0NvdkF8QGNFjEn7KfbdV7zeEUozbNH-KRSBsNbMn17wu

In the above setup, for each COM port, the Pi can wait for a packet (see below) and then forward that packet on to the other device’s RX. This results in a man in the middle sort of setup. 

 

Nf19m_GHomH35eMlGG2HhJRIbyuQTcvZxMzHXbG7Xm-30KCKDP1n6X0cGIeN7CRWq3GNpiaopXneUSRyTjB8oI4qgj3DfarPf27RpS1G-FmsOGjqDTGXbL0CHl2k4z3vbgg9jkGl

Example parts

Description

Mfg

Part number

Plugs into IQ2020 Control Head Port (8 Pin)

TE

3-644540-8

Receives from Touch Panel (8 Pin)

TE

3-647000-8

USB to RS422 adapter

DTECH

 

12 to 5V supply for Raspberry Pi

Weewooday

 

 

Pinout

 

Pin

Color

Touch Panel

IQ2020

1

Blue

Rx -

Tx-

2

Green

12V In

12V Out

3

Yellow

Tx +

Rx+

4

Red

Ground

Ground

5

Brown

Tx -

Rx-

6

White

Rx +

Rx+

7

NC

   

8

NC

   

 

Packet

 

Everything is Big Endian (Network order)

 

Message

Bytes

Notes

Start

3

Can be XMS (from touch panel) or XSM (from IQ2020)

Message Length

2

Doesn’t include start, length, or checksum bytes

Message

N

 

Checksum

2

Simple sum of all prior bytes.

 

Example full message (Main Screen Acknowledged): 58534D 0002 0800 0102

Important Messages

From touch panel

States

The touch panel sends these commands many times per second 

Touch Panel Mode

Hex

Screen Off

6B 0000 0000 0100 0000 0000 

Main Screen

6B 0000 0000 0100 0100 0000

Temperature Adjust Screen

6B 0300 0000 0100 0103 0000

Temp. Down Button Pressed

6B 0300 0008 0100 0103 0000

Temp. Up Button Pressed

6B 0300 0004 0100 0103 0000

 

Commands

 

Command

Msg Hex

Description

More

4B 

When you enter a new mode, the IQ2020 will give the touch panel info that it needs to show its next screen. The IQ2020 spreads this info over a few packets. The touch panel asks for “more” until the IQ2020 sends a “I don’t have more info” packet” and then should resume sending one of the state packets above


 

From IQ2020

The green hex below is the temperature setpoint. The temperature is encoded as ASCII (eg 0x3831 => 81 F)

 

Message

Message Hex 

Main Screen Acknowledged

08 00

Temperature Screen Acknowledged

08 03

Setpoint (going into temp)

00 0000 0A00 4005 040A 1502 0003 3831 3A00

Setpoint (after setpoint adjust)

01 0005 1503 3832 3A00 


 

Communication Capture

The doc below is a capture of the communication during normal operation through the touch screen. In this capture, the touch screen starts off, then we go into the main screen, then we go to the temperature adjust screen, then we lower the temperature one degree, then we exit the temperature screen. I stop recording for a few minutes so the logs won’t be too long. The touch screen then goes back off. 

 

https://docs.google.com/spreadsheets/d/1FPIu6mpBpGdMX-Mh76JIv4aA3WfhkPuU5-MZ9X7wuec/edit?usp=sharing

 

Full sequence to adjust temperature setpoint

  • Verify we are in “Screen Off” mode

  • Replace all “Screen Off” commands from touch screen with “Main Screen” commands

  • Wait until IQ2020 acknowledges that we’ve entered “Main Screen”

  • Replace all “Screen Off” commands with “Temperature Screen” commands

  • Grab setpoint from IQ2020

  • Wait for IQ2020 to acknowledge that we’re in “Temperature Screen” mode

  • Replace all “Screen Off” commands with “Temp. Up/Down” commands

  • Wait for setpoint to reach your new target setpoint

  • Go to main screen

  • Go to “screen off” (stop replacing “screen off” commands)

iPhone interface

 

Option 1: https://www.npmjs.com/package/homebridge-web-thermostat

Option 2: https://www.npmjs.com/package/homebridge-thermostat

 

Temperature Measurement

Watkins uses a 10kOhm thermistor to bring in the temperature. I connected to that thermistor (top right port) with a MAX31865. I used the calibration curves posted on the web (example) to convert from resistance to temperature

 

  • Like 1
  • Thanks 2
Link to comment
Share on other sites

  • 1 month later...

Hi,

After learning some C programming my 1st version of Hawk Control.
When the program has started, the data traffic between the keyboard and the controller is output on the console.
The set button can be locked by means of a switch.
Since the keyboard and control are constantly exchanging the same data, there is also a switch that suppresses duplicate data.
What is still missing is a web interface to call up and control the data on the mobile device.

You can find the c program here.

https://github.com/SvenPausH/Hotspring-Hawk


Remember I have never programmed with c before.
The program code can certainly be made more beautiful.

If anyone feels like it, they are welcome to work on the project.

 

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...