Controlling Ecoforest heatpumps via Modbus

I got some progress in controlling the heatpump via the bus.

First note: controlling the heatpump by bus AND digital inputs for heating/cooling works!

Second note: before the heatpump responds to commands via Modbus, you first need to enable ‘remote control by bus’ in the installer menu.

Then you need to send via Modbus that you want to ‘control by bus’: send a ‘1’ to address 5221. (To disable it you can send a ‘0’ )


I got the DHW working by enabling parameter 5222 (set it to ‘1’ to enable DHW demand)
Then you need to set the target temperature at parameter 134 with the desired value.

A thing I mentioned while enabling the control by bus is that the combined heating and cooling demand switched to heating only. I could not figure out what to set to make it combined and/or to cooling. If anyone finds the parameter or knows how to control, you’re welcome.


I also found a few parameters that are not documented by Ecoforest:

    - name: Heatpump Thermal Power DHW Min
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 74
      lazy_error_count: 10
      data_type: int16
    - name: Heatpump Thermal Power DHW Max
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 75
      lazy_error_count: 10
      data_type: int16
    - name: Heatpump Thermal Power Heating Min
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 76
      lazy_error_count: 10
      data_type: int16
    - name: Heatpump Thermal Power Heating Max
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 77
      lazy_error_count: 10
      data_type: int16
    - name: Heatpump Thermal Power Cooling Min
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 78
      lazy_error_count: 10
      data_type: int16
    - name: Heatpump Thermal Power Cooling Max
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 79
      lazy_error_count: 10
      data_type: int16
    - name: Heatpump Thermal Power Pool Min
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 80
      lazy_error_count: 10
      data_type: int16
    - name: Heatpump Thermal Power Pool Max
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 81
      lazy_error_count: 10
      data_type: int16

(not sure if int16 is ok in this setup)

And for the distribution pumps:

    - name: Heatpump Production Pump
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 5033
      lazy_error_count: 10
      data_type: int16
    - name: Heatpump Brine Pump
      unit_of_measurement: "%"
      scale: 0.1
      slave: 17
      address: 5034
      lazy_error_count: 10
      data_type: int16

(I have added the lazye error counts to suppress the no_data read from bus errors and giving ‘unavailable’ as value in the logs.)

2 Likes