Reclaim heat pump HWS

Hi all,

I recently had a Reclaim 2.0 wifi heat pump installed and I would like to add it to home assistant. I came across this thread and I would like to help.

I haven’t done any programming before but if anyone can point me in the right direction how to reverse engineer how to app connects to the controller.

There is no login to the controller it just has a wifi “code” that you use to connect to the controller from your app. If you put in the ip of the controller in a browser you get the attached image of libraries used in the controller (esp32 based).

Is there anyone who is keen to try make an integration? I can get whatever info they need.

I also contacted Reclaim directly if they had an API and they are apparently working on it but nothing concrete.

1 Like

While waiting for the API to be available (& someone to write an integration) you can control & monitor the heatpump power by adding a relay to the circuit - eg Shelly +PM1

I followed up my email to Reclaim and they said the API is about 3 months away

1 Like

@harold_boom Hi Harold, please post back in this thread if/when you get details back about the v2 API. Is this a local API or a cloud API?

Because I took a very quick look - the v2 controller appears locked down (although as you point out, it has a http server open for the esp32-wifi-manager but does it support an API as well at special URLs?). It seems to talk to Dontek (the controller maker) and servers (perhaps theirs) in AWS on a regular basis. I assume this is to send back stats for the app.

As you may know, the v2 system switched to modbus, which could be another way to get access at a lower layer, to what degree I’m not sure. Ideally we get access at an API level. I’d really prefer talking directly/locally to the controller.

2 Likes

My understand is that the COP is dependant not only on ambient air temp but also the water temp.

So you will get a better efficiency (COP) with the water at 25 °.

About to have this heatpump installed here in Aus. Is it worth going for the WIFi version or having 1.1 controller and managing it with the separate esp32 device to push the boost button when needed?

If wifi is constantly pinging out to cloud, its kinds overkill to have it as the app will not be used anyways.

Hi all,

Looks like latest app update has api access for SolarAnalytics. I signed up to try it out, there is a HA integration of sorts for SolarAnalytics.

Bit of a round about way of getting energy info but I will see if I can get it to work.

So far I can’t get it to work. Can’t add it to SolarAnalytics so I have contacted them for support

Apologies I’m taking the wording from Reclaim. I can only surmise they use this wording due to thermal layer boundaries in the tank meaning it takes longer?

I haven’t done any more work on my system due to other priorities.

Sorry for the long delay in my reply. I was laboring under a misconception (misrecollection?) that my system was v1.1 It is in fact v1.0. (The fact that your link to the v1.1 manual showed a completely different controller was my first clue!)

In the v1.0 manual there is no direct reference to the Remote terminals (they are visible in a photo - but not mentioned). They told me that they were non functional and only provided for future upgrades - but I have now had the time to do some experimenting and can confirm that they are in fact operational on the V1.0 system. Needs a dry contact pulse of about 5 seconds to achieve the exact same function as a click on the Boost button.

In my case, this is ideal for what I wanted. Will leave it in mode 3 to Heat (if required) on the Off Peak rate at night, and trigger a boost cycle if my solar batteries are at 100% and the export power is X kW and the calculated remaining solar radiation for the day is Y kWh. (I will have to do some measurements to work out the best values for X and Y). Have just bought a Shelly 3EM on the Black Friday sales, which when installed will give me the ability to measure the HWS power consumption, confirm when the Off Peak rate gets switched on, and control the remote boost function (will use the other two channels for other purposes).

I’m annoyed it took me so long to get around to it, but the result is exactly what I was hoping for.

1 Like

Just checking if anyone’s managed to get this unit talking to Home Assistant? I’m looking around at options and this seems promising, ideally with local control.

I’m looking at this myself. Just checked with Reclaim, seems like opening up their API beyond Solar Analytics might still be another year away or more, doesn’t sound promising. I’m going to try installing a simple Shelly 1 switch to activate boost function, but I’d love to have access to the system temperature readings to make smarter decisions on activation time. The units don’t like to be activated when temps are too high. I’m thinking I’ll only activate if below 50degC or something, if I can access this. Anyone have ideas on this?

I am interested in the performance that you get with two Sandens in parallel.
We need 16-20kW of heat for our hydronics in the floor. We are currently considering Four Reclaim HP in parallel to achieve that. They would be plumbed into a manifold for flow and a manifold for return. These then connect to a 200Litre buffer tank. The floor pumps are on the other side of the buffer tank and have mixing valve to limit temperature to the floor.

How are your Sanden heat pumps plumbed?
What has been the performance?
Radiators or floor coils?
Thanks,
Steve.

That’s a pity because we will be in the market for a new HWS shortly.

In our previous house I had a solar HWS and was able to slide a temp sensor in beside the thermostat in the tank - and get a proxy of the power being used. This meant I could see in HA the current temperature and the energy used that day, week etc.

For me knowing the temperature of the water is really handy (do I need to give it an extra hit?) as well as the power use.

Steve,

Sorry did not see this one earlier.

We have infloor hydronic (and some buried in our besser block internal walls also) We use a Swimming Pool heat pump that heats a 5000L buffer tank - the Swimming pool pump is nominally 28Kw - but only under ideal conditions)

We put our set point at 36c for the buffer tank and heat it up as much as possible during the day with free solar - we then run circulating pumps from this to the infloor manifolds

The heat pump was only about $6K (would go biger if i did it again) - then main thing is having the space to place a large water storage tank (ours is just a poly tank)

You could easily do variations on this with puttng a reclaim/sanden system into the mix to run overnight for example

We brought our running costs over winter down from about $2.5K in Gas to about $300 in electricity for the last two years

Craig

1 Like

I can’t talk about the V2 Controller communication but I can talk about what I know about the iOS App and the information it retrieves. If you close your app for, say, 10 hours and open it again, it will retrieve the last 120 records? (10 hrs x 12 per hour). You can use the JSON to graph what is going on if that is of interest. I’m pretty time poor so I might dip in and out now and again and see what elsi I can work out.

The app seems to communicate with:

A typical request being:

{
    "TableName": "xxxxx_xxxx",
    "Limit": 3000,
    "FilterExpression": "attribute_not_exists(faults)",
    "ExpressionAttributeValues": {
        ":v_to": {
            "S": "2024-06-28T20:15:41"
        },
        ":v_from": {
            "S": "2024-06-28T16:00:15"
        },
        ":uniqueDeviceId": {
            "S": "xxxxxxxxxxxxxxxxx"
        }
    },
    "ExpressionAttributeNames": {
        "#uniqueDeviceId": "uniqueDeviceId",
        "#ddb_datetime": "datetime"
    },
    "KeyConditionExpression": "#uniqueDeviceId = :uniqueDeviceId and #ddb_datetime between :v_from and :v_to"
}

A typical response being:

{
    "Count": 2,
    "Items": [
        {
            "ambientTemp": {
                "N": "12"
            },
            "caseTemp": {
                "N": "32.5"
            },
            "compressorSpeed": {
                "N": "2820"
            },
            "compressorStarts": {
                "N": "48"
            },
            "compressorTime": {
                "N": "94"
            },
            "datetime": {
                "S": "2024-07-04T13:10:00"
            },
            "dischargeTemp": {
                "N": "84"
            },
            "evaporatorTemp": {
                "N": "3"
            },
            "fanMotorSpeed": {
                "N": "580"
            },
            "inletTemp": {
                "N": "14"
            },
            "inputCurrent": {
                "N": "4.23"
            },
            "outletTemp": {
                "N": "63"
            },
            "powerUsage": {
                "N": "1015"
            },
            "suctionTemp": {
                "N": "10"
            },
            "tankTemp": {
                "N": "55"
            },
            "uniqueDeviceId": {
                "S": "xxxxxxxxxxxxxxxxx"
            },
            "waterPumpSpeed": {
                "N": "1300"
            }
        },
        {
            "ambientTemp": {
                "N": "11"
            },
            "caseTemp": {
                "N": "32.5"
            },
            "compressorSpeed": {
                "N": "2820"
            },
            "compressorStarts": {
                "N": "48"
            },
            "compressorTime": {
                "N": "94"
            },
            "datetime": {
                "S": "2024-07-04T13:15:00"
            },
            "dischargeTemp": {
                "N": "87"
            },
            "evaporatorTemp": {
                "N": "3"
            },
            "fanMotorSpeed": {
                "N": "580"
            },
            "inletTemp": {
                "N": "15"
            },
            "inputCurrent": {
                "N": "4.663"
            },
            "outletTemp": {
                "N": "63"
            },
            "powerUsage": {
                "N": "1119"
            },
            "suctionTemp": {
                "N": "10"
            },
            "tankTemp": {
                "N": "57.5"
            },
            "uniqueDeviceId": {
                "S": "xxxxxxxxxxxxxxxxx"
            },
            "waterPumpSpeed": {
                "N": "1300"
            }
        }
    ],
    "ScannedCount": 2
}
1 Like

Hi All,

I’m doing a bit of work on this also. The controller itself publishes data every 5min using mqtt to aws-iot core. The app also talks mqtt to aws-iot in addition to the dynamodb stuff noted above (at least the android one does). Performing actions in the app (e.g. activating boost) are performed over mqtt.

All the communications are tls protected and appear to correctly perform certificate checking, thus it does not appear to be possible to direct your controller to talk to a local mqtt server instead of amazon.

It is however quite easy to obtain the necessary credentials to poll the data yourself from aws (just like the app does)

I currently have a working mqtt bridge that polls my V2 controller using aws-iot core mqtt and then re-publishes that data to home assistant entities via my own mqtt server. I am planning to re-work this into a native integration.

Screenshot from 2024-07-08 10-35-32

6 Likes

Great work @david-collett, this is awesome! Let us know when you’re ready to share the code or get more testings done.

1 Like

OK, I have an integration ready for testing!

To install, copy the custom_components/reclaimenergy folder to your home assistant custom components folder.

IMPORTANT NOTE:
I have chosen not to include reclaims aws hostname and identity pool ids in the repo at this stage. These can be obtained from the android apk. The values must then be entered at the top of reclaimv2.py. Let me know if you get stuck.

After restarting home assistant, you should be able to add the integration. It will ask for your unique identifier, this is the long number at the bottom of the sticker on your unit (or with the manual). It is the same number encoded into the QR code on the sticker.

Please let me know if you have success.

Dave

3 Likes

Nice work - Not being familiar with Android it’s been a bit of an adventure. I’ve found PoolID and Region in awsconfiguration.json but can’t find Hostname anywhere. Any pointers would be grateful. I’ve got it working in HA and asking for the Unique Device ID so I’m getting close.