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

I do a daily service call to reconnect. That seems to have fixed my issue.

alias: Hot tub reconnect
description: ""
trigger:
  - platform: time
    at: "00:00:00"
condition: []
action:
  - service: button.press
    data: {}
    target:
      entity_id: button.ducky_tub_reconnect
mode: single

I have a gecko in touch installed at a remote destination (vacation house)

Is there a cloud app/integration for gecko?
I don’t have Home Assistant over there

If you have the in.touch 2 module on a on a router there already just use the Gecko app as it’s cloud based. You could automate with linked voice assistants.

Thanks, yes I use the app but it has no statistics, that’s why I want to connect it to HA

I was trying to do he same thing with the reconnect command, but I found it to be incredibly unreliable in our case.

(Sorry for slow reply, just noticed this)

Sooooo I broke down and actually bought ANOTHER in.touch2, and of course – that one works just fine, right out of the box. So as I suspected, there was something wrong with the first one I got years ago. I’m going to call gecko and see if they’ll send me a replacement or something, but I did install the gazoodle integration and it Just Works, which is pretty awesome! (Except for the ‘sensors’, but I think maybe my unit doesn’t have those / report them; I’ll look into it more eventually, as it’d be nice to know if the ozone generator is on, etc.).

Anyhow, here’s some decent (not perfectly sharp but hopefully helpful) photos of the transmitter and receiver cracked open (this is my older one that doesn’t fully work – but I doubt there’s anything visibly wrong/different): https://photos.app.goo.gl/YsqsdVKBqKjf2Lc19

2 Likes

Those UART pins on both look tempting!

Can anyone confirm what their adapter negotiates to on their network? Mine does 10/Half and it’s really become an issue since multigig switches don’t want to negotiate that low. Hoping someone is seeing better negotiations than that.

That’s awesome, thanks for taking the time to do that!

That blue crud on the plug and socket in the spa-side unit looks a bit sus - do you think it’s a sort of loktite applied deliberately? If not it could be corrosion from water ingress. It looks like there’s a bit on the second pin, plugging/unplugging that connector a few times might solve the issue if that’s the case.

The area I’d really like a good look at is on the spa-side unit, around the corner where the plug goes - it’s a bit blurry to make out the traces and component values, and the angle means the socket on the board obscures some of the traces. If you have time/motivation to take some more shots I’d really appreciate it, but totally understand if you need to move on with your life! :smiley:

Would also be good to get a peek under that sticker to know exactly which mcu they’re using.

From what you’ve given I think it’s likely we’re talking I2C for the comms - rs485 is possible (actually so is canbus but I think it’s unlikely) - if we get the partnumber of the mcu (U2) I can check the specs to see what peripherals it has on-board, and with a good look at the PCB make some guesses at what the pinout is, which will help narrow down options given the peripherals on the mcu may (or may not) be limited to specific pins.

Given there don’t appear to be any comms chips there for talking to the spa, it will be a protocol that the particular mcu there can talk natively.
From the connector we can see that pin8 (black?) is ground.
The “6R8” inductor L1 implies that the chip next to it is a switching regulator that probably creates the 3.3v supply - but there’s another chip that looks very similar but doesn’t have an inductor next to it so I might be off the mark there.

If you have time to grab some more photos around that area I might be able to glean a bit more, also the part number of the main chip would be awesome - but if you are looking at getting a warranty claim sorted maybe don’t go pulling stickers off :smiley:

(oh and for anyone interested, the red Microchip module is a low-power 915MHz transceiver module for the actual radio link between the units).

Yes, and the programming port might support debugging depending on the chip. It looks like the mcu has an eeprom next to it so it might be possible to extract the firmware if it’s not stored on the mcu.

Re ethernet, it looks like the MAC is integrated in the mcu, and they’re using a Microchip chip, going by the logo peeking out under the sticker. Using their parametric search there don’t seem to be any of their products that have 64-pin packages and only support 10-base ethernet, so it looks like it probably should be 10/100 at least - but that’s a shaky tower of assumptions I’m working with there :slight_smile:

The fact that pins 3&4 are wired on the RJ45 connector implies that it supports gigabit, which is a bit surprising. Have you tried using a crossover cable? Maybe the firmware doesn’t handle autonegotiation very well, so a crossover cable might give different results.

1 Like

Just joined the community, In my case i want to increase the spa temperature when the Amber pricing is low and then bring it down when the price is high so it does not keep heating it or should i look at something that will switch off the SPA completely and switch it on when the price is relatively low for me to heat the spa … Thoughts on how everyone is achieving this. Thanks.

Welcome.

This would be pretty easy to achieve just by changing the spa setpoint. I have mine change according to an automation that uses time and temperature helpers that define a daily profile. No reason why this wouldn’t work according to status changes, e.g. setpoint to 40C when pricing is low and to 36C when it’s high. In the summer, our tub only drops 2 or 2.5 degrees between 4:30 am and 0:30 am which is the period outside our low tariff.

Great and how do you manage Winter months when we shutdown the spa completely

That’s probably when we use it most. Ours is always on year round. No action needed on HA, although I’d probably disable the component and associated automations to avoid filling up the error log.

Would you mind sharing those three dashboards? They look really good! My inexperienced self can’t get it to look anything like that. In particular I’m wondering about the graph, what you used to make it?

Blockquote[quote=“RhinoRich, post:148, topic:150764, full:true”]
Welcome.

This would be pretty easy to achieve just by changing the spa setpoint. I have mine change according to an automation that uses time and temperature helpers that define a daily profile. No reason why this wouldn’t work according to status changes, e.g. setpoint to 40C when pricing is low and to 36C when it’s high. In the summer, our tub only drops 2 or 2.5 degrees between 4:30 am and 0:30 am which is the period outside our low tariff.


[/quote]

Would you mind sharing those three dashboards? They look really good! My inexperienced self can’t get it to look anything like that. In particular I’m wondering about the graph, what you used to make it?

It’s a custom card called mini-graph-card.

  - title: TUB XTRAS
    path: ''
    icon: mdi:hot-tub
    badges: []
    cards:
      - type: picture-elements
        elements:
          - type: state-label
            entity: sensor.spa_temperature
            style:
              top: 50%
              left: 48%
              transform: translate(-50%,-50%) scale(2,2)
              opacity: 65%
              color: cyan
              prefix: Temperature
          - type: custom:button-card
            entity: fan.ducky_tub_pump_1
            style:
              transform: translate(-50%, -50%) scale(.8,.8)
              left: 9%
              top: 63%
              opacity: 70%
            size: 60px
            show_name: false
            action: toggle
            tap_action:
              action: call-service
              service: fan.set_preset_mode
              service_data:
                entity_id: fan.ducky_tub_pump_1
                preset_mode: |
                  [[[
                   if (entity.state == 'off')
                    return 'HI';
                   else
                    return 'OFF';
                  ]]]
          - type: custom:button-card
            entity: fan.ducky_tub_pump_2
            style:
              transform: translate(-50%, -50%) scale(.8,.8)
              left: 25%
              top: 36%
              opacity: 70%
            size: 60px
            show_name: false
            action: toggle
            tap_action:
              action: call-service
              service: fan.set_preset_mode
              service_data:
                entity_id: fan.ducky_tub_pump_2
                preset_mode: |
                  [[[
                   if (entity.state == 'off')
                    return 'HI';
                   else
                    return 'OFF';
                  ]]]
          - type: custom:button-card
            entity: fan.ducky_tub_pump_3
            style:
              transform: translate(-50%, -50%) scale(.8,.8)
              left: 85%
              top: 44%
              opacity: 70%
            size: 60px
            show_name: false
            action: toggle
            tap_action:
              action: call-service
              service: fan.set_preset_mode
              service_data:
                entity_id: fan.ducky_tub_pump_3
                preset_mode: |
                  [[[
                   if (entity.state == 'off')
                    return 'HI';
                   else
                    return 'OFF';
                  ]]]
          - type: state-label
            entity: climate.ducky_tub_heater
            attribute: temperature
            name: Heater
            style:
              top: 58%
              left: 48%
            prefix: 'Setpoint  '
        image: /local/tub.jpg
        style: |
          ha-card {
          background-color: var(--primary-background-color);
          border-radius: 25px;
          margin: 15px;
          box-shadow:
            -4px -4px 8px rgba(255, 255, 255, .5), 5px 5px 8px rgba(0, 0, 0, .03);
          }
      - type: thermostat
        entity: climate.ducky_tub_heater
        name: Heater
      - type: custom:mini-graph-card
        icon: mdi:hot-tub
        name: Hot Tub Temperature
        entities:
          - entity: sensor.spa_temperature
            name: Temperature
          - entity: sensor.spa_setpoint
            name: Setpoint
        hours_to_show: 36
        points_per_hour: 6
      - type: entities
        entities:
          - entity: button.ducky_tub_reconnect
            name: Reconnect
          - entity: sensor.ducky_tub_error_s
            name: Error(s)
          - entity: sensor.ducky_tub_rf_channel
            name: "RF\_Channel"
          - entity: sensor.ducky_tub_radio
            name: RF Signal
          - entity: sensor.ducky_tub_status
            name: Status
        title: InTouch 2 Module
      - type: entities
        entities:
          - entity: input_datetime.pm_on_time
            name: Boost On Time
          - entity: input_number.pm_on_temp
            name: Evening Temperature
          - entity: input_datetime.pm_off_time
            name: Boost Off Time
          - entity: automation.pm_setpoint_change_1
            name: Enable Evening Boost On
          - entity: automation.pm_setpoint_2
            name: Enable Evening Boost Off
          - entity: automation.heat_boost_on
            name: Enable Octopus Overnight Heat On
          - entity: automation.heat_boost_off
            name: Enable Octopus Overnight Heat Off
          - entity: input_datetime.octopus_on_time
            name: Time to Start Octopus Heating
          - entity: input_number.octopus_on_temp
            name: Target temperature

I should also say I run a daily automation to Reconnect and I have to manually reload the component every 2-3 weeks or it will freeze.

Hi @RhinoRich,

Thanks for sharing this, I was wondering whether you had created custom sensors for the spa_setpoint and spa_temperature?

Thanks.

Yes was the answer to my own question. For anyone else that might wonder here’s the templates I’ve added.

  - platform: template
    sensors:
      spa_temperature:
        friendly_name: "Spa Temperature"
        value_template: "{{ state_attr('climate.my_spa_heater', 'current_temperature') }}"
        unit_of_measurement: "°C"

  - platform: template
    sensors:
      spa_setpoint:
        friendly_name: "Spa Setpoint"
        value_template: "{{ state_attr('climate.my_spa_heater', 'temperature') }}"
        unit_of_measurement: "°C"
1 Like

HI Rich
how are you getting the octopus heat on/off are you using a sensor to turn on when the octopus agile unit rate is low, that is if your using octopus agile tarrif

thanks nigel