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

Do we know the layout of the protocol?
I am thinking of just connecting the serial lines to RPI GPIO and start sniffing

We only really have the 3 posts in this thread by @agittins to go by (and the docs he has dug up).

Stumbled on this too and would like to use a raspberry pi or esp to control the gecko directly not using in the in.touch2 would love to know how people are getting on with it

Anyone else having issues with the new release? 2 out of 3 days in the morning the tub has shown 37.5 degrees and 2 of the jet pumps running. If I restart HA it shows the correct temperature and jets off (which they are).

Both of these times the automations to change the setpoint (to heat during low energy cost tariff) have failed.

The logs after re-start seem fine, but I know I’ll need to check them when this event occurs. Just wondering if there’s something basic I need to do to accommodate the new version.

I’m using hte Gecko integration and it’s working great, thanks so much.

My Spa (bullfrog) has two “lights” – interior, and exterior. The “light” entity in this integration is only the interior lights, seemingly. If I use the Gecko / in.touch app, the two lights are distinct things.

Is this just a limitation of the API from Gecko or is there a tweak I can do to the installation to make this work differently?

I’m putting a pzem004T power sensor and a DHT11 in my hot tub with a Tasmotized 8266. I’m looking to get 5V or more, if necessary, from one of the unused sockets (eg COM Port or Aux IO).
Does anyone know which pins would give me 5V and Gnd?
I could probe with a multimeter but just because it says 5V doesn’t mean its a power line.

did you find any solution for that?

I’m having a in.xm1 controller which does not work with in.touch2 and am therefore looking for a way to use an esp, raspberry or whatever to control the hot tub.

Hi
I have tried to look at the library for the gecko that you have and it runs good with my spa but can you give me some hint on how to just make it possible to set the heater temperature. I build a simple custom made application in python/julia and “just” want to be able to set the heater temperature.

Something like this?

async def increase_temp(self):
        await self.facade.water_heater.async_set_target_temperature(
            self.facade.water_heater.target_temperature + 0.5
        )

Thanks for quick response!
I struggle some with what classes I need to get that function increase_temp/async_set_target_temperature() to work as a “standalone” function what other classes are needed etc to be able to call that set function as simple as possible.
I have the below sample.ini and cui.log

sample.ini
[DEFAULT]
spa_id = SPA54:10:ec:a4:1e:af
spa_addr = 192.168.86.247
spa_name = Rask SPA

cui.log (partly)
2022-10-14 08:48:47,776 geckolib.driver.observable DEBUG PingSensor None changed from None to None
2022-10-14 08:48:47,776 geckolib.driver.observable DEBUG StatusSensor None changed from None to None
2022-10-14 08:48:47,776 cui DEBUG GeckoSpaEvent.RUNNING_PING_RECEIVED : GeckoSpaState.CONNECTED
2022-10-14 08:49:00,429 geckolib.driver.accessor DEBUG Accessor SetpointG @ 1, Word setting value to 297, existing value was 288. Length is 2
2022-10-14 08:49:00,430 geckolib.driver.async_udp_protocol DEBUG Async get started, acquire the lock
2022-10-14 08:49:00,430 geckolib.driver.async_udp_protocol DEBUG Lock acquired
2022-10-14 08:49:00,430 geckolib.driver.async_udp_protocol DEBUG Sending b'<PACKT><SRCCN>IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56</SRCCN><DESCN>SPA54:10:ec:a4:1e:af</DESCN><DATAS>SPACK\xc0\n\x07F??\x00\x01\x01)</DATAS></PACKT>' to ('192.168.86.247', 10022)
2022-10-14 08:49:00,678 geckolib.driver.async_udp_protocol DEBUG Received b'<PACKT><SRCCN>SPA54:10:ec:a4:1e:af</SRCCN><DESCN>IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56</DESCN><DATAS>STATP\x01\x00\x02)\x02</DATAS></PACKT>' from ('192.168.86.247', 10022)
2022-10-14 08:49:00,679 geckolib.driver.async_udp_protocol DEBUG Received b'STATP\x01\x00\x02)\x02' from ('192.168.86.247', 10022, b'SPA54:10:ec:a4:1e:af', b'IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56')
2022-10-14 08:49:00,679 geckolib.driver.async_udp_protocol DEBUG Sending b'<PACKT><SRCCN>IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56</SRCCN><DESCN>SPA54:10:ec:a4:1e:af</DESCN><DATAS>STATQ\x08</DATAS></PACKT>' to ('192.168.86.247', 10022)
2022-10-14 08:49:00,679 geckolib.driver.accessor INFO Value for SetpointG changed from 16.0 to 16.5
2022-10-14 08:49:00,679 geckolib.driver.observable DEBUG GeckoTempStructAccessor 'SetpointG': 16.5 changed from 16.0 to 16.5
2022-10-14 08:49:00,679 geckolib.driver.observable DEBUG GeckoSensor 'SetpointG': 16.5 changed from 16.0 to 16.5
2022-10-14 08:49:00,680 geckolib.driver.observable DEBUG GeckoWaterHeater 'SetpointG': 16.5 changed from 16.0 to 16.5
2022-10-14 08:49:00,680 geckolib.driver.observable DEBUG GeckoAsyncFacade 'SetpointG': 16.5 changed from 16.0 to 16.5
2022-10-14 08:49:00,828 geckolib.driver.async_udp_protocol DEBUG Received b'<PACKT><SRCCN>SPA54:10:ec:a4:1e:af</SRCCN><DESCN>IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56</DESCN><DATAS>PACKS</DATAS></PACKT>' from ('192.168.86.247', 10022)
2022-10-14 08:49:00,828 geckolib.driver.async_udp_protocol DEBUG Received b'PACKS' from ('192.168.86.247', 10022, b'SPA54:10:ec:a4:1e:af', b'IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56')
2022-10-14 08:49:01,022 geckolib.driver.async_udp_protocol DEBUG Received b'<PACKT><SRCCN>SPA54:10:ec:a4:1e:af</SRCCN><DESCN>IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56</DESCN><DATAS>STATP\x01\x01\x14)\x02</DATAS></PACKT>' from ('192.168.86.247', 10022)
2022-10-14 08:49:01,023 geckolib.driver.async_udp_protocol DEBUG Received b'STATP\x01\x01\x14)\x02' from ('192.168.86.247', 10022, b'SPA54:10:ec:a4:1e:af', b'IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56')
2022-10-14 08:49:01,024 geckolib.driver.async_udp_protocol DEBUG Sending b'<PACKT><SRCCN>IOS1eca3a27-9b00-476a-9645-d13f4b1f9b56</SRCCN><DESCN>SPA54:10:ec:a4:1e:af</DESCN><DATAS>STATQ\t</DATAS></PACKT>' to ('192.168.86.247', 10022)
2022-10-14 08:49:01,024 geckolib.driver.accessor INFO Value for RealSetPointG changed from 16.0 to 16.5
2022-10-14 08:49:01,024 geckolib.driver.observable DEBUG GeckoTempStructAccessor 'RealSetPointG': 16.5 changed from 16.0 to 16.5
2022-10-14 08:49:01,024 geckolib.driver.observable DEBUG GeckoSensor 'RealSetPointG': 16.5 changed from 16.0 to 16.5
2022-10-14 08:49:01,024 geckolib.driver.observable DEBUG GeckoWaterHeater 'RealSetPointG': 16.5 changed from 16.0 to 16.5
2022-10-14 08:49:01,024 geckolib.driver.observable DEBUG GeckoAsyncFacade 'RealSetPointG': 16.5 changed from 16.0 to 16.5

Hi, I’m new in this thread. I now own a spa with an in.k1000 control unit, but don’t have the (very expensive!) wifi module. I found this: GitHub - MagnusPer/Balboa-GS510SZ: An Arduino/esp8266 library to direct interface Balboa Series GS (GS510SZ) hot tube control system. which is for a completely different spa module, but it might be helpful for anyone up for the task of reverse engineering the in.touch2? In that case we should probably open a new thread on that. Unfortunately, I am not up for that task, but would certainly love to put some code in a nodemcu, arduino or even a raspberry pi for controlling my spa from Home Assistant. Great work with the Gecko library!

Many of the Gecko accessories are advertised as having RS485 support, so I think it’s pretty clear that’s what is being sent over the CO port. I’d love to have an integration connecting to that directly with ESP instead of the expensive in.touch2 device, but unfortunately I don’t know how to analyze that kind of signal.

https://www.hydrospares.co.uk/hot-tub-spa/control/spa-packs/gecko-aeware-spa-pack-in-yt-8-with-rs485-on-board.htm

What I’d like to know is how to get a co port connector?

What physical plug is it?

How is it wired?

EDIT: after that, this https://freeserialanalyzer.com/

or more usefully Using a Raspberry Pi Pico as a Logic Analyzer with PulseView - Hackster.io

I’d be happy to try some signal analysis if I could figure out how to wire it.

Cables are available like this, but they’re expensive. Gecko - Communication Cable For IN.XE & IN.YE Swim Spa Solution, 8FT - 9920-401316, 5520055

The In.Touch 2 can be bought for around £200, around £100 more than the hardware necessary to interface to it directly, without any of the reverse engineering required to talk to the COM port.

The challenges that Gazoodle has had to interface to the In.Touch2 suggests a very complex system.

Unless you’re a pro tinkerer this doesn’t seem like money well saved give the capital and running costs of hot tub.

I’ve been using the In.Touch2 for a couple of years and it’s saved me a fortune in energy costs by heating the tub during low tariff periods. Far more than it cost, for sure :slight_smile:

4 Likes

Good point, and I came to the same conclusion and bought the in.touch2 module a couple of weeks ago.

Where I live (Norway) it is more like £ 300 online (shipping+taxes) and £ 500 in the local store, but I was able to get it from the local dealer at around 300 so I’m happy.

With the gazoodle integration it has worked flawlessly. With the span in energy prices that we have in south-eastern Norway these days, I really can recommend.

Thanks a bunch for gazoodle!

1 Like

If you look closely to the connector on the board it’s nothing more than a standard pin-header. The rest is only pin-guides, stabilizers and moisture protection.
I managed quite easy to connect a standard flat connector to the port but have not been able to analyze any pins. First mistake was to not measure for ground-pin while having the box open and off.

I also came to the same conclusion and ordered the module for $165 on Amazon. I’m hoping this will save money on heating in low tariff times too.

What do you mean by “flat connector”? Cheers.

I guess the correct word in “pin header”, like one of these

(Was some months ago since i did it so don’t remember exactly if male of female and if it was 2x4 or 2x5 pins)