MQTT climate card broken for temperature changes (ebusd)?

Hi,

I am having problems with previously existing climate control cards. I used to be able to control my CV installation (vaillant) via MQTT but now -part of the - control does not work anymore via the card, and I don’t seem to be able to resolve it.

system info:

Home Assistant 2023.12.3
Supervisor 2023.11.6
Operating System 11.2
Frontend 20231208.2 - latest

The context
About 3 years ago I installed ebusd on a separate linux machine which could read out and control my Vaillant heat pump. This worked beautifully up until now (or at least now I noticed it). I also saw that there now was an ebusd add-on that does exactly this, but for now I just want my previous installation to just work as it previously did.

setup:

  • linuxserver with ebusd installed as a systemd service, working beautifully and posting nicely everything on my mqtt server (see examply from mqtt exporer below) - this is still working as expected:

  • Next I have made 2 yaml MQTT climate cards that link into these topics

mqtt:
  climate:
    - name: CV
      max_temp: 25
      min_temp: 15
      precision: 0.1
      temp_step: 0.5
      modes:
       - auto
       - heat
       - cool
       - 'off'
      mode_state_template: >-
        {% set values = { 'auto':'auto', 'day':'heat',  'night':'cool', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'off' }}
      mode_state_topic:  "ebusd/700/z1OpMode"
      mode_command_template: >-
        {% set values = { 'auto':'auto', 'heat':'day',  'cool':'night', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'auto' }}
      mode_command_topic: "ebusd/700/z1OpMode/set"
      temperature_state_topic: "ebusd/700/z1ActualRoomTempDesired"
      temperature_low_state_topic: "ebusd/700/z1NightTemp"
      # temperature_low_command_template: "{{ value_json }}"
      temperature_high_state_topic: "ebusd/700/z1DayTemp"
      # temperature_high_command_template: "{{ value_json }}"
      temperature_low_command_topic: "ebusd/700/z1NightTemp/set"
      temperature_high_command_topic: "ebusd/700/z1DayTemp/set"
      current_temperature_topic: "ebusd/700/z1RoomTemp"
    - name: Boiler
      max_temp: 100
      min_temp: 20
      precision: 0.5
      temp_step: 1
      modes:
       - auto
       - heat
       - 'off'
      mode_state_template: >-
        {% set values = { 'auto':'auto',  'day':'heat', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'off' }}
      mode_state_topic:  "ebusd/700/HwcOpMode"
      mode_command_template: >-
        {% set values = { 'auto':'auto', 'heat':'day', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'auto' }}
      mode_command_topic: "ebusd/700/HwcOpMode/set"
      temperature_state_topic: "ebusd/700/HwcTempDesired"
      # temperature_low_state_topic: "ebusd/700/z1NightTemp"
      temperature_high_state_topic: "ebusd/700/HwcTempDesired"
      # temperature_low_command_topic: "ebusd/700/z1NightTemp/set"
      temperature_high_command_topic: "ebusd/700/HwcTempDesired/set"
      # temperature_high_command_template: "{{ value_json }}"
      current_temperature_topic: "ebusd/700/HWCwatertempcorrected"
  • finally I made 2 standard cards in HA (the ones that are standard available in HA), like shown below:

image

The issue

Up until some time ago (again I only noticed it now as i don’t change the tempeartures as much, i could easily change the temperatures in the climate card and these would get pushed to the MQTT and subsequently to the heat pump. Now it doesn’t do anything, if I change the slider and close it just shows the old value and also nothing happens in mqtt explorer. When I run the mqtt publish command to the same topic, e.g.

service: mqtt.publish
data:
  qos: "0"
  retain: true
  topic: ebusd/700/z1DayTemp/set
  payload: "19.5"

it changes the value immediately (both in mqtt explorer and in the slider).

The above leads me to believe there is something in the card not correctly happening as both the service itself (mqtt-publish) and the backbone (everything ebusd releated) is still fully functional.

Important to mention, I can still change the mode of both climates, this part thus:

      mode_state_template: >-
        {% set values = { 'auto':'auto', 'day':'heat',  'night':'cool', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'off' }}
      mode_state_topic:  "ebusd/700/z1OpMode"
      mode_command_template: >-
        {% set values = { 'auto':'auto', 'heat':'day',  'cool':'night', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'auto' }}

but none of the temperatures can be changed via the climate card (read out still works on all of them).

p.s. I did try to find the logs for this, but didn’t manage to find them, any pointers also here?

Thanks for taking a look!

Kind regards,

Ben

Small bump to the top, anyone have an idea?

thanks!

Ben

Not very helpful I’m afraid, but I just bumped into exactly the same issue with a similar setup.

I can change mode, receive correctly the current temperature and targets, but cannot change them anymore from the climate card, no message is sent on MQTT when I try and no error message is visible in the log.

In addition, when calling directly the service

service: climate.set_temperature
target:
  entity_id: climate.boiler
data:
  target_temp_high: 21
  target_temp_low: 16

it works normally, mqtt message is sent as expected and target temperature is set (I have to set both high and low or I get an error message, visible in the log).
So it seems indeed to be related to the card itself…

I’m running 2024.1.0 and my mqtt climate yaml config is:

climate:
  - name: boiler
    modes:
     - auto
     - heat
     - cool
     - 'off'
    mode_state_topic:  "iot/ebusd/boiler/370/Hc1OPMode"
    mode_state_template: >-
      {% set values = { 'auto':'auto', 'on':'heat',  'night':'cool', 'summer':'off'} %}
      {{ values[value] if value in values.keys() else 'off' }}
    mode_command_topic: "iot/ebusd/boiler/370/Hc1OPMode/set"
    mode_command_template: >-
      {% set values = { 'auto':'auto', 'heat':'on',  'cool':'night', 'off':'summer'} %}
      {{ values[value] if value in values.keys() else 'auto' }}
    temperature_state_topic: "iot/ebusd/boiler/370/DisplayedHc1RoomTempDesired"
    temperature_low_state_topic: "iot/ebusd/boiler/370/Hc1NightTemp"
    temperature_high_state_topic: "iot/ebusd/boiler/370/Hc1DayTemp"
    temperature_low_command_topic: "iot/ebusd/boiler/370/Hc1NightTemp/set"
    temperature_high_command_topic: "iot/ebusd/boiler/370/Hc1DayTemp/set"
    current_temperature_topic: "iot/ebusd/boiler/370/DisplayedRoomTemp"

OK, found my mistake…

I use low/high temperature to set the night/day target, but I was also listening for the “temperature_state_topic” to get the current target (night or day) based on the boiler program…
Apparently, getting that value is messing up with the logic of the thermostat card, and it was presenting me only a single temperature… Simple removing that line solved my issue !

temperature_state_topic: “iot/ebusd/boiler/370/DisplayedHc1RoomTempDesired”

I now get the actual target through a dedicated mqtt sensor, displayed separately from the standard card…

1 Like

Thx Robert,

This also fixed my issue!

kind regarsd,

Ben