Harvia sauna remote control

Hi! I have steamer HGX90XW and it will be great to integrate it over mqtt.

Hello guys
installed integgration with harvia legend PO70XE and can confirm it also works with this model.
Thank you very much RubenHarms for making this possible.

Thanks for your confirmation! I’m happy to help you. If you experience any issues or miss major functionality, please let me know.

This integration only uses the MyHarvia app API. When your steamer has a Wi-Fi controller, it may work with this integration. Although I need to implement the steam value adjustment and steam on/off switch. For this, especially for the steam value adjustment, I need some information, as I don’t have a steamer.

Can you tell me if you have a Wi-Fi controller that works with the MyHarvia App? If so, does this integration work for you?

Why is MQTT important to you?

one thing i did notice is that the temperature sensor is not updating itself untill i turn it on or off, is this adjustabe somewhere?

I notice this aswell. It doesn’t happens all the time. I will try to fix this in the next update.

Yes, i have Xenio and MyHarvia app.
The thing is, at the moment I’m not using HA. My smart home operates on the KNX + Iridium combo. Currently, I’m integrating some secondary Zigbee devices into Iridium via zigbee2mqtt. Can I use your solution independently of HA?

WOW, I just noticed the new HACS custom integration. Installing as we speak.
BTW: you mention you are looking for someone with a steamer. I have the Club Combi with Steamer. So, would be glad to test any steamer feature you add.

I think the only important thing to know about the steam value adjustment (humidity %) is that the target humidity and temperature values cannot exceed 140 in total. So, with a target temperature of 70 will only allow a target humidity up to 70.
You can see the behaviour in the app when the steamer toggle is on. When you move the humidity slider past the 140 total mark it automatically moves the target temperature down. Same thing happens when you move the temperature above the 140 total mark the humidity value is pushed back. When the steamer toggle is off this doesn’t happen and the 140 total value is ignored.

I have one more feature request. I have my Xenio setup in safety switch mode instead of door sensor mode. I noticed in this mode the door sensor in the integration is always „closed“. UPDATE: I now notice the door showing as open. So, I suppose no changes need to be made to accompany using security switch vs door switch mode. The issue seems more likely an entity update thing. Since the MyHarvia App receives such a status update, I suppose there is some type of request the app makes to get an updated status. So, it would be nice if this integration polled for an update at some given interval. But it does look like the app is doing something to get a current state. The integration could potentially do that as well to be able to display the current status of the door/safety switch as well as the current temperature.
I use the safety switch mode in combination with the door switch because in this mode it doesn‘t require a manual activation after the door is opened and closed again. So, as long as the door is closed I can control the sauna remotely. In the door switch mode you always have to manually activate remote control from the Xenio control panel every time the door is opened.

Now, after using the sauna last night, I just compared the integration state vs. the Harvia App state. I first checked the integration and noticed it still showed up with a current temperature of 32° although the temp sensor from my ESP32 showed 8° (it is always a few degrees less than what the Xenio displays). When I then opened the Harvia App it also showed around 30° until it actually forced an update (or just a connection to the Xenio) and then it immediately went to 11°. The integration has still not updated. So, how often does the integration connect to MyHarvia to get updates? It would be nice if we could set an update interval (maybe even differentiating between when the heater is on vs when it is turned off - more frequent updates while the sauna is in use) and always have a current temperature and not require firing up the MyHarvia app to get an update.


Thanks for the explanation about the steamer; I had less time last week to work on development. I will start working on that. As for the bug related to updating settings, there’s something odd happening. The app connects to a Harvia websocket. This connection remains open continuously, and Harvia sends a message to the integration or app whenever there’s a change. However, after some time, the app stops sending these updates, except for the KA (keep alive) messages. The app disconnects from the websocket as soon as you close the app or put it in the background (open another app), and then reconnects once the app is reopened or brought back to the foreground. I suspect that the Harvia integration might also need to manage reconnections, though I’m not sure if I’m correct.

Of course, I could also manually request the status from the sauna at specific times. However, the whole point of the websocket is to provide real-time updates. The difference, of course, is that such an integration would need to be maintained much longer than an app, which you don’t usually keep open for an hour.

I’m going to test whether reconnecting the websocket periodically makes a difference.

I’ve rolled out some updates to the Harvia Sauna integration and would love your input on them.

Here’s what’s new:

  • Improved Websockets: Should make sensor updates faster and more reliable.
  • Steamer Control: Now you can toggle the steamer on/off and adjust humidity settings right from Home Assistant. Given your notes about the combined limits for humidity and temperature, it would be great to see how this works out for you.
  • Humidity Monitoring: Added a humidity sensor and setpoint adjustments.

You mentioned the importance of having timely updates, especially when the sauna is in use. I’ve worked on improving the update intervals.

Could you give these features a whirl and let me know how they perform? I’m particularly interested in how the steamer controls and the update intervals are working out. Any feedback or further tweaks you think might help would be appreciated!

1 Like

Awesome. So far the updating seems to work well. I haven’t had a chance to test the steamer with the exception of just UI stuff and seeing if the MyHarvia App updates to reflect what was changed in the HA integration. So far so good. I need to check what happens when the steamer is activated and humidity is modified to make sure no issues occur when potentially setting the humidity too high for the set target temperature. The MyHarvia App auto-adjusts, while you don’t do that in the integration (I can set temp and humidity values that exceed a total of 140).
The MyHarvia App doesn’t allow you to modify humidity as long as the steamer activation switch is off. And when the activation switch is on, it auto-adjusts temperature (and vice versa) when you adjust the humidity to a point above the combined value of 140. So, in the MyHarvia App you never have a mismatch as long as you only use the App. But, I do notice when I change the humidity within the HA integration the humidity and temperature values can go beyond the 140 combined value. Even within the MyHarvia App when it updates itself. Only when I make a manual change within the App will it readjust. So, it will be interesting to see what happens when I actually turn on the heater when the steamer is activated and these values are above 140 combined (which currently can only be set when using the integration). I would expect an error to occur and the heater will not turn on.

Thank you for your feedback. I am very curious to see what happens when you turn on the steamer. Unfortunately, I don’t receive any exception from the API. As far as I know, the steamer slider controls relative humidity in percentages, at least that’s how the API appears. If Harvia’s safety mechanism does not function properly, then I would like to set the maximum value in the integration as you suggested. Perhaps that should be done anyway, but like you, I had expected it would not be possible, as this is the case with other features. I look forward to your response!

Can you send a screenshot from the integration and the harvia app aswell to compare the exceeding values?

Update:

Just to clarify, 140 is the total sum of the target humidity and target temperature. With a target temperature of 90, is the maximum target for the steamer 50%? So that it adds up to 140. Is that correct? In my opinion, that safety feature should definitely be included. And what happens if your humidity is currently 70% and you set the heater to 90 degrees? Would the target temperature then be lowered to 70 degrees?

Sorry, I can’t help you with that. Maybe you can use my code for your project?

Thank you! I will try. As i see in official documentation, it is controlled over MQTT by core. Unfortunately i am not developer at all. )

The MyHarvia app communicates with the AWS cloud API, and the authentication is by AWS Cognito. I think that the Xenio Wi-Fi communicates with the Harvia server via secure MQTT. However, it’s really hard to sniff this communication as it is secure, and you can’t easily modify the Xenio Wi-Fi device. On a smartphone app, this is a lot easier. I suggest focusing on the app rather than the Xenio Wi-Fi device. In my opinion, it’s a waste of time to focus on MQTT.

Thank you for explanation. I think it is possible to develop js in Iridium that will communicate the same way you made in your app.

So, I tested the steamer functionality and it works fine.
I did notice that apparently only the MyHarvia App enforces the 140 total limit and not the API. With your HA integration it is possible to set target temperature and humidity to a total that exceeds 140 and when the sauna is turned on the Xenio doesn‘t complain and will operate at those set values. When when the MyHarvia app is started after setting those values from the HA integration the app still keeps the settings that exceed 140 and the heater can also be turned on with these values. Only when you change a value in the App it will modify the other value to not exceed 140. Maybe it is also nice to know that the app only modifies the other value when you exceed 140 total. If you set the value back then the modified other value remains. So, the app doesn‘t maintain the 140 total, it only prevents you from setting values that exceed 140.
For example: if the target temp is currently set to 90°C then the steamer humidity can be set up to 50% without any modifications to the target temp. As soon as you move the humidity to 51%, the target temp is changed to 89°C and so forth. Let‘s say you move the humidity to 60°, the target temp would be moved back to 80°C. If you then move the humidity back to 50%, the target temp remains at 80°C. But you can move the target temp back up to 90° before the humidity level is modified by the app. If you continue to move the target temp to 100°C, the app will automatically move the humidity back to 40°C.
I don‘t think anything will happen to the sauna heater when these values exceed 140. My understanding is that this is a health recomendation where they say it is not healthy when target temp and humidity together exceed 140. But, if you don‘t implement something in the integration I could imagine that Harvia at some point may try to make your integration inoperable if they find out that you allow setting the heater in this way and not honoring this behavior like the app does.

BTW: I noticed at some point the integration still stops updating states. Only after reloading the integration it pulls the current values again. The API apparently has some authentication timeout that prevents you from just polling the API to continue fetching states. Changing values still functions without reloading. So, I suppose it is an authentication issue as you probably re-authenticate when values are set and the original session has time out.