A project log for Reverse Engineering Grant ASHP Remote Protocol

Reverse engineering the protocol used by our Grant ASHP remote.

mjc506mjc506 10/24/2020 at 11:040 Comments

Now, software...

I have an OpenEnergyMonitor EmonPi set up here, which monitors my electricity use. OpenEnergyMonitor does have a project to monitor heat pump performance, but relies on its own sensors that need installing within the system, including an expensive heat flow meter. My heat pump includes all of these sensors (apart from the heat flow meter), and can report their readings through the remote, so it seemed sensible to try to get the data from the system instead of installing a load of duplicate sensors.

From a cold start, to start reading data, you must wait for the ASHP and remote to initialise (~30secs), then once the system reaches standby/operation, hold the 'back' button on the remote for ~3 seconds. This takes the remote to a 'parameter read' screen. It is then possible to select the parameter to be read by pressing the 'up' and 'down' buttons, and request the data with the 'tick' button. The ASHP will then send the data to the remote, which displays the number on screen. It is possible to request data from parameters 00 to 99, but the vast majority of these are empty. The manual lists parameters 00 to 09, and there are a few additional undocumented ones higher up, but these have not been identified. 00 to 09 contain all the interesting ones, anyway.

Once remote sends its first request and receives the data, it can then select and send the next request, cycling through 00 to 09, and then back down again. Iterating through this will receive all the useful data.

Additionally, the ASHP periodically sends other data - this includes date/time, status (power, fan, pump, compressor, DHW and CH demands), and outside air temperature. These can not be requested, so we must listen for these. (Actually, we can, and do, request outside air temp, but the response is to the nearest degree celcius. The oat sent periodically is to the nearest half degree, so this is 'better'. We ignore the requested OAT.)

We also read a DS18B20, which is stuffed into a thermostat pocket on the hot water cylinder. This is read every 5 seconds (this is overkill, but hey ho)

As the esp receives the data, it sends it to the EmonPi using it's api. This is relatively simple.

As the remote is now less useful (when the esp is cycling through, requesting data, the standard display is unavailable) we also run a http server on the esp, showing a 'pretty' status display with pumps, fan, compressor status and temperatures.