cdpuk/ha-bestway

Hydrojet support

Closed this issue · 20 comments

Custom integration done in EU API server, with login/pass and reboot
I got that message : Error communicating with API: 'system_err1'

LOG

2023-04-24 08:18:05.269 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-04-24 08:18:05.289 WARNING (MainThread) [homeassistant.config_entries] Config entry 'd************@w********.fr' for bestway integration not ready yet: Error communicating with API: 'system_err1'; Retrying in background
2023-04-24 08:18:28.591 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'

cdpuk commented

My spa is now back up and running for the summer, however I see no trace of this error. It looks like perhaps the API returned a bad result. Was this a one-off or do you continue to see issues?

Hello, I have the same error with my Bestway hot tub. Connection to the Bestway app works flawlessly.

my model is the "santorini" whirlpool with Hydrojet pro

When connecting to Home Assistant, I also get the error message: Error communicating with API: 'system_err1'

LOG:
2023-05-17 13:20:11.068 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-05-17 13:20:11.072 WARNING (MainThread) [homeassistant.config_entries] Config entry 'm****@m***.com' for bestway integration not ready yet: Error communicating with API: 'system_err1'; Retrying in background
2023-05-17 13:20:16.664 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'

cdpuk commented

Please try the newly released v1.1.5 which will produce a useful log message next time this happens.
2023-05-17 20:32:39.345 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''not_here'' while decoding device attributes {"system_err2": 0, "wave_appm_min": 59940, "heat_timer_min": 0, "heat_power": 0, "earth": 0, "wave_timer_min": 59940, "system_err6": 0, "system_err7": 0, "system_err4": 0, "system_err5": 0, "heat_temp_reach": 0, "system_err3": 0, "system_err1": 0, "system_err8": 0, "system_err9": 0, "filter_timer_min": 0, "heat_appm_min": 0, "power": 1, "temp_set_unit": "\u6444\u6c0f", "filter_appm_min": 0, "temp_now": 28, "wave_power": 0, "locked": 1, "filter_power": 0, "temp_set": 30}

Drop the log entry on here and we'll know more.

even with version v1.1.5 I don't get any other log for me

2023-05-18 08:06:07.863 ERROR (MainThread) [frontend.js.latest.202305033] :0:0 Script error.
2023-05-18 08:06:36.298 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-05-18 08:06:36.299 WARNING (MainThread) [homeassistant.config_entries] Config entry 'm**@***.com' for bestway integration not ready yet: Error communicating with API: 'system_err1'; Retrying in background
2023-05-18 08:06:41.849 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-05-18 08:06:52.265 INFO (MainThread) [custom_components.bestway] Reusing existing access token
2023-05-18 08:06:52.351 DEBUG (MainThread) [custom_components.bestway.bestway] New data received for device 6YHnG491PpzozpLifqXJ4T
2023-05-18 08:06:52.351 ERROR (MainThread) [custom_components.bestway] Data update failed
Traceback (most recent call last):
File "/config/custom_components/bestway/init.py", line 140, in _async_update_data
return await self.api.fetch_data()
File "/config/custom_components/bestway/bestway.py", line 226, in fetch_data
if device_attrs[f"system_err{err_num}"] == 1:
KeyError: 'system_err1'
2023-05-18 08:06:52.356 DEBUG (MainThread) [custom_components.bestway] Finished fetching Bestway API data in 0.090 seconds (success: False)

Hi guys
I have update the integration to 1.1.15 as well, right now no connection error but SPA look like disconnect
same log, if this can help

2023-05-19 07:24:29.485 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 21, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 704, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:24:59.438 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 22, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 705, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:25:29.444 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 22, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 705, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:25:59.416 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 23, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 706, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:26:29.529 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 23, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 706, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:26:59.418 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 24, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 707, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:27:29.455 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 24, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 707, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:27:59.435 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 25, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 708, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:29:00.713 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 26, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 709, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:29:30.662 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 27, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 710, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}
2023-05-19 07:29:47.737 ERROR (MainThread) [custom_components.bestway.bestway] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 27, "word4": 0, "word7": 31, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 710, "option6": 10244, "ver": 12614, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 31, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 34, "filter": 2, "E28": 0, "bit6": 0, "bit5": 1, "bit4": 0, "bit3": 1, "bit2": 0}

cdpuk commented

It looks like this model is using a completely different protocol.

I see @ocramgf is using a Santorini. What Spa do you have @dsammaritano?

Someone will need to decode enough of the values in that output to make sense of the values. This normally means changing one control at a time via the normal spa controls, then grabbing one of those lines of output to see what changed. This isn't something I can do without owning one of these newer devices.

In the mean time I will add some additional sensors to read out version numbers. There is something that appears to be a protocol version field. My spa claims version 3, so I'm hoping this output is being generated by something other than that.

Hi
Sorry for delay, quite busy ...

I'm using Model Santorini, this have another pump named HydroJet Pro
There is 2 modes for "Bubble" and another button "Jet"

This one should th last version provide by Bestway right now on model Santorini, Maldive, San Francisco ...

https://bestwaystore.fr/pieces-detachees/1396-pompe-de-filtration-bestway-grise-pour-lay-z-spa-hydrojet-pro-a-partir-de-2021-ue.html

Give instructions if you need help

cdpuk commented

Questions that need answering by someone with a HydroJet Pro and these logs:

  • What changes in the log entry when the temperature unit on the spa changes between C and F?
  • The log shows heat=3 where I'd expect to see a simple boolean value. What other values are possible? What does on/off look like? Do we get different values depending on whether the spa is actively heating or not?
  • Similarly, the log shows filter=2 instead of a boolean. What does filter on/off look like?

Hi,
On the pump itself the buttons look like another pump, but for Bubble there is 2 modes and that switch between full / half / off
May be for that other switches use multi-value

There is now v1.4.0-alpha1 published as a beta release via HACS. This groups together a bunch of tasks around device support, and should add support for any Airjet_V01 or Hydrojet devices. The data to get this working has been scraped together from a number of different sources and combined with a bit of guesswork.

I'd very much appreciate some testing against real devices to confirm what's working, in particular:

  • Check that changing options via the official app or spa is correctly reflected in HA
  • Check that changing settings via HA has the expected effect
  • Any feedback on missing features

Debug logging has also been extended to print out those attribute collections for known devices (previous this only happened for unrecognised devices). If anything doesn't work as expected, capturing these messages before and after device state changes will be essential.

SUCCESS
I have had installed the integration quite a while ago, but didn’t had the time to track down the issues it had with my Hydrojet spa. Now I installed v1.4.0-alpha2 and it works for me!

Very happy right now!
Thanks so much.

Details of my environment and test
Spa: Bestway Lay-Z-Spa Dominica HydroJet, 2023 model (*1)
Reference: https://www.bestwaycorp.com/Product/Item?id=1060165XXX23
**Location of operation: Germany

Test Cases

  1. Turning Filter to ON and OFF
    Both commands work without issues. The pumps starts immediately after changing the state in Home Assistant (HA), but the switch in HA turns back to OFF-state and then its turns automatically back to ON after approx. 10 seconds. I assume this has to do with lag times in API communication in receiving an update of the state by the API.

  2. Turning Spa Bubbles to ON, MEDIUM, MAX
    All three commands work as expected! Very nice. It activates the so called Airjet Massage (*2)

  3. Temperature, Heating up

  • Measuring current temperature works as expected
  • Changing Set Point Temperature (SPT) works as expected
  • Heating works as expected (*3)

Remarks
(*1) This spa is according documentation NOT a Hydrojet Pro, but simply a Hydrojet
(*2) It turns on the Air Bubbles not the Hydrojet Massage, which is totally correct
(*3) Did not test until now if the heating automatically stops when STP is reached, since it is fucking cold outside and want to prevent by power bill to explode… ;-)

Debug Logs

... as attachment
debug.log

Thanks for the thorough testing and feedback 😄

I've just published v1.4.0-alpha3 to tweak a few things:

  • The filter switch flickering should be fixed.
  • I've changed how both filtering and heater power are controlled. There was a mistake so I'm actually surprised this worked in the first place. A re-test would be useful.

The thermostat is set by the integration but it's over to the spa when it comes to stopping when it reaches temperature. It'll almostly certainly be fine.

Can you explain the bubbles / airjets / hydrojets in this spa as I'm not familiar with them? Sounds great that the OFF/MEDIUM/MAX setting works as expected. Is there also a hydrojet massage system that the integration can't currently control?

Thanks, @cdpuk, for the super fast response.
I am currently off-site so that I am not able to re-test, but will do on the weekend and will come back.
Your statement re Set Point Temperature makes totally sense. Thx as well.

Regarding your question: There are two types of massage functions in Bestways Spas:

a) Airjet - produces air bubbles.I believe all Bestway Spas do have this feature. It is that function, that your integration triggers, when you turn on “bubbles”.

b) Hydrojet - produces a water jet at two or more places in the pool sidewalls (under water). I guess you do not utilize this functions currently with your intergration at all.

Functions (a) and (b) can be triggered by buttons on the Spa’s screen or the original Bestway app (see screenshot).

image

Hydrojet can be turned ON / OFF only. It can be combined with AirJet.

If you wish, I can send you some log HA output of a session when I turn Hydrojet ON and OFF. I would need then to know, where and what exactly to log….

Thanks for the explanation.

Debug logs should be possible via Settings > Devices & Services > Bestway, then "Enable Debug Logging" for a bit, and then "Disable Debug Logging" should trigger a log download.

The following should create enough information to understand how the Hydrojet switch works:

  • Enable debug logging
  • Turn on jets
  • Wait 1 minute
  • Turn off jets
  • Wait 1 minute
  • Disable debug logs and paste the relevant bits of the log file on here

I just followed your suggested protocol. Here is the debug log output:

2024-01-13 15:47:36.373 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:47:36.374 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 7, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 7, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:47:36.374 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.113 seconds (success: True)
2024-01-13 15:48:06.379 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:48:06.380 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 7, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 7, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:48:06.380 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.119 seconds (success: True)
2024-01-13 15:48:36.372 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:48:36.373 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 8, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 1, "E23": 0, "power": 1, "Tnow": 7, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:48:36.373 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.112 seconds (success: True)
2024-01-13 15:49:06.369 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:49:06.370 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 8, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 1, "E23": 0, "power": 1, "Tnow": 7, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:49:06.370 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.109 seconds (success: True)
2024-01-13 15:49:36.388 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 32okaUoeb1CaHv5kWlTaNk
2024-01-13 15:49:36.389 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Hydrojet' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 9, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 982, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 9, "option7": 10260, "option4": 60, "option5": 27176, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 1, "wave": 0, "word3": 0, "Tset": 37, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-13 15:49:36.389 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.127 seconds (success: True)

Ah, there's a jet property that's either 0 or 1. Easy enough to add. Thanks for the logs.

v1.4.0-alpha5 is now available for testing jets control

Great. Hope I can do it latest on the weekend. Keep you posted.

Really great news. Did some testing: Works like charm!

  • In my first test (tun jet ON, wait 30 sec, turn jet OFF) the switch in HA returned back to ON approx. 30 sec after I was turning the jet OFF. But it was only the switch in HA, not the jet itself.
  • So I did a second test: Turned debug logging on a repeated the sequence. Unfortunately I could not reproduce the behavior the HA jet switch was flipping back to ON after turning if OFF.

Anyhow, I will take a closer look on this when it gets warmer and when we use the pool more frequently...

Keep you posted.

Many thanks for your work on this integration.

Bodo

Since things sound mostly there, I've released this as v1.4.0. Please report any problems as separate issues.