Ebusd vaillant heating ideas to optimize self consumption

Hi,

I have a vaillant heating system with following components:

  • flexotherm heatpump (geo thermal)
  • allstore exclusive 1000L buffer tank for heating and hot water
  • auroflow exclusive solar heating
  • aguaflow exclusive
  • 3 zones UFH

I have ordered myself a ebusd adapter and like it very much.

So far I am reading out the sensors and controlling some automations to do the following items:

  • Control the heat mode (day, night temperature) based on presence detection and standard timeschedule
  • Enable the contact to load the buffer when there is sufficient electricity produced
  • Enable the energy contact when another big electricity user is running or the total consumption passes a threshold (limit electricity peak, e.g. when cooking, washing)

Currently I am struggling with the loading of my buffer and am wondering if someone has achieved a control that might help me improving.

  • When the loading contact is closed it will 1st load the hot water circuit. I also found out this is possible with an ebusd value
  • When the contact is closed, the hot water is loaded, it will only continue loading the heating buffer with the offset if one of the zones is actually requesting heat

I was wondering if someone has found out if it is possible to load the heating buffer without the zones requesting heat?

2 Likes

Hi,

I have almost the same setup as you (flexotherm exclusive, allstore exclusive 500 L, auroflow and aguaflow).

I am not 100 % certain that I understand what you mean by 3 underfloor heating zones, is it controlled by the Vaillant unit or is it a separate UFH system?

Do you have a fixed temperature you would like to maintain at all times?

I am also very interested in how you were able to load all of the sensors into HA, I am having serious trouble getting more than the basic values…

The 3 zones are controlled by the vaillant unit
I do not keep a fixed temperature, I shift it based on rules 0.5 degree up to 21 degrees or to 20.5 degrees (vaillant day, night temperature)

To get all the controls in vaillant I use the ebusd docker and enable the hassio mqtt as interface I bought an ebusd interface I use the ethernet adapter

I am sorry to wander off outside the Home Assistamt topic, but as I work as an engineer with focus on water-based heating systems, I simply can’t help myself :slight_smile:
To load the heating buffer when the system is not requesting heat, my tip wold be to increase the buffer tank offset temperature.
BUT: This may not be a good idea if you want to use your heat pump as efficient as possible. If you are planning to shift the buffer tank loading to periods where the electricity price is lower, this might be a good idea, but increasing the temperature will hurt the COP of the heat pump. For every degree you increase the temperature lift of the heat pump, you decrease the COP by approximately 2-3 %.
If you aim to increase your system’s effiency, I would make sure that the heating curve is optimized, and the temperature is kept as low as possible.

I have used the Esera ebus USB adapter, but from what I understand, most people are having trouble with this. I have registered for a ebusd adapter, and hope this will work better :slight_smile:

I hope my answer has not been ompletely off target, if there is anything I can assit you with, I’d be delighted!

This is indeed the difficult balance to be made, unfortunatly increasing the offset temperature is not that easy due to some limited control values in ebus

Are you working with MQTT HVAC - Home Assistant?

@mainmind yes I use some intermediate MQTT topics to control overrides (veto temperatures of Vaillant)

I made a short snippet below, maybe later I can share my full configuration.

    - unique_id: gelijkvloers
      name: "Gelijkvloers"
      max_temp: 23
      min_temp: 15
      temp_step: 0.5
      precision: 0.1
      modes:
        - auto
        - heat
        - cool
        - 'off'
      mode_state_template: >-
        {% set values = { 'auto':'auto', 'day':'heat','night':'cool','off':'off' } %}
        {% set state = value_json["opmode"].value %}
        {{ values[state] if state 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"
      current_temperature_topic: "ebusd/700/z1RoomTemp"
      current_temperature_template: '{{value_json["tempv"].value}}'
      temperature_state_topic: "ebusd/700/z1ActualRoomTempDesired"
      temperature_state_template: '{{value_json["tempv"].value}}'
      temperature_command_topic: "heating/z1/quickVeto"

The heating command is tracked by an automation to control the veto temperatures

- alias: "Turn off quickveto"
  trigger:
    - platform: mqtt
      topic: "ebusd/700/z1OpMode/set"
    - platform: mqtt
      topic: "ebusd/700/z2OpMode/set"
    - platform: mqtt
      topic: "ebusd/700/z3OpMode/set"
  action:
    - choose:
        - conditions: >
            {{ (trigger.topic.split('/')[2]).split('OpMode')[0] == 'z1' and  is_state('sensor.ebusd_700_z1sfmode_sfmode', 'veto') }} 
          sequence:
            - service: mqtt.publish
              data_template:
                payload: "auto"
                topic: "ebusd/700/z1SFMode/set"
        - conditions: >
            {{ (trigger.topic.split('/')[2]).split('OpMode')[0] == 'z2' and  is_state('sensor.ebusd_700_z2sfmode_sfmode', 'veto') }} 
          sequence:
            - service: mqtt.publish
              data_template:
                payload: "auto"
                topic: "ebusd/700/z2SFMode/set"
        - conditions: >
            {{ (trigger.topic.split('/')[2]).split('OpMode')[0] == 'z3' and  is_state('sensor.ebusd_700_z3sfmode_sfmode', 'veto') }} 
          sequence:
            - service: mqtt.publish
              data_template:
                payload: "auto"
                topic: "ebusd/700/z3SFMode/set"

- alias: "Override temperature"
  trigger:
    - platform: mqtt
      topic: heating/+/quickVeto
  action:
    - data_template:
        payload : '{{ trigger.payload }}'
        topic: "ebusd/700/{{trigger.topic.split('/')[1]}}QuickVetoTemp/set"
      service: mqtt.publish
    - choose:
        - conditions: >
            {{ trigger.topic.split('/')[1] == 'z1' and  is_state('sensor.ebusd_700_z1sfmode_sfmode', 'auto') }} 
          sequence:
            - service: mqtt.publish
              data_template:
                payload: "veto"
                topic: "ebusd/700/z1SFMode/set"
        - conditions: >
            {{ trigger.topic.split('/')[1] == 'z2' and  is_state('sensor.ebusd_700_z2sfmode_sfmode', 'auto') }} 
          sequence:
            - service: mqtt.publish
              data_template:
                payload: "veto"
                topic: "ebusd/700/z2SFMode/set"
        - conditions: >
            {{ trigger.topic.split('/')[1] == 'z3' and  is_state('sensor.ebusd_700_z3sfmode_sfmode', 'auto') }} 
          sequence:
            - service: mqtt.publish
              data_template:
                payload: "veto"
                topic: "ebusd/700/z3SFMode/set"
1 Like

Have you tried changing the values ​​using the default MQTT integration?

I try with with MQTT explorer too:

What it’s “quickVeto” topic??

Desired temperature topic not used?
ebusd/ctlv2/z1ActualRoomTempDesired

NOTE: ctlv2 is alias of 700 config

Automations are made to change the z1OpMode to day/night based on

  • Family is home
  • Preconfigured run times (morning, evening)

The quickVeto topic is used to override the temperature (max. 8 hours) it is the same when you turn the knob of your Vaillant thermostat. This is used together with the SfMode topic

1 Like

When I try to set temperature, is s

object_id: Vaillant01
name: Vaillant
max_temp: 28
min_temp: 15
temp_step: 0.5
modes:
  - auto
  - heat
  - cool
  - "off"
mode_state_template: >-
  {% set values = { 'auto':'auto', 'day':'heat', 'night':'cool', 'off':'off'} %}
  {% set state = value_json["opmode"].value %}
  {{ values[state] if state in values.keys() else 'off' }}
mode_state_topic: "ebusd/ctlv2/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/ctlv2/z1OpMode/set"
current_temperature_topic: "ebusd/ctlv2/z1RoomTemp"
current_temperature_template: '{{value_json["tempv"].value}}'
temperature_state_topic: "ebusd/ctlv2/z1ActualRoomTempDesired"
temperature_state_template: '{{value_json["tempv"].value}}'
temperature_command_topic: "ebusd/ctlv2/z1ActualRoomTempDesired"
#temperature_low_state_topic: "ebusd/ctlv2/z1NightTemp"
#temperature_low_state_template: '{{value_json["tempv"].value}}'
#temperature_high_state_topic: "ebusd/ctlv2/z1DayTemp"
#temperature_high_state_template: '{{value_json["tempv"].value}}'
#temperature_low_command_topic: "ebusd/ctlv2/z1NightTemp/set"

I set on card:
imagen
imagen

New value on MQTT:

imagen

But no set on system and card return previous value

imagen

Hot/cool not set to system, on/off is working

¿how i can debug?


2023-06-02 11:19:59.970 [update notice] received read hmu State QQ=71: 0;0;off;ready
2023-06-02 11:20:00.221 [update notice] received unknown MS cmd: 03e8b512060b0000000000 / 0b0000000001ffffffffff00
2023-06-02 11:20:01.340 [update notice] sent poll-read ctlv2 z1ActualRoomTempDesired QQ=31: 22
2023-06-02 11:20:02.560 [update notice] received read hmu Status01 QQ=10: 22.5;23.0;-;-;-;off
2023-06-02 11:20:02.830 [update notice] received unknown MS cmd: 1076b5110101 / 09ffff6e01ff5300002a
2023-06-02 11:20:03.090 [update notice] received unknown MS cmd: 1076b512030f0001 / 0798020057011303
2023-06-02 11:20:03.360 [update notice] received update-write hmu SetMode QQ=10: auto;0.0;-;-;1;1;1;0;0;0
2023-06-02 11:20:03.620 [update notice] received unknown MS cmd: 1076b51009000000ffffff010000 / 0101
2023-06-02 11:20:05.660 [update notice] received unknown MS cmd: 7108b507030bffff / 0100
2023-06-02 11:20:07.349 [update notice] sent poll-read ctlv2 z1CoolingTemp QQ=31: 25
2023-06-02 11:20:08.042 [update notice] received read hmu State QQ=71: 0;0;off;ready
2023-06-02 11:20:10.349 [update notice] received unknown MS cmd: 03e8b512060b0000000000 / 0b0000000001ffffffffff00
2023-06-02 11:20:12.590 [update notice] received read hmu Status01 QQ=10: 22.5;23.0;-;-;-;off
2023-06-02 11:20:12.849 [update notice] received unknown MS cmd: 1076b5110101 / 09ffff6e01ff5300002a
2023-06-02 11:20:13.110 [update notice] received unknown MS cmd: 1076b512030f0001 / 0798020057011303
2023-06-02 11:20:13.349 [update error] unable to parse poll-read ctlv2 z1DayTemp from 3115b52406020003000700 / 00: ERR: invalid position
2023-06-02 11:20:13.530 [update notice] received unknown BC cmd: 10feb505025c00
2023-06-02 11:20:13.792 [update notice] received update-write hmu SetMode QQ=10: auto;0.0;-;-;1;1;1;0;0;0
2023-06-02 11:20:14.060 [update notice] received unknown MS cmd: 1076b51009000000ffffff010000 / 0101
2023-06-02 11:20:14.320 [update notice] received unknown MS cmd: 1076b5040100 / 0a00ffffffffffffffe016
2023-06-02 11:20:14.560 [update notice] received unknown MS cmd: 1008b507020900 / 02d804
2023-06-02 11:20:14.795 [update notice] received update-read broadcast vdatetime QQ=10: 11:27:52;02.06.2023
2023-06-02 11:20:15.060 [update notice] received unknown MS cmd: 1008b5110100 / 096801ff000000008000
2023-06-02 11:20:15.280 [update notice] received update-read broadcast outsidetemp QQ=10: 20.812
2023-06-02 11:20:15.780 [update notice] received unknown MS cmd: 7108b507030bffff / 0100
2023-06-02 11:20:16.120 [update notice] received read hmu State QQ=71: 0;0;off;ready
2023-06-02 11:20:18.607 [mqtt error] decode ctlv2 z1DayTemp: ERR: invalid position
2023-06-02 11:20:19.360 [update notice] sent poll-read ctlv2 z1HolidayTemp QQ=31: 15
2023-06-02 11:20:20.522 [update notice] received unknown MS cmd: 03e8b512060b0000000000 / 0b0000000001ffffffffff00
2023-06-02 11:20:22.590 [update notice] received read hmu Status01 QQ=10: 22.5;23.0;-;-;-;off
2023-06-02 11:20:22.849 [update notice] received unknown MS cmd: 1076b5110101 / 09ffff6e01ff5300002a
2023-06-02 11:20:23.120 [update notice] received unknown MS cmd: 1076b512030f0001 / 0798020057011303
2023-06-02 11:20:23.380 [update notice] received update-write hmu SetMode QQ=10: auto;0.0;-;-;1;1;1;0;0;0
2023-06-02 11:20:23.641 [update notice] received unknown MS cmd: 1076b51009000000ffffff010000 / 0101
2023-06-02 11:20:24.149 [update notice] received read hmu State QQ=71: 0;0;off;ready
2023-06-02 11:20:25.330 [update notice] sent poll-read ctlv2 z1NightTemp QQ=31: 19
2023-06-02 11:20:25.849 [update notice] received unknown MS cmd: 7108b507030bffff / 0100

Update: on auto mode i can set temperature:
imagen

Automation 1 with only 1 zone:

alias: Vaillant - Override temperature
description: ""
trigger:
  - platform: mqtt
    topic: heating/+/quickVeto
condition: []
action:
  - data_template:
      payload: "{{ trigger.payload }}"
      topic: ebusd/ctlv2/{{trigger.topic.split('/')[1]}}QuickVetoTemp/set
    service: mqtt.publish
  - choose:
      - conditions: >
          {{ trigger.topic.split('/')[1] == 'z1' and 
          is_state('sensor.ebusd_ctlv2_z1sfmode_sfmode', 'auto') }} 
        sequence:
          - service: mqtt.publish
            data_template:
              payload: veto
              topic: ebusd/ctlv2/z1SFMode/set
mode: single

Automation 2 with 1 zone:

alias: Vaillant - Turn off quickveto
description: ""
trigger:
  - platform: mqtt
    topic: ebusd/ctlv2/z1OpMode/set
condition: []
action:
  - choose:
      - conditions: >
          {{ (trigger.topic.split('/')[2]).split('OpMode')[0] == 'z1' and 
          is_state('sensor.ebusd_ctlv2_z1sfmode_sfmode', 'veto') }} 
        sequence:
          - service: mqtt.publish
            data_template:
              payload: auto
              topic: ebusd/ctlv2/z1SFMode/set
mode: single

If you want to override the temperature with veto automatisation you need to use:

temperature_command_topic: "heating/z1/quickVeto"

The standard topics to set the nigth/day temperature are not on the topic of ActualRoomTempDesired
I tried experimenting with these topics as followed, but did not like the outcome

    temperature_high_state_topic: "ebusd/700/z1DayTemp"
    temperature_high_state_template: '{{value_json["tempv"].value}}'
    temperature_high_command_topic: "ebusd/700/z1DayTemp/set"
    temperature_low_state_topic: "ebusd/700/z1NightTemp"
    temperature_low_state_template: '{{value_json["tempv"].value}}'
    temperature_low_command_topic: "ebusd/700/z1NightTemp/set"
1 Like

Is it not possible to change in automatic mode directly the desired temperature and separately the QuickVeto function?

Hello,

I had the exact same problem and the way we fixed (with Vaillant) was to install another “ghost” zone with an additional VR70 connected to the VR71 (3 zones). The contact is then a simple trigger for the 4th zone which is generating heat demand and has a different target temperature than the “normal” 3 zones.

So in normal operations, the 3 zones will work with their heat curves and target temps, loading the buffer normally. When I set the “contact” to on, the 4th zone is activated and defines a target temperature at 70 degrees to accumulate as much heat as possible in the buffer. I am then using this contact when the electricity hourly price is at the minimum or I have an excess of solar production.

My only problem so far is that the 4th zone in the VR70 is not showing up in Ebusd and I guess I will need to extend the configuration files by reverse engineering some Vaillant proprietary messages.

Hope this helps.

I’m late for the party…I just saw yout topic here.

Have you found out how to load the buffer?

I have also 1000L buffer tank but with geotherm VWL and fireplace with water jacket connected to buffer, on roof I have photovoltaic 11kW production setup.
I use ebusd for almost 3 years now.

Not yet, due to other home improvements this has moved a bit