Bonaire MyClimate - Creating a custom integration

Hi all,
My heating/cooling is an Australian brand called Bonaire. It’s a central ducted heating/refrigerating cooling system.
The company offer a wifi addon module called MyClimate with their own app available on iOS and Android.
Unfortunately their system is proprietary and I can only use their wifi module and not a 3rd party thermostat.
I was hoping some of you clever cookies might be able to assist me in utilising the app to write a custom Thermostat integration for HA.

I’ve never done anything like this before and was hoping someone could guide me, or even take the reins. I’m happy to pay for your time.

Thank you!

Hey, I’m thinking of getting the MyClimate system as well. Is it any good? I am new to HA so not sure how to do this.
I was actually thinking of getting their RF Navigator controller and use a RF hub to control the system.

I haven’t ordered/installed the myclimate yet.

I also thought about the RF controller. I wondered if it had 2 way signals, so if I controlled it from the HA, I could pick up rf signals with a sonoff rf bridge to keep the Navigator thermostat in sync and vice versa.

Not sure if there is a custom thermostat template component that can be created with RF signals.

I still think sniffing out the wifi app and creating a custom component would be ideal, but I literally have no idea where to start.

I have 2 rf linked Bonaire controllers, I have sniffed many other Rf devices with a custom 433mhz device I put together but these didn’t work, as a next step I bought an rtl-sdr to investigate more, at this stage my conclusion is that it’s somehow encrypted / rolling code rf so I am very sceptical about that angle working

If anyone finds an alternative please do update this thread

Interesting. So looks like RF is out of the question. Lucky, cause I was about to replace my wired thermostat with the RF model to try exactly that. I have the Sonoff RF bridge (tasmota) and the Broadlink RM pro.

Hopefully there is some other solution.

Anyone with ideas please?

I’m also interested in this, and have been looking for a solution without much success. I have a Bonaire evap cooler and ducted gas heater, both of which use the RF navigator controller. It would be great to control these via HA.

As has been previously mentioned, the RF controller uses rolling codes (probably encrypted), so that doesn’t seem like a viable approach. I also thought about using IR, but there doesn’t appear to be an IR interface for Bonaire that I can find.

Another solution might be to use something like IntesisHome. They support a lot of brands - unfortunately Bonaire isn’t listed as a supported brand, but perhaps there is a way to wire it up?

We could try to reverse engineer the MyClimate module - I don’t have this module and am not sure what comms protocol it uses.

Does anyone have any ideas on where to purchase a MyClimate module? A local dealer quoted me $600 for one module (I need two, one for evap cooler, one for ducted). This seems ridiculously expensive!

It seems the entire system is their own proprietary protocol.

I’d love to be able to reverse engineer the MyClimate module, which is why I started this thread in the first place. I just don’t know where to start with something like this.

The company that installed our system have quoted me $360 for the module supply only.

If you are interested, I could put you onto the retailer and maybe get this ball rolling?!

I am also interested and will be watching this thread eagerly.
We currently have a wired navigator controller.

I have bought the WiFi module for $270 from eBay and got it installed myself. Very easy to install.
Have been working on integrating the module with Google Home. Still doing some packet captures and managed to find the API url to control the module.
https://myclimate.bonaire.com.au/api/timestamp
You can find your API key within the App.
Won’t be easy to reverse engineer the WiFi module itself. Best way to achieve this is by using the API.

1 Like

This is excellent!

Do you think you’ll be able to integrate it into home assistant?

I know on the myclimate website, they have google home integration “coming soon”, but that’s been there forever. Lol

Excellent news regarding the API, thanks.

Also, thanks for pointing me in the direction of eBay. I’ll buy the module in the next few days and will start to play around with it

Very excited to see the ball rolling in this.

Please keeps us updated with any progress. :blush:

I received my kit today and have started doing some packet captures. It appears that on the local network the MyClimate kit uses port 10002.

Here is an example POST I pulled

<myclimate>
<post>postzoneinfo</post>
<zoneList>1,2,3,4</zoneList>
<system>on</system>
<type>heat</type>
<mode>program</mode>
<setPoint>20</setPoint>
<fanSpeed>0</fanSpeed>
</myclimate>

I haven’t had much success yet getting manual requests through to MyClimate. Let me know if you have better luck. But at least we’re getting somewhere!

To follow-up… I’m still not able to figure out what protocol MyClimate uses (websocket, REST, other?). The payload data is XML (see my previous post), and should be very easy to send custom commands. But I still can’t connect to myclimate locally on port 10002.

Please keep us updated if you have made progress on this.

Alternatively, we could try using the web API (https://myclimate.bonaire.com.au/api/), but my strong preference would be to have a solution that works independent of Bonaire’s servers.

1 Like

Very excited to hear some progress being made.
How difficult would it be to implement via the api vs directly, and then changing it later if there is an alternative solution found?

Sorry, I’m really not that savvy when it comes to the nitty gritty stuff.

I’ve tried doing a packet capture on the API using Wireshark… all I can get is the API URL, and some references to Starfield Technologies (which I presume issued the SSL certificates for Bonaire). The rest of the data seems to be encrypted and, since the API is undocumented, I’m not sure how to work it out… it’s a bit beyond my expertise sorry.

Also, on the local network. I’ve figured out that when you open the app it makes a UDP broadcast on port 10001 to all devices on the network, which include some key details such as the app version and IP address of the phone. Upon receiving this, the MyClimate opens up a TCP connection with the app on port 10003, and sends some basic info. Subsequently, all commands are executed on TCP port 10002 using XML payloads.

The reason I couldn’t manually connect to MyClimate earlier is because it won’t accept TCP connections until the app makes a UDP broadcast to enable discovery.

This is about as far as I can get, and hopefully it’s helpful to someone. Unfortunately I’m not experienced in developing home assistant integrations so can’t really take it much further.

By the way, some of the metadata I’ve found seems to point to a guy called Jason Dorsey, who is an engineer and R&D manager at Climate Technologies. I suspect he was involved in developing the MyClimate kit. Maybe worth trying to contact Jason to see if there’s an chance he’s willing to help or share some documentation on the API?

I’ve made a little bit more progress.

I can now get the system status by making a GET request to https://myclimate.bonaire.com.au/Api/State

You will need to add a header called “X-Authentication-Key” with the value set to your API key (which you can find in settings in the app).

This will spit out the system status in XML that looks like this (this is based on my heater, yours may look slightly different depending on zones, etc):

<myclimate>
    <post>postzoneinfo</post>
    <system>on</system>
    <type>heat</type>
    <zoneList>1,2,3,4</zoneList>
    <mode>program</mode>
    <setPoint>20</setPoint>
    <roomTemp id="1">20</roomTemp>
    <roomTemp id="2">20</roomTemp>
    <roomTemp id="3">20</roomTemp>
    <roomTemp id="4">20</roomTemp>
</myclimate>

You can then POST to the API at https://myclimate.bonaire.com.au/Api/Instruction
Use the exact same format as the system status output to send instructions to the system. You can verify that your instructions have been successful using GET https://myclimate.bonaire.com.au/Api/State as above

Note, in order to POST you will first need to lock with the API by submitting a GET request to https://myclimate.bonaire.com.au/Api/Lock

Once you’re finished, don’t forget to DELETE your lock so there’s no conflicts with your other devices.

Does anyone have any ability to implement these API calls in a Home Assistant integration? I imagine it shouldn’t be too hard now that we know the content

I’m so impressed. I certainly would not have had the means to do this, but I’m glad I created this thread to get the ball rolling.

Hopefully someone has the know how to take everything you’ve found and help us create an integration.

I wonder how the zones will integrate? I have 4 zones running in our system.
Do other climate integrations for HA have this option?

Hi elvynliu,

I have been closely following the progress you have been making and I have to say you are really starting to open this API up.
I have a Hubitat myself (don’t hold that against me) and have developed a few device handlers for it and I’m hoping that once I get my head around some of the specifics I’ll be able to write a device handler for the Bonaire MyClimate system.
I think the only thing I need clarity around is how the locking mechanism works. Would you be able to expand on how you were both able to initiate a lock and then delete the lock once a setting change was made? I have had success using curl to get the units status, but not establish a lock or configure my unit.

curl -H “Accept: application/xml” -H “Content-Type: application/xml” -H “X-Authentication-Key: 12345678901234567890” -X GET https://myclimate.bonaire.com.au/Api/State

Hmmm. That’s strange - the lock isn’t working for me either. I’m pretty sure I got it to work once before, but now I’m getting a 409 conflict error when I try to lock. The app works fine though.

I spent some time on the weekend trying to debug this. I’m using Postman and have made sure that my API requests are the same as the app (identical headers, etc). The 409 error suggests that another device has a lock with the API. I’ve closed the app, and tried deleting the lock, but still get the error. There must be something we’re missing?

I’ve also decompiled the Android app into its java source code. That hasn’t shed much light on the 409 error, but it appears that it’s using Cisco CloudLock to establish the lock. Happy to share the source code if that’s helpful.