# Econext: Direct local control of Grant HP290 Econet replacement (Plum ecoMAX360i)

**URL:** <https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758>\
**Category:** Heatpump\
**Tags:** grantr290\
**Created:** [8 February 2026 20:33 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758 "2026-02-08T20:33:10Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [8 February 2026 20:33 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/1 "2026-02-08T20:33:10Z")

</div>

I’ve finally managed to get the port working, so I can publish the code 🙂  
In case anyone is interested in getting this set up, here’s some instructions, the readme’s in the github repos have a bit more information on this but it’s hopefully straight forward:

**What you need:**

- Raspberry Pi or similar (emonPi works if you have SSH access)
- ecoLINK3 USB-RS485 cable (should be currently plugged into your econet300)

**Setup:**

1. Unplug the ecoLINK3 cable from the econet300 and plug it into your Pi
2. Log into the Terminal to install the gateway/webserver:

```auto
# This is a oneshot script that downloads the latest release, installs the webserver,
# integrates it as systemd service and starts the service.
curl -fsSL https://raw.githubusercontent.com/LeeNuss/econext-gateway/main/deploy/bootstrap.sh | sudo bash

```

1. Verify it’s running by opening `http://<pi-ip>:8000/api/parameters` in your browser - you should see all your controller parameters as JSON
2. Install the HA integration via HACS: add `https://github.com/LeeNuss/econext` as a custom repository (type: Integration), download, restart, then add the integration “econext” with your Pi’s IP
3. Optionally install the schedule card for editing weekly heating schedules: add `https://github.com/LeeNuss/econext-schedule-card` in HACS as a custom repository (type: Dashboard)

**Important:** Once you unplug the ecoLINK3 from the econet300, the econet24 cloud and app stop working. The econet300 module itself is no longer needed.

**Repos:**

- Gateway: [GitHub - LeeNuss/econext-gateway](https://github.com/LeeNuss/econext-gateway)
- HA integration: [GitHub - LeeNuss/econext](https://github.com/LeeNuss/econext)
- Schedule card: [GitHub - LeeNuss/econext-schedule-card](https://github.com/LeeNuss/econext-schedule-card)

This is a beta – I’ve only tested it on my own setup, both with controller and HP run the most recent grant software, so there are likely issues with different configurations. If you run into problems please let me know (ideally open a GitHub issue on the relevant repo) so I can track and fix them.

Here’s some screenshots of my Heatpump dashboard

 ![Screenshot From 2026-02-08 20-45-44](https://community.openenergymonitor.org/uploads/default/original/3X/f/9/f95a38b48df3f99e68d4353f82a01601dc2ca3b7.png)  
 ![Screenshot From 2026-02-08 20-45-55](https://community.openenergymonitor.org/uploads/default/original/3X/8/2/828b64330560155b001cc843938942fa50089bde.png)

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [16 February 2026 23:34 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/2 "2026-02-16T23:34:01Z")

</div>

Wow, this is outstanding! Very impressive @LeeNuss 👏 🥳

What is the protocol between the gateway and the Plum controller? Is it standard RS485 Modbus RTU? How did you manage to reverse engineer?

I look forward to giving it a go…I’ll report back

I hope you don’t mind me splitting this out to a new thread, it deserves its thread and will avoid confusion.

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [17 February 2026 01:54 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/3 "2026-02-17T01:54:26Z")

</div>

> [@glyn.hudson](#):
>
> I look forward to giving it a go…I’ll report back

Wow, amazing. It was super easy to setup, I had my emonHP right next to the Econet controller, so it was simple to move over the USB connection.

I’m running the gateway on my emonHP, then HomeAssistant is running on a separate device. I like the fact the gateway is nice and lightweight and easy to install with a single command!

Everything just seems top work! It’s very impressive 🥳

There are a few metrics I’m missing compared to my previous manual REST HA setup, maybe I’ve just missed them, but I can’t seem to find these metrics in the HA integration:

```
- actual_flow_temp (pram 14)
- actual_return_temp (pram 15)
- heat_pump_electrical_power (pram 211)
- heat_pump_thermal_power (pram 212)
- SCOP (pram 222)
- COP (pram 221)
- target flow temp (pram 12) - currently showing as 0 in econnext HA integration 

```

The thermal power and SCOP / COP figures are very wrong, but they might as well be included 🤣

I’ve noticed this error when adjusting the thermostat set-point temperature, the command works fine, but this error is visible:

 ![Screenshot 2026-02-17 02.15.16](https://community.openenergymonitor.org/uploads/default/original/3X/9/9/99c88d0b6991ae854fa3b2241209e0a86dbd4158.png)

I’ve also noticed that the following sensors are not updating:

- sensor.dhw\_temperature
- sensor.heat\_pump\_compressor\_frequency
- sensor.heat\_pump\_system\_pressure
- sensor.heat\_pump\_water\_flow\_rate
- sensor.heat\_pump\_target\_temperature
- sensor.home\_calculated\_temperature
- sensor.home\_room\_temperature\_setpoint
- sensor.home\_thermostat\_temperature

The outdoor temperature and indoor room temperature sensors are working fine.

---

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [17 February 2026 17:48 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/4 "2026-02-17T17:48:30Z")

</div>

It’s not Modbus, the physical layer is the same (RS-485), but the protocol is plums own “GAZ-MODEM 3” protocol.  
For reverse engineering: the econet300 runs embedded linux with python application/webserver, so the whole implementation is readable from the firmware. I extracted the file system from the flash (before realising you can simply get root access via two uart testpoints on it, would have been much simpler^^). Also ran that webserver with added debug logs to sniff the raw traffic between econet300 and the controller.

Great thanks yeah makes much more sense as separate thread 🙂

---

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [17 February 2026 18:22 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/5 "2026-02-17T18:22:29Z")

</div>

thank you so much for trying it. I just released an update for the HA integration (should show up in HA update) with the parameters you wanted (hadn’t added the cop values as I though they where just too wrong, but agreed might as well 🙂). also fixed target flow temp and the active\_operation\_mode error.

However I couldn’t find anything specifically wrong about the sensors that aren’t updating. They all work fine on my setup. If this is a persistent issue I might need some logs to figure out what’s wrong (will write up some instructions for this later)

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [18 February 2026 02:32 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/6 "2026-02-18T02:32:55Z")

</div>

> [@LeeNuss](#):
>
> For reverse engineering: the econet300 runs embedded linux with python application/webserver, so the whole implementation is readable from the firmware. I extracted the file system from the flash (before realising you can simply get root access via two uart testpoints on it, would have been much simpler^^). Also ran that webserver with added debug logs to sniff the raw traffic between econet300 and the controller.

Very impressive 👏

> [@LeeNuss](#):
>
> just released an update for the HA integration (should show up in HA update) with the parameters you wanted (hadn’t added the cop values as I though they where just too wrong, but agreed might as well 🙂). also fixed target flow temp and the active\_operation\_mode error.
> 
> However I couldn’t find anything specifically wrong about the sensors that aren’t updating. They all work fine on my setup. If this is a persistent issue I might need some logs to figure out what’s wrong (will write up some instructions for this later)

I’ve just tried the latest HA HACS integration (beta3), this has now fixed the sensor updating issue 🥳

Thanks a lot for adding the additional sensors. I’ve now moved over to running this as my main setup. I’ll let you know if I spot anything else. Very impressed so far.

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [19 February 2026 00:02 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/7 "2026-02-19T00:02:10Z")

</div>

I’ve been trying to set up the econet-schedule-card, I think I’ve got it installed correctly, but I’m getting this error:

 ![Screenshot 2026-02-19 00.00.39](https://community.openenergymonitor.org/uploads/default/original/3X/4/9/49099f1916b122c56c8cfa68b8958f3d60f59bbb.png)

Any ideas?

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [19 February 2026 01:04 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/8 "2026-02-19T01:04:52Z")

</div>

I’ve just noticed [you’ve got an emonhub interfacer](https://github.com/LeeNuss/econext-gateway/blob/main/tools/EmonHubEconextInterfacer.py) in the econext repoo. Does this work? Do you have an example config?

If this is functional, it would be great to get it merged into emonhub

---

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [21 February 2026 09:40 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/9 "2026-02-21T09:40:09Z")

</div>

Yes this works, happy to open a pr for thi. Have a look if there’s any other parameters you want to be added for emoncms. The api pulls over 1500 of them so I don’t want t just all of them being sent.

---

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [21 February 2026 09:50 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/10 "2026-02-21T09:50:20Z")

</div>

I think you entity prefix might be incorrect. Verify what the schedule entities begin with (you can see a list of them on the respective device page)

 ![Screenshot_20260221-094259](https://community.openenergymonitor.org/uploads/default/original/3X/9/f/9f7bc4704ad06d702aa571c9acab02f0c7359f1e.png)

This is my dashboard setup for all schedules. My circuit is called UFH (which is used as device name), I installed [simple tabs](https://github.com/agoberg85/home-assistant-simple-tabs) to have them all nicely organised like this:

 ![Screenshot_20260221-094555~2](https://community.openenergymonitor.org/uploads/default/original/3X/9/2/92a4028f2005633736c2bff2d429dd48d363ef1a.jpeg)

```auto
type: grid
cards:
  - type: markdown
    text_only: true
    content: "## Schedules"
    grid_options:
      columns: full
  - type: custom:simple-tabs
    tabs:
      - title: UFH
        card:
          type: custom:econext-schedule-card
          schedule_entity_prefix: number.ufh_schedule
      - title: DHW
        card:
          type: custom:econext-schedule-card
          schedule_entity_prefix: number.dhw_dhw_schedule
      - title: Heat Pump
        card:
          type: custom:econext-schedule-card
          schedule_entity_prefix: number.heat_pump_heat_pump_schedule
      - title: Silent Mode
        card:
          type: custom:econext-schedule-card
          schedule_entity_prefix: number.heat_pump_silent_mode_schedule
    column_span: 2
    grid_options:
      columns: full
column_span: 2

```

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [22 February 2026 23:32 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/11 "2026-02-22T23:32:02Z")

</div>

> [@LeeNuss](#):
>
> Yes this works, happy to open a pr for thi. Have a look if there’s any other parameters you want to be added for emoncms. The api pulls over 1500 of them so I don’t want t just all of them being sent.

I think the basic metrics are fine. The key things we need for the Emoncms MyHeatPump dashboard are:

FlowTemp, ReturnTemp, ElecPower, ElecEnergy, HeatPower, HeatEnergy, FlowRate, DHWtemp, OutdoorTemp

I think it’s also useful to have CompressorFreq, SystemPressure and FanSpeed,

> [@LeeNuss](#):
>
> I think you entity prefix might be incorrect. Verify what the schedule entities begin with (you can see a list of them on the respective device page)

Yes, you’re right I was using `schedule_entity_prefix: number.econext_dhw_schedule`, when actually the DHW schedule was `number.dhw_dhw_schedule`. It’s now working. Thanks 👍

> [@LeeNuss](#):
>
> This is my dashboard setup for all schedules. My circuit is called UFH (which is used as device name), I installed [simple tabs](https://github.com/agoberg85/home-assistant-simple-tabs) to have them all nicely organised like this:

Very nice

---

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [26 February 2026 14:41 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/12 "2026-02-26T14:41:33Z")

</div>

I reworked the interfacer a bit so parameters can be added via the config, keeping the default parameters from the previous version. PR here: [Add EconextGateway interfacer for GM3 heat pumps by LeeNuss · Pull Request #230 · openenergymonitor/emonhub · GitHub](https://github.com/openenergymonitor/emonhub/pull/230)

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [27 February 2026 00:46 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/13 "2026-02-27T00:46:28Z")

</div>

Sweet, it works really well. It’s been merged. I’ve added a config example with a few extra prams:

```auto
[[EconextGateway]]
    Type = EmonHubEconextInterfacer
    [[[init_settings]]]
        # Hostname or IP address of the econext-gateway
        host = localhost
        # Gateway API port
        port = 8000
    [[[runtimesettings]]]
        pubchannels = ToEmonCMS,
        # Poll interval in seconds
        pollinterval = 60
        nodeid = 30
        parameters = TempOutlet, TempReturn, ElectricPower, HeatingPower, Circuit1CalcTemp, Circuit1thermostat, flapValveStates
       # Full list of parameters: https://github.com/LeeNuss/econext-gateway/blob/main/docs/PARAMETERS.md

```

Nice work, thanks a lot 👍

Do you know the parameter name for SystemPressure?

---

<div class="post-metadata">

**Author:** ![sunnysideal](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/sunnysideal/32/35845_2.png) [@sunnysideal](https://community.openenergymonitor.org/u/sunnysideal)\
**Post date:** [28 February 2026 17:05 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/14 "2026-02-28T17:05:23Z")

</div>

Absolutely fantastic work! Installed very easily on a spare Pi I had lying around.

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [1 March 2026 17:05 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/15 "2026-03-01T17:05:00Z")

</div>

@LeeNuss do you if it’s possible to read the refrigerant system data that’s available on econet e.g

 ![Screenshot 2026-03-01 17.04.16](https://community.openenergymonitor.org/uploads/default/original/3X/1/7/17a3b358edb9b5b2ac4c3860fd0959d08980fc9c.png)

---

<div class="post-metadata">

**Author:** ![borpin](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/borpin/32/193_2.png) [@borpin](https://community.openenergymonitor.org/u/borpin)\
**Post date:** [1 March 2026 19:45 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/16 "2026-03-01T19:45:04Z")

</div>

> [@LeeNuss](#):
>
> For reverse engineering: the econet300 runs embedded linux with python application/webserver, so the whole implementation is readable from the firmware.

> [@glyn.hudson](#):
>
> Do you know the parameter name for SystemPressure?

If you can see the item on the original web page, then you may be able to extract the name from the page code.

---

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [3 March 2026 13:32 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/17 "2026-03-03T13:32:11Z")

</div>

it’s `AXEN_REGISTER_61`

---

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [3 March 2026 13:33 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/18 "2026-03-03T13:33:43Z")

</div>

definitely possible, will need to see which parameter is the EXV Valve Outlet Temp, the other one’s are easily to find. Will add this into the integration and make a new release with it later

---

<div class="post-metadata">

**Author:** ![LeeNuss](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/leenuss/32/35778_2.png) [@LeeNuss](https://community.openenergymonitor.org/u/LeeNuss)\
**Post date:** [5 March 2026 12:27 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/19 "2026-03-05T12:27:13Z")

</div>

Just pushed a new release for the HA integration adding these values (and a few more) 🙂

---

<div class="post-metadata">

**Author:** ![glyn.hudson](https://community.openenergymonitor.org/user_avatar/community.openenergymonitor.org/glyn.hudson/32/35003_2.png) [@glyn.hudson](https://community.openenergymonitor.org/u/glyn.hudson)\
**Post date:** [6 March 2026 23:37 UTC](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758/20 "2026-03-06T23:37:30Z")

</div>

Nice work, I just updated. All seems to be working well. I can now see the refrigeration metrics listed. Thanks 👍

[Next page](https://community.openenergymonitor.org/t/econext-direct-local-control-of-grant-hp290-econet-replacement-plum-ecomax360i/29758.md?page=2)
