Integration for a spa, question about available entities

I am currently writing an integration for a Balboa Spa. Right now I’m writing the backend API library, but obviously the HA integration will come next. With that, I have some odd devices. I’m not sure how to categorize these into existing entities:

  1. The spa heater. It’s not quite a “climate” device, as really, it only has one temp, a set-temp and a current temp. There is no range. So maybe it fits under a water heater? Sorta?

  2. The pumps are tri-state. OFF, LOW, HIGH. What would be the best entity to represent these?

  3. There is a blower, which can be OFF, LOW, MEDIUM, HIGH. (it’s an optional component to make bubbles, so not quite a fan, but sorta?)

I guess for the pumps and blowers I’m wondering if homeassistant has a “multi-state” or “selector switch” style entity? Something where I say “you can pick N arbitrary modes, here is a list of them to choose from” Or should I build the entity inside my integration? If so, is there an example of another integration that does this?

Thank you!

For which Balboa system are you building integration? BWA or ControlMySpa?
If you target to get it HA working with Balboa ControlMySpa I will be super interested. I already have the SPA but it will be not set up for some time but when it finally will be installed I will be happy to test out what you have.

I’m another owner of a spa with the “ControlMySpa” system from Balboa.

I would say i’m very underwhlemed by the app and system in general, but it would be 300% more useful if we could get an interface working with HA.
Unfortunately it’s all through their cloud, but even cloud control better than no control.

the existing google integration is also a joke.

1 Like

To the OP, there is a very long and interesting thread on smartthings regarding the BWA / wifi controller for balboa, and it looks like recently a smartthings handler has been created. I haven’t played with it yet (I have the CMA system, but probably going to swap in the wifi module instead), but might be worth a read.

Hi OP,
wondering if you have made any process?
I got a balboa wifi module to swap out instead of the “ControlMySpa” system. I didn’t think an app could get worse than “ControlMySpa”, but the wifi app is even worse… lol…

but on the upside, with wifi, this control library works:

sort of. The switching is a little janky, and the temp is stuck in my system temp of metric, despite wanting to control in F, but otherwise, i have basic control from HA.
Also… this library seems to stop getting updates approx every 30 minutes. I have to issue a command to it (like turn on LED light) or some other similar command) which re-establishes the connection, and values are updated again. So probably going to either just set a command to occur every 30 minutes, or monitor the time attribute and compare for old time = issue a command.

But if we get an integration which works a bit better, that would be great, so really interested to hear where you are at / if you have anything working. I do have some coding experience, so willing to help where able.
I dont know of any other switch ih HA which is tri-state. perhaps a button with an update call after the press, which is basically what the existing system does.

1 Like

If you’re still looking for updates to this, I forked a branch of what the OP had and expanded on it. I have a pull request open on the python library, and another for the HACS custom component, but if you have HACS installed already, you can just add a custom repository to my repo and try it out:

There is Google Assistant / Alexa integration available for Controlmyspa so there should be an API somewhere in the CMS backbone. Has anyone found documentation about that? HA would really be the best way to control the spa.

I am seriously frustrade with the Balboa ControMySpa impelementation. Now that energy prices go up a Hass integration would let me ensure it does not heat the spa when energy cost is high - for example. Does anyone know of someone working on an integration?

Just found this:

It looks like somebody ported the JS integration to Python. Is there anyone who can make a custom integration out of it?


Just hooked up CMS today, and cloned the Python library. Works pretty well so far, I’m a bit nervous about the connectivity issues people have.

I’ll see what I can do for an integration in coming weeks.


Sounds great! I am ready to help with testing in case you need it. :blush:

Have you seen this? GitHub - mikakoivisto/controlmyspa-ha-mqtt

Not sure I need to reinvent the wheel, I’ll check this out first :grinning:

1 Like

Regarding the MQTT conversion, I put in a PR (Update app.js by JSkier21 · Pull Request #1 · mikakoivisto/controlmyspa-ha-mqtt · GitHub) to update the project to send celsius in the MQTT message, that way we get the conversation automatically to fahrenheit in Home Assistant (helpful for those of us in the US anyway).

Side note, you should increase the poll to 120 or higher, otherwise it seems like it rate limits out pretty quickly at 60.

Looks like light and pump control are still in progress (commented out), I will try to find some time to help it along some.

I’m surprised no one had done integration to ControlMySpa since there was quite capable js library for it. That is my first stab at writing an integration to Home Assistant.

I just fixed few bugs in it.

What should I do to integrate either the CMS MQTT or the clonesd python library into hass? Any hints in which direction I should look?

For some this is probably a stupid question but here I go… How do I install GitHub - mikakoivisto/controlmyspa-ha-mqtt in


If you have access to docker from Hassio (Home Assistant supervised) you can try the instructions from this link.

Nope, I do not have access to docker. I once had that access but got scared I would break everything and flipped some switch to disable and now it is disabled.

I did a test by putting the controlmyspa-ha-mqtt files together with a config.yaml file into a folder in addons and got it visible as an add on. It ieven starts but now I am stuck at how to convey the CMS user name and password to the app.js.