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

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

Hi Nigel,

We’re on Octopus Go, so the times are fixed.

I guess you already found this thread? Octopus Agile Tariff -Turn device ON and OFF - #15 by GeoffUK

I guess it would be easy enough to adjust the spa setpoint according to the price.

Hi, found my way here looking for a way to directly interface with the intouch2 unit. Mine came “BU Touch” branded from Bain Ultra. I can connect to it and control it with their app, and just signed up for a Gecko account and installed the in.touch2 app and I can connect with it, but not control anything. (It seems like perhaps the main app is more geared toward controlling full temperature-controlled spa tubs, whereas the BU tubs are focused more on controlling the air jets and such) Seems like it might be an interesting way to further pick apart the device since the number of interactions and options are so much more limited.

I installed the addon via HACS and configured, but it seems to just hang on initializing…

I have got the integration working (in.touch 2) but I find the information confusing.

Firstly, we only use the spa in weekends (holiday home), therefore I programmed the weekender preset to start heating from Saturday morning until sunday evening. The android app previously displayed cooling to 19 degrees (the controller automatically set this target when spa is scheduled not to heat). Unfortunately, the android app stopped working. I have to be in the same network to reconfigure - which is not going to happen until next weekend.

I am guessing the below meant that the spa temperature will go down to the target temperature of 19 degrees (the controller automatically set this target when spa is scheduled not to heat) . The below meant that the target temperature is 30 degrees on weekends, weekdays will be 19 degrees?

Is there a sensor to display the target temperature, rather than the setpoint?

Question 2:

Below sensors/switches were generated. I don’t understand some of these

  1. I will check which one is which (ie: blower, Pump 1, waterfall) next time I’m at the house
  2. Ozone, this one is always showing “Off”. I don’t think it should be the case as Watercare turns ON everyday for a number of hours
  3. is there a way to change the presets in the HA integration. The Android app has the function to change the preset (eg: weekender)? Or can it only be done by automation/schedule in HA?

The temperature attributes are in a climate template. See below. For the meanings of the other exposed entities, it’s a case of trying each one to check on their function. Controllers can be a random in how they expose their functions and HA has only a limited number of entity types. For example, the Gecko controller we have exposes the jets with 3 states - OFF, LOW & HIGH, even though ‘LOW’ is never used or exposed. HA doesn’t have a 3-state switch, so Gazoodle has used the ‘Fan’ entity for those. To address them, the code will be something like this:

 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';
          ]]]

Personally, I’d use standard mode and create automations to adjust the setpoint as you wish, but that’s just me. I trust Home Assistant more than I trust Gecko!

I upgraded to have HA available through Nabu Casa to override settings wherever I am. Even if an automation goes wrong I can remotely change whatever I need.

Climate template:

sensor:
  - platform: template
    sensors:
      spa_temperature:
        friendly_name: Spa Temperature
        value_template: '{{ states.climate.ducky_tub_heater.attributes.current_temperature }}'
        unit_of_measurement: °C
      spa_setpoint:
        friendly_name: Spa Setpoint
        value_template: '{{ states.climate.ducky_tub_heater.attributes.temperature }}'
        unit_of_measurement: °C

Oh - a note on ozone. Very few tubs have an integrated Gecko ozonator. It’s far more likely to be a generic generator linked to the circulation pump. The Gecko controller doesn’t know it’s there. Same with filtering - the majority of tubs have suction through the filter whenever the circulation pump is running.

Thanks for the info. I’m hoping to have a bit more time this weekend to check on these entities.

Yes. I am considering using standard and creating automations if the controls are not working as I expected it to be.

I am not using Nabu Casa but have duckdns and reverse proxy configured for remote connectivity. Apologies, I meant the in-touch android app that stopped working remotely. It’s stuck looking for the spa.

I didn’t know about the ozone. Again, thanks for the info.

You can change the preset with this service call :

service: climate.set_preset_mode
data:
  preset_mode: Weekender
target:
  entity_id: climate.hot_tub_heater

Is there a way to make the thermostat card to look like the “more info” pop-up.

Thermostat (looks Bland)

image

More Info (Looks better)

More importantly, is it possible to display the state in the card. ie: in the more info it is showing “Cooling to target”. I can’t seem to find a way to display that in the card.

I think having the card look like the popup is still being worked on. In the meantime though, you could create a vertical stack of 2 cards, put the climate card in the top one and then put a template card containing {{(state_attr('climate.hot_tub_heater', 'hvac_action')) }} (Which would give you the word ‘cooling’ here)

I’ve not mocked it up though, so it might be ugly :slight_smile:

Thanks. I used a combination of button card (container) and mushroom climate card instead.

image

tap action, navigates to another page with all thermostat card and other sensors. Just realised I was using the better thermostat card. the HA thermostat card shows the status now.

You could also try the tile card as they added the ability to show the presets

type: tile
entity: climate.hot_tub_heater
features:
  - type: target-temperature
  - type: climate-preset-modes
    style: dropdown
    preset_modes:
      - Away From Home
      - Standard
      - Energy Saving
      - Super Energy Saving
      - Weekender

Hi,

I really am lost with all these instructions. I set up HA mainly for spa control, or atleast hoped so. I’m super noob or becoming too old to understand all this.

Spa control is in.touch2 and i have the HACS @gazoodle version. I can fiddle with the temperature but not the way i was dreaming.

I tried to install Nordpool and hoped to make easy automation with HA to follow the price and heat when its cheap. Did not work.

I tried to follow your guidelines here but my basic knowledge is too low for this subject and i get more diizzy everytime I try to start over investigating how to complete this.

So what I thought I could make on my own was:

  1. Easy way to set manual “boost” times just by looking Nordpool (usual times are the night times in Finland when price is at 1-4 cent €)
  2. Easy way to set the temperature of the spa drop to cooling by daytime or the mornings.

BR Joonas

I don’t know NordPool, but it sounds a little like Octopus Agile in the UK. There’s a thread on extracting and using variable pricing here Octopus Agile Tariff -Turn device ON and OFF - #15 by GeoffUK

My tariff is a time-of-day thing, so it’s very easy, but I’d suggest that if the NordPool pricing is generally low at night, then just use a time based approach. It might not fully optimise things, but heating the tub to maximum overnight and then letting it coast down is a very economical way to run it. We estimate we save around 50% of the cost versus using a single setpoint continuously. We pay 7.5p overnight and 21p during the day.