Rointe WIFI enabled electric radiators

I have two Rointe D series radiators. These are connected to the internet and can be remote controlled via the Rointe Connect app. Unfortunately, Rointe does not currently have a API available and the support team have been unable to give me any indication of when this might become available other than that they are working on it.

As it would be ideal to be able to add a thermostat card to my Home Assistant, I have been attempting to work out a way to do this. I tried connecting my phone to a proxy to monitor the communication from the app but when I do this the app fails to fully load and I cannot see any calls.

Rointe have just made a web app available. After some inspection in the Chrome dev tools, it looks like it sets up a websocks connection and sends state changes over this channel.

I am not sure how to proceed from here as I do not know how radiator integrations are meant to be structured in HA. I am sure it should be possible to reverse engineer the API used by the vue web app and implement it in python. Is anyone interested in helping with this?

2 Likes

Any other Home Assistant users have Rointe D series radiators?

@tobinbrooke I too have one of these babies and would be interested in seeing it integrated, but I’m no coder so would struggle to help

Unfortunately Rointe support have stopped stringing me along and last time I contacted them they admitted they have no plans on releasing a API.

If I get the time I intend to reverse engineer their browser app or see if I can somehow make use of the Alexa skill. As it annoys the hell out of me that I have smart heating and cannot use it along side the rest of my automation

The main point of uncertainty is that I don’t know the home assistant heater integration API so if anyone has the knowledge and is willing to help that would be appreciated

1 Like

I really wish I had checked for a API before installing these radiators

I just received a reply via Twitter that they are working on it!

1 Like

I started working on an integration, still along way away:

Contributors and critics welcome :slight_smile: Especially if you have multiple radiators and/or different products. I only have one series D radiator and would be interesting to test this with different installations.

1 Like

I probably cant provide too much assistant with the development side, but I have a full Rointe D Series architecture (Mutiple radiators/Towel Rails and a CT.2 controller controlling my underfloor heating).
All linked to the app currently, but would love to integrate it with my home assistant (currently running in docker).

Let me know if I can help with testing

UPDATE (25/Jan/2021)

:point_right: Please install via HACS instead. :point_left:


That’s great @tris203 I have only one radiator and it would be helpful to test multiple devices.

Are you comfortable in setting a development environment with my code branch?

That would mean:

  1. Following these instructions: Set up Development Environment | Home Assistant Developer Docs
  2. Skip step 1.
  3. Put my repository URL (GitHub - tggm/core: Open source home automation that puts local control and privacy first.) on that step 2 box.
  4. Following along the instructions and you should have a local instance of homeassistant with a new integration called Rointe.

As an alternative I can check on the community forums/discord to see if it’s possible to add a development integration to an existing homeassistant installation.

Regardless of the option you choose we can take this offline and chat via discord to help you set things up. As you prefer.

Some details about this integration:

  • This operates on the Google Firebase REST API that powers the rointeconnect.com app.
  • The integration setup asks for the rointe connect username(email) and password. These are used to retrieve an authentication token which is then used to make requests to the API.
  • As you know Rointe devices are organized on an hierarchy of Installations → Zones → Devices. The integration lists your installations and let’s you choose which one you want to work with (most people probably only have one)
  • I pretty much ignore the concept of Zone and work with devices directly. The code iterates over all Zones and for each of them retrieves the Radiators.
  • Periodically it retrieves all the devices state.
  • I’m adding a radiator entity + sensor entity for the radiator current temperature.

Still To Do

  1. The presets (Eco, Comfort) don’t work very well still. Especially when setting the radiator in HA from Manual to Auto.
  2. When chaging stuff in HA I still have to force a refresh on the interface
  3. Automations need to be tested.

The most challenging part here (apart from the obvious issues that will pop up when dealing with more than one radiator) is your CT.2 controller. I don’t have this device so I don’t know what to expect.

However I can provide you with the REST URL’s to retrieve the details of your installation. You could call these via curl, wget or with a tool like Insomnia, remove any sensitive text and share details.

This is interesting as I have also been working on a integration which I have working. Currently it is using node.JS and implements the websocket protocol that rointe connect uses. The node service serves as a bridge between MQTT and rointe connect. I just need to find time to work out how to make a node application run as a plugin to HassIO so that I do not need to run it on a different server. I have not made it a public repo yet as I want to get permission from Rointe to use their private API before doing so.

Maybe I can offer some help

When I analysed the rointe connect site in dev tools I did not see it making rest calls so much as a vue application using secure websockets for communication between the client and server. Currently the node service has a admin UI for configuring the connection to rointe and MQTT and a preview of detected radiators with the ability to rename them. Detects changes to temperature settings and can set temperature or one of the preset modes. Has no real understanding of zones, instead just treats each radiator as a individual unit as that suits my needs better. I have not implemented any features such as windows open etc as I do not use them. Tested with two Rointe D series only.

@tobinbrooke It does work with a websocket. However the server is a Fireside app that also supports REST calls.

If you check my code you can see the endpoints in homeassistant\components\rointe\const.py

If you want to run my repo code I’d appreciate feedback :slight_smile:

@tobinbrooke You could help me validate my approach when setting the radiators. There a few parameter than can be set: Mode, Status, Power and there seems to be a delicate combination of them to set the radiator.

I’ve identified 8 modes: Auto-Idle, Auto-off, Auto-Ice, Auto-Comfort, Auto-Eco, Man-Off, Man-Eco, Man-Comfort which I set by sending those 3 parameters with different values. But there are some issues: sometimes when going from Man → Auto it ignores my request or it works immediately.

Maybe the zone configuration are messing the radiators (I also ignore them).

@tggm Lets talk on discord, do you have your username listed anywhere? if not message it to me somehow, and lets talk

Assuming I could just put your rointe folder into custom_components no?

I control the settings per zone duplicating any changes to all the underlying devices.
For manual / auto when changing the temperature or setting through the bridge service I set it as manual.
When reading the zone information, I store the temperature values for each preset. If changing temp resulting value matches one of the presets I also set the preset mode as active.
When setting one of the presets as active I set the temperature to the value of the preset. On/off is independent of the reset and the target temp/preset are not changed by telling it to turn off.

I did not implement togglign auto as I don’t really use it and just set target temps or presets or off.

I am curious how you are listening for external changes such as through RointeConnect so as to reflect them in HA? In my case as I am using websockets I just handle the incomming messages. I assume, using REST, you are polling? I had to do a lot of watching and observing the ws messages in response to actions in the UI to understand the minified ws messages, wish I had found some details of the REST API

It’s a polling integration. every N seconds I check the devices and update the state (this is not perfect yet as it doesn’t appear to update the interface immediately).

I understand your pain with websockets I almost went down that road but luckily I discovered that firebase apps also support REST by default. The endpoints are easily deducible from the websocket messages.

UPDATE (25/Jan/2021)

**:point_right: Please install via HACS instead. :point_left: **

You can check my code and if you wanna give it a try you can install it as a custom integrations:
https://github.com/tggm/core/blob/rointe-integration/homeassistant/components/rointe/INSTALL.MD

Ensure you’re at the rointe-integration branch

@tobinbrooke are you on Discord?

I have a single RointeD so would love to see an integration. Doubt I’d be much help in coding side but willing to help test etc.

Are you able to set the integration up so we can download via HACS? Would make it much easier to set up, test and update when you make changes?

Cheers

Ok, I tried following the installation instructions of copying the rointe folder to custom_components and I get the following error message in the log:

ERROR (SyncWorker_9) [homeassistant.util.package] Unable to install package rointe-sdk==0.0.1: ERROR: Could not find a version that satisfies the requirement rointe-sdk==0.0.1 (from versions: none)

I could select the Rointe integration, but upon doing so, the ‘Please wait while Rointe Heaters is being setup’ remained for a long while and then I got the error: ‘Error: config flow could not be loaded’

Any ideas?