ModBus convectors: climates error address

Hi guys, I need some info to better understand how HA works with modbus.
Hi have 7 different convectors and I’ve correctly integrate the temperature reading using sensors and errors using binary following the official HA modbus guide
Now I’d like to work with them using the climates, but it doesn’t work because it seems that there is an error parsing the yaml causing that the entity doesn’t appear.
I’m using a plitted conf. so I’ve have an entry of my modbus.yaml:

climates: !include modbus_climates.yaml

Here the yaml code:

- name: "Skudo_1000_Soggiorno"
  unique_id: "fc_skudo_1000_sog"
  slave: 21
  hvac_mode_register:
    address: 28302
    values:
      state_heat: 4
      state_cool: 1
      state_auto: 0
      state_dry: 2
      state_fan_only: 3
  hvac_onoff_register: 28301
  input_type: holding
  max_temp: 35
  min_temp: 15
  precision: 1
  scale: 0.1 
  target_temp_register: 28311 # target heat temp

The logger shows the following error:

           ^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/modbus/validators.py", line 258, in duplicate_entity_validator
    addr = str(entry[CONF_ADDRESS])
               ~~~~~^^^^^^^^^^^^^^
KeyError: 'address'

Found the problem: from the documentation is not clear that it is required one more address, that it is the current temp.

Now I have new problem:
This the new code that works for the temp, but not for On/off:

- name: "Skudo 1000 Soggiorno"
  unique_id: "fc_skudo_1000_sog"
  slave: 21
  input_type: input
  address: 46801
  precision: 1
  scale: 0.1 
  hvac_onoff_register: 28301
  hvac_mode_register:
    address: 28302
    values:
      state_off: 0
      state_heat: 4
      state_cool: 1
      state_auto: 0
      state_dry: 2
      state_fan_only: 3
   #   state_heat_cool: 5
  max_temp: 35
  min_temp: 15
  target_temp_register: 28311 

the log shows:

2023-12-09 18:15:08.638 ERROR (SyncWorker_1) [homeassistant.components.modbus.modbus] Pymodbus: hub_termica: Error: device: 21 address: 28301 -> Exception Response(134, 6, IllegalFunction)

I suppose that the problem is the input_type. In fact only the temp is an input register, the others have to be holding, but it seems that I cannot duplicate input_type.
How can I manage registers coming from input and holding?

Solved again… I have to enable the write multiple registers.
Now the basic functionality is gone…
The last problem is that my convector has different registers to set the target temperature: one for heating mode, one for cooling and one for auto.
Can i use template for that, in your opinion? If yes, how…

target_temp_register : ??!?!?

Any news? we have the same fancoil and I still can’t manage them well…
Can you please help me?

Hi Spale,

latest version of the modbus integration allows the correct management of such kind of fancoils. I have personally worked on it.
Which is your problem?

I have created scripts for every kind of actions (turn on, turn off, heat mode, cool mode, dry mode, fan speed 1, etc…). I control them as a kind of virtual remote to send commands but it’s not pretty reliable. Sometimes they randomly turn on and back off without doing anything.

I’ve updated yesterday to the latest version of HA and now the modbus sensors of the fan coils are constantly unavailable. They get read correctly for a couple of minutes and then they become unknown periodically.

Could you please attach me your config for a fancoil?

I’ve tried updating to the latest Core version but I’m having problems with the Modbus integration which makes sensors unavailable for the most part of the time.

Rolled back to 2024.2.5 and my sensors work fine again BUT I’ve also created a climate entity like yours which displays correctly the status of the fantail but it can control it.
If I send commands from my scripts the fancoil changes statuses, modes and speeds but if I try from the climate entity nothing happens.

Can you please give me your entity config as we have the same fancoil? Maybe I’m wrong on something…
Thank you very much!!

This is my climate config for a Skudo fancoil. It works stable, I’m on 2024.3.3. Not tested the last one of April.

- name: "Skudo 1000"
  unique_id: "fc_skudo_1000"
  device_address: 21
  input_type: input
  address: 46801
  scan_interval: 40
  precision: 1
  scale: 0.1
  hvac_mode_register:
    address: 28302
    write_registers: true
    values:
      state_off: 0
      state_heat: 4
      state_cool: 1
  write_registers: true
  hvac_onoff_register: 28301
  max_temp: 35
  min_temp: 15
  target_temp_register: [28312,28310,28310,28310,28311,28311,28311]
  target_temp_write_registers: true
  fan_mode_register:
    address: [28303]
    values:
      state_fan_off: 0
      state_fan_on: 1
      state_fan_low: 2
      state_fan_medium: 3
      state_fan_high: 4

The only limitation is that Skudo uses different registers for AUTO, one for heating and one for cooling. HVAC mode of Home Assistant has not this feature, so I’m using only heat/cool mode and it is enought for me.

NOTE that using multiple addresses ofr the target_temp_register is available from the 2024.3, so if you don’t want to update, you have to replace this target_temp_register: [28312,28310,28310,28310,28311,28311,28311] with a single value.

Thank you very much!!

I made some modifications with all the specs for the IdealClima fancoil.
My model is Ikaro but I think it’s the same of your Skudo as registers seem to be the same.
Everything works perfectly except for the “Fan only” mode which is written on the fancoil docs but actually it refuses to write 3 on the register and instead it goes to dry mode.

  - name: "Clima Soggiorno modbus"
    unique_id: "clima_soggiorno_modbus"
    device_address: 1
    input_type: input
    address: 46801
    scan_interval: 5
    precision: 1
    scale: 0.1
    hvac_mode_register:
      address: 28302
      write_registers: true
      values:
        state_off: 0
        state_heat: 4
        state_cool: 1
        state_dry: 2
        state_fan_only: 3
    write_registers: true
    hvac_onoff_register: 28301
    max_temp: 32
    min_temp: 16
    temp_step: 1
    temperature_unit: C
    target_temp_register: [28310,28310,28310,28310,28311,28311,28311]
    target_temp_write_registers: true
    fan_mode_register:
      address: [28303]
      values:
        state_fan_off: 0
        state_fan_diffuse: 1
        state_fan_low: 2
        state_fan_medium: 3
        state_fan_high: 4
        state_fan_top: 5
        state_fan_auto: 6

I have both of them, Skudo/Ikaro and Ikaro is a little bit different.
As first thing, my manual describes few registers compared to Skudo, but the most important behaviour is that to start it you have to put the climate to on and soon after put the fan to low at least. Skudo doesn’t require that because I can keep memorized the fan value changing only on/off.
Moreover, the modbus connection seems to be less stable than Skudo and I observe random ignitions after power loss…
Is your experience different from mine?

Sorry for late response, it’s actually the same for me. After a power loss they randomly restart……

1 Like

Hi guys, what a life savers you are!
I have 1 Skudo and 5 Ikaro (but just one Ikaro connected so far).

Skudo configuration works smoothly, while Ikaro doesn’t.
Basically i can’t turn it on. it just doesnt work.
I feel that is not something related to HA, because even running modbus command from cli doesn’t turn it on (like i 0x10-write 1 on register 28301).

did you have same issue?
my current configuration is:

# running HA 2024.12
- name: "Fancoil salone"
  unique_id: "fancoil_salone"
  device_address: 7
  input_type: input
  address: 46801
  scan_interval: 40
  precision: 1
  scale: 0.1
  hvac_mode_register:
    address: 28302
    write_registers: true
    values:
      state_off: 0
      state_heat: 4
      state_cool: 1
  write_registers: true
  hvac_onoff_register: 28301
  max_temp: 35
  min_temp: 15
  target_temp_register: [28312,28310,28310,28310,28311,28311,28311]
  target_temp_write_registers: true
  fan_mode_register:
    address: [28303]
    values:
      state_fan_off: 0
      state_fan_on: 1
      state_fan_low: 2
      state_fan_medium: 3
      state_fan_high: 4
- name: "Fancoil divano"
  unique_id: "fancoil_divano"
  device_address: 1
  input_type: input
  address: 46801
  scan_interval: 5
  precision: 1
  scale: 0.1
  hvac_mode_register:
    address: 28302
    write_registers: true
    values:
      state_off: 0
      state_heat: 4
      state_cool: 1
      state_dry: 2
      state_fan_only: 3
  write_registers: true
  hvac_onoff_register: 28301
  max_temp: 32
  min_temp: 16
  temp_step: 1
  temperature_unit: C
  target_temp_register: [28310,28310,28310,28310,28311,28311,28311]

As first thing, my manual describes few registers compared to Skudo, but the most important behaviour is that to start it you have to put the climate to on and soon after put the fan to low at least. Skudo doesn’t require that because I can keep memorized the fan value changing only on/off."

this is actually the same behaviour, and acting like this works.

in addition to the fancoil i also have a dry contact switch to poweron the heater, i think its the same for you. how do you manage this integration?

Ikaro, unfortunately, has a poor modbus control… But that’s it.

With regards to the dry contact, you need an actuator which closes the contact based on your logic (temperature, time, both of them… etc.)