Gecko in.touch2 integration (Spa wireless remote control module)

@RhinoRich,

Curious for your input here. Thank you for providing your scripts. As a newbie, it was very helpful in helping me conceptualize what I’m doing. I used some of your language and combined it with some code from my utility’s real time pricing sensor.

This is what I ended up with:

- alias: hot tub on
  trigger:
  - platform: numeric_state
    entity_id:
    - sensor.comed_5_minute_price
    below: 1.5
  condition: []
  action:
  - service: climate.set_temperature
    target:
      entity_id: climate.cedar_tub_heater
    data:
      temperature: 104
  - service: notify.mobile_app_scotts_iphone
    data:
      message: ComEd prices are below 1.5 cents, Hot Tub is set to 104F.
      title: Hot Tub Heater on Cheap Electricity!
  mode: single

- alias: hot tub off
  trigger:
  - platform: numeric_state
    entity_id:
    - sensor.comed_5_minute_price
    above: 3
  condition: []
  action:
  - service: climate.set_temperature
    target:
      entity_id: climate.cedar_tub_heater
    data:
      temperature: 98
  - service: notify.mobile_app_scotts_iphone
    data:
      message: ComEd prices are above 3 cents, Hot Tub is set to 98F.
      title: Hot Tub Heater off Expensive Electricity!
  mode: single

So basically I have a “cheap energy, heat to 104F” command and a “expensive energy, turn down setpoint to 98F” command.

But because 5-minute pricing is so variable from the utility, this is getting triggered A LOT. I’m worried the control board won’t like how often its being told to change its set point, turn on heater, turn off heater, etc.

Any thoughts on how to further optimize?

Thanks
Scott

I have a similar thing with a heat pump I use in my garden pub. It has a thermostat that only goes down to 16. When not in use it runs in a frost-prevention mode I created to prevent the fridge, etc., from becoming inoperable. It works by using a smart switch to fire the heat pump if the temperature gets low.

Heat pumps need to run for a while to be effective, so I didn’t want it to switch on and off too frequently. Same with the hot tub. It has to fire the circulation pump and then stabilise temperature measurement before powering the heater. It will then take at least 30 minutes to have any effect on the water temperature.

My heat pump automation uses a helper called ‘Timer’. The ‘On’ routine sets Timer to 1, waits 2 hours and sets Timer to 0. The ‘Off’ routine checks if the temperature is above the setpoint but has a condition to check that Timer is set to 0.

One thing I learned about our hot tub, which has a 1650 litre capacity, is that it’s not efficient to run the heater for short periods. I studied the effect of continuous heating versus heating to max and ‘coasting’ over 2 cold months 3 years ago. My theory is that a lot of energy is consumed bringing the heater up to temperature. Once it reaches the point where it’s transferring its energy to the water, it’s at its most efficient.

Hope this helps.

2 Likes

by ‘continuous heating’ what I mean is running it with a fixed setpoint. Sorry for the confusion. In this mode, it would usually heat for about 45 minutes every 3 hours. Not efficient compared to running it for 4 hours overnight and coasting down.

1 Like

Our tub is super insulated, so I’m guessing your findings would be even more effective for us. I don’t have a lot of data yet, but once up to temperature, we only lose 1-2F across the entire day. The tub is still new to us, and we haven’t hit our typical cold Chicago weather yet, so I’m curious to see how it performs during much colder weather.

I will explore adding a timer condition to the routine!

I think I would specifically want a condition on the ON routine. If tub is heating and elec prices skyrocket, I do want the tub to turn off in those instances. That said, I do not necessarily want it to turn back on again 5 minutes later just because pricing came down, then maybe off again 10 minutes after that.

I’m going to have to think this through in a little more detail. I may revert back to what you have originally designed, which is an ON schedule at night with a pricing spike trigger. Or perhaps an ON trigger with a condition for only if hot tub temp is below a certain threshold, i.e. I do not need the hot tub to bounce between set points if tub is already at 102-103F.

Thanks again!
Scott

1 Like

Anyone found a way set/sync the tub’s clock without using the keypad on the tub itself?

Mine still hasn’t adjusted for the end of daylight savings time and has gained about 9 minutes. I don’t think I’ve had to do anything in past years to get it to adjust.

Probably related: Has anyone had problems with the gecko/in.touch communicating with Gecko’s servers?

Mine has a solid green light, which is listed as no internet access. I can see UDP packets for port 10022 going through the firewall to intouch.geckoal.com 13.68.99.102. But it looks like that host is returning an ICMP port unreachable.

The data in the packet from the gecko appears to be <PINGS>1</PINGS> but might be being sent to the wrong destination. The Home Assistant Gecko integration still works fine. Also the in.touch app on iOS still works fine on the local network.

I’ve tried power cycling the network side Gecko in.touch2 unit. Doesn’t seem to help. I haven’t tried powercycling the tub or trying to do a hard reset of the network unit (if there is a reset button).

EDIT/Update - digging into this a little more, the ICMP Port Unreachable response from intouch.geckoal.com doesn’t seem to ever make it back to the gecko/intouch unit. For some reason it looks like the gecko server is indicating in the ICMP response that the host response is coming from 10.0.2.4 rather than intouch.geckoal.com 13.68.99.102. The IP header on the ICMP packet has the right source/dest IP addresses, but the IP header inside of the ICMP response shows the src address as 10.0.2.4 instead of 13.68.99.102. So it looks like my router drops that because it doesn’t match an established connection.

(To be clear I’m not using 10.0.0.0/8 addressing anywhere internally. I think this might be the internal nat address for the gecko server, which isn’t getting corrected on the way back out.)

1 Like

In case this might help anyone else: I was able to work around my tub’s gecko in.touch2 unit not talking to the gecko servers and get the LED back to solid blue.

As mentioned above, the tub’s gecko unit was looking up the A record for intouch.geckoal.com. Contacting that server would result in an ICMP port unreachable that never made it back, possibly because the NAT wasn’t done correctly on the server side.

I was able to work around that by adding an entry to my router to return the IP address for intouch2.geckoal.com.

I know that’s a bit of a hack. Maybe the root cause is that my gecko unit missed an update. Maybe there is something misconfigured on the gecko cloud server end.

I did capture the request/response packets for doing a time sync to the Gecko server. At some point I need to see if by any chance the gecko unit will accept an unsolicited time response.

1 Like

I made a plugin to Home Assistant about a year ago to boost house heating based on Nordpool prices, GitHub - dala318/nordpool_planner: nordpool_planner custom component for Home Assistant

1 Like

I have an extra charge on my electricity bill, when I have a high peak consumption. I noticed that the Gecko intouch2 starts the circulation pump at random moments, which causes peak consumption when cooking, using the oven etc.
Is it possible to switch off the circulation pump with this integration?

I could then measure the power consumption and switch off the circulation pump if necessary.

I don’t think there’s a way to do that. The controller needs to run the circulation pump for a minute to measure the temperature periodically.

The connection to my spa has become unavailable. Unfortunately, I am away for the week to be able to reset the wifi modules (turn off/on). I can VPN to my router still see the itouch2 module and ping it as well. What I don’t understand is that my gecko integration will not start either nor the gecko app can see the spa. Typically if the connection becomes unavailable, the gecko integration is still available and I can press the “reconnect” button. Is there another way around to reset the wifi module remotely (web interface perhaps)?

Anyone know whether this integration works without an internet connection?

It does not. Everything is actioned via Gecko’s server.

In fact, I had to open an inbound port on my router to the device. Hated doing it. Very old-school; the house end of the two radio devices connects to my Ethernet at 10 Mbps.

I know there was some discussion a while back about using the wiring connection on spa main board that is used by inTouch2, to go to some ESP32 or whatever device. Sounds like the connection might be RS485. Not sure how obtuse the protocol might be over that connection. Definitely wishing for such device to imitate inTouch2 completely locally, but not equipped to do it myself

I think the rs485 was established right back at the start of the thread. Gecko in.touch2 integration (Spa wireless remote control module) - #8 by marcoboutch

But yes, I am not prepared to potentially break mine. No WAF in that.

I dunno. Mine has never reached WAF. Hasn’t ever been reliable enough to let it loose to family members to depend on it. Still very random as to when the integration will come online or not. Sometimes weeks with no conn Then month or more with solid conn., or very few dropouts. It’s been frustrating.

So is your problem with connecting to the server, or the connection between the spa and the IP network.

I have been using this integration for about a year with the Intouch 2 blocked from internet access and it works correctly. The Android app also works correctly providing you are connected to the same network ie you are at home or connected to home by a VPN if away.

@IanQ - what do you do about setting time with internet access blocked? Is it sufficient to set it via the spa’s control panel?

See my post above – my gecko unit unintentionally wound up not communicating with their servers, so no time updates. I didn’t wind up going that far but I think I could have cobbled together something that would send the right packets to the gecko unit to keep it somewhat sync’d and deal with daylight savings time changes.

I’m not sure about provisioning, or firmware upgrades, but the basic communication doesn’t appear to be encrypted or authenticated. So If it were needed one could put something together to emulate the gecko servers.

@exciton - Regarding whether the integration works without an internet connection, as others have indicated the communication between Home Assistant and the gecko module is local. Things ran mostly fine for me (other than time) when my gecko unit couldn’t reach their servers. However, I suspect, but have not tested in any way, that access to the Gecko servers is likely needed during initial setup. The integration used to require downloading a file spapackstruct.xml that gives the device configuration of each model of spa supported. I think the integration does something different now. If it isn’t hardcoded some internet access will likely be required during set up.

Hope this helps.

@jigsaw - This sounds more like a name or address resolution issue. I don’t recall at this point how gecko devices are discovered on the local network for mobile apps (mDNS? broadcast?) or how it is configured in the Hass integration (mine is shut down for winter, so the integration is disabled). I’m assuming you’ve assigned a static IP and when you ping it, you are still using the static IP to verify it hasn’t changed?

When this happens, I would try exec’ing a shell into the Home Assistant container and checking the connectivity to the gecko lan module from there so you’ll be seeing what the integration sees.

Also there is a low level CLI utility GeckoShell that is part of Geckolib that was used during early development and testing. See GitHub - gazoodle/geckolib: Library to interface with Gecko Alliance spa pack systems via in.touch2 module. You can run the discovery process from that which might help you narrow things down.