Intex Pure Spa wifi control

Hi, i bought Intex Pure Spa with wifi enabled control panel.

I did not found any intergration for it so far.

So i installed their android app and started sniffing on network. It talks to port 8990 and communication is not encrypted. For example, after pushing “filter” icon in app, it sends something like

{"data":"8888060F010004D4","sid":"1626776247245","type":1}

and device responds with

{"sid":"1626776247245","data":"FFFF110F01030019000000008280801F000020","result":"ok","type":2}

Using telnet and repeating this string, it also switches the filter pump.

I will try to dig into it, no promises.

Btw. it is ESP device. It has telnet port open to everyone and says something about FreeRTOS in prompt

1 Like

That would be great to integrate with Home Assistant. How did you sniff the communication?

I have sonicwall between my lan and dmz, so i can capture packets here and export to wireshark. Luckily the mobile phone app tries to connect directly to spa even if it’s in different IP range.

But I have lost connection from my spa to my wifi, i have to reset it’s pairing somehow …

Hello, thanks for this awesome discovery, I own myself an Intex Wifi SPA and your command works great through telnet on my local SPA IP port 8990. I’m currently trying to add a telnet switch in HA without success. Did you discover the other commands like temperature and heating settings ?

Hi. not yet. I couldn’t get it back to network for long time, so i could not test it.
This week, i was able to do new pairing after battery of panel was discharged.
So i can do more discovery later

telnet switch looks great, btw

with

{"data":"8888060F010400D4","sid":"1630705223740","type":1}

i’m able to toggle the bubbles

it responds with

{"sid":"1630705223740","data":"FFFF110F011100190000000080808020000013","result":"ok","type":2}

after turning it on

and

{"sid":"1630705223740","data":"FFFF110F010100190000000080808020000023","result":"ok","type":2}

after turning it off.

19 in middle is my current temperature - 25C ,
20 futher on is my set temperature - 32C

status can be returned by

{"data":"8888060FEE0F01DA","sid":"1630705186378","type":1}

with result like

{"sid":"1630705186378","data":"FFFF110F0101001D000000008080801E000021","result":"ok","type":2}

so far i have found this in data string

FFFF110F01
0 - bubbles - 0 off, 1 on
1 - panel/pump - 0 - panel off, 1 pump off, 3  pump on, 7  on + heat
00
1D - current temp
00000000808080
1E - preset temp
000021

This is really great, I will do some test at my side and try to convert this in working telnet switches in HA. So far I got a “pump switch” entity but it’s not doing anything when triggered

I managed to create working telnet switches with working states based on your discovery with the telnet commands @elkropac many thanks!!
I also installed an older Android Intex APK version 1.0.9 with which I could sniff the heating & On/Off commands.

Here below the 4 switches:

#Intex SPA switches
  - platform: telnet
    switches:
      alimentation_spa:
        resource: 192.168.1.29
        port: 8990
        command_on: '{"data":"8888060F01400098","sid":"1631357332538","type":1}'
        command_off: '{"data":"8888060F01400098","sid":"1631357332538","type":1}'
        command_state: '{"data":"8888060FEE0F01DA","sid":"1630705186378","type":1}'
        value_template: '{{ value|regex_search("FFFF110F0101",ignorecase=True) or value|regex_search("FFFF110F0101",ignorecase=True) or value|regex_search("FFFF110F0103",ignorecase=True) or value|regex_search("FFFF110F0107",ignorecase=True) or value|regex_search("FFFF110F0111",ignorecase=True) or value|regex_search("FFFF110F0113",ignorecase=True) or value|regex_search("FFFF110F0117",ignorecase=True) }}'
        timeout: 0.9
        name: "Alimentation spa"     
      pompe_spa:
        resource: 192.168.1.29
        port: 8990
        command_on: '{"data":"8888060F010004D4","sid":"1626776247245","type":1}'
        command_off: '{"data":"8888060F010004D4","sid":"1626776247245","type":1}'
        command_state: '{"data":"8888060FEE0F01DA","sid":"1630705186378","type":1}'
        value_template: '{{ value|regex_search("FFFF110F0103",ignorecase=True) or value|regex_search("FFFF110F0113",ignorecase=True) or value|regex_search("FFFF110F0107",ignorecase=True) or value|regex_search("FFFF110F0117",ignorecase=True) }}'
        timeout: 0.9
        name: "Pompe spa"
      bulles_spa:
        resource: 192.168.1.29
        port: 8990
        command_on: '{"data":"8888060F010400D4","sid":"1630705223740","type":1}'
        command_off: '{"data":"8888060F010400D4","sid":"1630705223740","type":1}'
        command_state: '{"data":"8888060FEE0F01DA","sid":"1630705186378","type":1}'
        value_template: '{{ value|regex_search("FFFF110F0111",ignorecase=True) or value|regex_search("FFFF110F0113",ignorecase=True) }}'
        timeout: 0.9
        name: "Bulles spa"
      chauffage_spa:
        resource: 192.168.1.29
        port: 8990
        command_on: '{"data":"8888060F010010C8","sid":"1631356889267","type":1}'
        command_off: '{"data":"8888060F010010C8","sid":"1631356889267","type":1}'
        command_state: '{"data":"8888060FEE0F01DA","sid":"1630705186378","type":1}'
        value_template: '{{ value|regex_search("FFFF110F0107",ignorecase=True) or value|regex_search("FFFF110F0117",ignorecase=True) }}'
        timeout: 0.9
        name: "Chauffage spa"

I also created 2 current & target temperature sensors with a little bit of Python scripting (forgive me if my scripts are bad I’m not a coder :slight_smile: but it works great! )

#Spa sensors
  - platform: command_line
    command: "python3 /config/python_scripts/spa_current_temp.py {{ states('sensor.temperature_spa') }}"
    unit_of_measurement: "°c"
    name: Température spa
    scan_interval: 300
  - platform: command_line
    command: "python3 /config/python_scripts/spa_target_temp.py {{ states('sensor.temperature_cible_spa') }}"
    unit_of_measurement: "°c"
    name: Température cible spa
    scan_interval: 300

Here below the python scripts linked to the sensors:
spa_current_temp.py

from telnetlib import Telnet
with Telnet('192.168.1.29', 8990) as tn:
    tn.write(('{"data":"8888060FEE0F01DA","sid":"1630705186378","type":1}').encode('ascii'))
    OUTPUT = tn.read_until(b"ok")
    tn.close()
    print(int(str(OUTPUT[45:47], 'utf-8'), 16))
exit

spa_target_temp.py

from telnetlib import Telnet
with Telnet('192.168.1.29', 8990) as tn:
    tn.write(('{"data":"8888060FEE0F01DA","sid":"1630705186378","type":1}').encode('ascii'))
    OUTPUT = tn.read_until(b"ok")
    tn.close()
    print(int(str(OUTPUT[61:63], 'utf-8'), 16))
exit

What those scripts do every 5min (can be changed at the sensor level) is:
-Telnet to the spa
-Launch the status command you found
-Cut the hexadecimal current & target temperature data
-Convert the hexadecimal to decimal which is in °C, fine for me as I live in Europe

So in the front end I have this:
image

Works very great even if you use the Intex app the status will also be updated in HA !!

Now last thing I’m investigating is the temperature setting but this one is not easy because each temp setting has a proper command :frowning:

Kind regards

3 Likes

Nice :wink: I have wifi problems with my spa, it does not want to be online. Whats your experience?

I want to try to program some integration but everytime i find some time to tinker with it, it’s offline and i loose interest

Hello, I have zero wifi issue with mine. The connection to the device stays rock solid stable however my house is well covered with 4 wifi access points. Your device is maybe too far from your Wifi AP ?

I have AP 3 metres from spa. Maybe it’s borked somehow :-/ (after all, it’s second hand from ebay).
I have sonoff device on same AP and it is working ok (except i found out today, it was offline for two days, rebooting AP helped) - looking at entity history, it seems it was offline quite a few times.

I’m trying to make an intergration, but i’m struggling with all the stuff it takes to bash it together :slight_smile:
image

Any progress? Great work!

Not really, sorry. I have put the control/motor unit in my work room for winter, so i’m motivated to make some progress thou :wink:

1 Like

Why not uploading the progress you’ve made with the integration to github? I’ve my SPA now and willing to contribute :slight_smile:

Firstly, I’d like to say thanks, your switches and sensor work great.

Second, you state each temperature setting has a specific command, so is the challenge getting each command? Or is it the challenge of making it send the command back out from a selection?

Hello sorry I didn’t connect to this thread since a while as is it now winter and my Spa is disconnected.
So I don’t remember fully but it seems you have to send a specific command for each value of temp you want to set.
I will surely continue to make some tests next spring when the sun returns. Sorry if I can’t help further. Still if you want to make your own search you can use on your Android device a sniffer app to sniff an old version of the Intex SPA APK, you can find it outside of Play Store easily.
The latest version uses cloud even if you are on your own wifi network so you cannot snif as the packets are then SSL encrypted.
But with the old version it’s all clear in your own LAN so you can easily check which command does what and continue your investigations. Regards

Hi there.
@Olivier_B , I’m a developer and a new owner of a intex carbon spa. I already try your telnet commands with success. I think this can be a good idea for the community to have it in a integration form. I know @elkropac already started this work. Any github initiated with this work? I can be motivated to do so if needed. (and also to extend your searchs)