Modbus & Acetec EvoControl

Hi,

I have some experience with Modbus, but this one is stumping me. I have a Acetec EvoControl air system, which can be read by Modbus. The service has a series of registers, both holding and input, which I can retrieve - So I know I have it connected.

I am using the ModBus feature within HA to configure a thermostat, but I am getting stuck on the exact configuration. I have read through many posts, which partially give me different options and read through the HA Modbus configuration which is good, but it doesn’t cover all values in detail. I am using the latest version of HA (2026) on a RPI5.

I have the following configuration for “climate”

modbus:
  - name: EvoControl
    type: tcp
    host: x.x.x.x
    port: 502
    delay: 30
    message_wait_milliseconds: 3000
    timeout: 5
    climates:
          - name: "Temperature"
            address: 211
            input_type: holding
            count: 2
            data_type: custom
            max_temp: 40
            min_temp: 10
            offset: 0
            precision: 1
            scale: 0.1
            structure: ">f"
            target_temp_register: 1011
            target_temp_write_registers: true
            temp_step: 1
            temperature_unit: °C
            hvac_mode_register:
             address: 1011
             values:
                    state_off: 1
                    state_cool: 2
                    state_auto: 3
                    state_dry: 4

In Swedish (so I welcome any local people who have done this) I have the following parameters to write too (anything with a 4) - Parameterlista - EvoControl Ventilation - Touch Display - 1

I current am trying to write to 1010 (it is 1011 since I need to add a 1 to write in the config) on the value “target_temp_register” - ModBus - EvoControl Ventilation - Touch Display - 1

I understand that for that value you need to have several modes, which I think my system does, but not tied to one register. So I have a “hot” on one register, “cold” on another, though it (HA) seems to only accept one value - I saw a forum post of where you can stack them but didn’t get that to work with brackets.

Logs are reporting back without error - I did have before the error “errorTrue”, which I think I have now removed with the correct register, but I can post them if required.

What I would like to achieve is to be able to control three modes, Low, Medium, High and set the temp - nothing unusual.

Any thoughts?

Hello,

your indenting looks not correct I suggest you recheck it, I just corrected what i could see here above.

modbus:
  - name: EvoControl
    type: tcp
    host: x.x.x.x
    port: 502
    delay: 30
    message_wait_milliseconds: 3000
    timeout: 5
    climates:
      - name: "Temperature"
        address: 211
        input_type: holding
        count: 2
        data_type: custom
        max_temp: 40
        min_temp: 10
        offset: 0
        precision: 1
        scale: 0.1
        structure: ">f"
        target_temp_register: ????
        target_temp_write_registers: true
        temp_step: 1
        temperature_unit: °C
        hvac_mode_register:
          address: 1011
          values:
            state_off: 1
            state_cool: 2
            state_auto: 3
            state_dry: 4

I believe you redacted to IP, so x.x.x.x is your IP.

As far as I understand swedish (small or null understanding) you unlikely have on the same register the target temperature and the HVAC mode.
As I understood the HVAC preset modes are on 1010, so 1011 if you have the shift, and target temperature cannot be on the same.
From the documentation, I could not understand what is the display for but it has not a target temperature, so you have to setup a list for registers of target temperature for each mode.
It looks like you can set and use Temperatur Comfort, Temperatur Spar etc…, register 210, 211 etc…

so you should have the following look like code:

target_temp_register: [REG_OFF, REG_COOL, REG_AUTO, REG_DRY, REG_HEAT_COOL, REG_FAN, REG_HEAT, REG_OFF]
target_temp_write_registers: true
temp_step: 1
temperature_unit: °C
hvac_mode_register:
  address: 1011
  values:
    state_off: 1
    state_cool: 2
    state_auto: 3
    state_dry: 4

see this post for an example: Modbus Climate: multiple target temp register - #9 by crug80

and remember that from docs you should have 7 register for the 7 potential settable mode.
You will have to set different target temperature register to fit you hvac modes, like HEAT COOL can be you Tempertur Komfort.
See documentation Modbus Target temperature: Modbus - Home Assistant

Hope it helps and that I have not misinterpreted swedish :slight_smile:
And just for curiosity is this an heat pump, an heat exchanger air circulator or air heating system?

Does this help with troubleshooting?

Hi,

Thanks. @AutoDIY, thanks for the help. This information is where I was searching and didn’t truly understand the configuration. I now see where I was misconfiguring Modbus. So I took your configuration and applied, where now I am reporting an error with the configuration loading (similar to what I was seeing before) - with it being wrong

Configuration as followed.

    climates:
          - name: "Temperature"
            address: 211
            input_type: holding
            count: 2
            data_type: int32
            max_temp: 40
            min_temp: 10
            offset: 0
            precision: 1
            scale: 0.1
            structure: ">i"
            target_temp_register: [REG_OFF, REG_COOL, REG_AUTO, REG_DRY, REG_HEAT_COOL, REG_FAN, REG_HEAT, REG_OFF]
            target_temp_write_registers: true
            temp_step: 1
            temperature_unit: °C
            hvac_mode_register:
                address: 1011
                values:
                 state_off: 1
                 state_cool: 2
                 state_auto: 3
                 state_dry: 4
                 state_heat: 5
                 state_fan_only: 6
                 state_heat_cool: 7

Just for arguments sake, I use 1-7, these can be set to any value within that list.

The logs are reporting back an error with regard to it not being an Integer, so this configuration is my attempt to resolve that. This is where I am stuck.

2026-01-10 11:58:32.850 ERROR (MainThread) [homeassistant.config] Invalid config for 'modbus' at configuration.yaml, line 33: Invalid target temp register. Required type: integer, allowed 1 or list of 7 registers for dictionary value 'modbus->0->climates->0->target_temp_register', got ['REG_OFF', 'REG_COOL', 'REG_AUTO', 'REG_DRY', 'REG_HEAT_COOL', 'REG_FAN', 'REG_HEAT', 'REG_OFF'], please check the docs at https://www.home-assistant.io/integrations/modbus
2026-01-10 11:58:32.850 ERROR (MainThread) [homeassistant.setup] Setup failed for 'modbus': Invalid config.

You are correct in assuming x.x.x.x is my IP, buts that just for example. It has no impact, since I know it is connected from other sensors.

With the additional help of @IOT7712, I installed the Modbus tool. Since it is TCP, I can only have one connection. So with that tool, I managed to read a register, with TCP and it reported back a result. It said it was int32, count 2, which is why the configuration displays “int32” rather than custom. This was on 1100.

My questions are:
-Do I need to have all 7 registers configured - I understand that you said it, but you gave me 4, along with the additional link only displayed 4 (this is more for future reference) - 7 are configured.
-Why is there 8 values in the list, and why is reg_off repeated - I thought this was a mistake, but seeing your config and the other one, it has it twice. This is not clear

As far as your understanding goes, you are correct in your assumptions. This is a FTX system that pumps air around the house based on a temperate. So this is not “heating”, but it provides heat, cold air etc. We have to remove Radon from our house and remove moisture - Which it works fantastically. What I want to achieve in the bigger picture is the automation that says "if radon is >x, set to “a mode”. I have something pulling radon, so I can reference that and can clearly see that if a mode is set (say high) it will remove the Radon.

For anyone else who may have radon, I would recommend “airthings” and to remove it then an FTX or other fan systems. I spent ages trying to find the best system and results are amazing - going from a “high dose” to a “maximum recommended dose” overnight. maximum dose is actually 0, but you can’t help what houses are built from in the 1960s, or what ground you live on (ish)

Thanks for your help so far. I think I (we) are close :slight_smile:

The [REG_OFF, etc] should be replaced by register number like 201 etc…
Positionally corresponding to the mode, so if state off is the first among the hvac_mode_register value the register for target temperature corresponding to off should be the first in the list of the target_temp_register.

register off is repeated by my mistake :slight_smile:

the documentation report 7 values have to be set because the possible available hvac modes are 7. you can just repeat the first four register if you need only 4.

I hope this clears your doubts!!
I sincerely never used the list, but as it is described in docs I trust the documentation :slight_smile:

Thanks @AutoDIY

Following on this topic, @IOT7712 recommendation I have made some developments. I have been in conversation with the owner who is adding support for the EvoControl for other users.

I would recommend that service since it was nice and easy to set up and now able to pull 24 sensors easily. One thing to note is there is still some more effort to go with that service, but I think that it is fantastic. The owner has supported my requirements and has a really good tool.

For people who want understand a bit of Modbus, use this over writing Modbus in Yaml.

Thanks for the help.

Can we have some more detail for others that might follow in this thread?
I note the vendor has given quite comprehensive details of the modbus parameters - encouraging.

I am using an AceTech Evocontrol FTX system are read roughly 25 registers, and write a handful. Temperature settings for example. I have built a template and I think this will be available for other users in the near future.

Currently the vendor has several others:

  • SDM330
  • SDM630 Full/Basic
  • Growatt 3500/5000 ES EX
  • Shelly Pro
  • SystaComfort II
  • SystaSmart C
  • Victron Energy
  • Waveshare DI8/Relay8/TH

I don’t know what most of these are, but even if it is not templated, users can easily add different Modbus entities via a feature and then export a template. One thing to note is that an update currently removes templates, so make sure you have a backup - but if you build one, update, you can then export to recover it also.

Recently added have been some features for Device Class, State Class and Category which I tested this morning and need some extra work, which I am sure will come in good time.

You can also edit registers, and it’s pretty clear in how to do so. Exporting and importing a template allows more fining turning, but this might come as UI improves.

For just reading Modbus, this has been the best available and easiest to use.

Update: 0.4.7 fixes above issues