Making Vaillant Boiler Smart

Hi all,

even if my Project might not be the greates ever seen, i still want to share my results.

What was done?
In short: You can control the heating AND the warm water with two cards + some statistics for nerds like myself :D. And yes, this is still work in Progress.
Plans: Add some more informations without occuping more space
Replace graphs with an actual flow picture of vaillant with realtime stats

What are the requirements?

In my case, i have a Vaillant ecoTEC Plus, an vr_71 and a VCR700. (But this should work with any other vaillant supported by ebusd)
ebusd adapter
ebusd home-assistant AddOn (Or stand alone ebusd, doesnt matter)
HACS
mini-graph-card
Mushroom Cards
MQTT Broker

And what was done?
First of all, i will not focus on ebusd or mqtt that much. Only regarding the important config changes i made there. So lets start.

  1. ebusd: The most important thig here is, to enable WRITE access for HomeAssistant. This is done by adding the filter-direction=r|u|^w to the start Parameters of ebusd
  2. MQTT: If you are using multiple users for MQTT, make sure the homeassistant user can WRITE into the ebusd topics
  3. After you did add the vaillant device over ebusd and mqtt (just follow the official documentation) and make the adaptions, its time to create the climate entities:
mqtt:
  ###Heizung
  climate:
    - name: "Vaillant EcoTEC Plus"
      unique_id: vaillant_ecotec_plus
      max_temp: 25
      min_temp: 18
      temp_step: 0.5
      precision: 0.1
      modes:
        - auto
        - heat
        - cool
        - "off"
      action_topic: "ebusd/700/Z1OpMode"
      action_template: >-
        {% set values = { 'day':'heating', 'off':'off', 'auto':'auto' , 'night':'cooling' } %}
        {{ values[value] if value in values.keys() else 'off' }}
      mode_state_template: >-
        {% set values = { 'auto':'auto', 'day':'heat', 'night':'cool', 'off':'off'} %}
        {% set state = value_json.value.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: "homeassistant/sensor/durchschnittliche_raumtemperatur"
      current_temperature_template: "{{ value_json }}"
      temperature_state_topic: "ebusd/700/Z1ActualRoomTempDesired"
      temperature_low_state_template: "{{ value_json.value.value }}"
      temperature_low_state_topic: "ebusd/700/Z1NightTemp"
      temperature_low_command_topic: "ebusd/700/Z1NightTemp/set"
      temperature_high_state_template: "{{ value_json.value.value }}"
      temperature_high_state_topic: "ebusd/700/Z1DayTemp"
      temperature_high_command_topic: "ebusd/700/Z1DayTemp/set"

    ###Warmwasser
    - name: "Vaillant EcoTEC Plus Warmwasser"
      unique_id: vaillant_ecotec_plus_warmwasser
      max_temp: 90
      min_temp: 45
      temp_step: 1
      precision: 0.1
      action_topic: "ebusd/700/HwcOpMode"
      action_template: "{{ value_json.value.value }}"
      modes:
        - auto
        - "off"
      mode_state_template: >-
        {% set values = { 'auto':'auto', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'auto' }}
      mode_state_topic: "ebusd/700/HwcOpMode"
      mode_command_template: >-
        {% set values = { 'auto':'auto', 'off':'off'} %}
        {{ values[value] if value in values.keys() else 'auto' }}
      mode_command_topic: "ebusd/700/HwcOpMode/set"
      temperature_high_state_template: "{{ value_json.value.value }}"
      temperature_high_state_topic: "ebusd/700/HwcTempDesired"
      temperature_high_command_topic: "ebusd/700/HwcTempDesired/set"
      current_temperature_topic: "ebusd/vr_71/SensorData1"
      current_temperature_template: "{{ value_json.s5.value }}"

Note: Currently, the “day” or heating mode is the only working mode and i really recommend to use it (that means, but the heater into the day mode and make sure its not changing automatially, because that will be done by HA in the future). I didnt have time and effort to further debugg there but i leave my current state here, so maybe someone else cann digg deeper.
Update:

  • Heat = Day → Working
  • Off = Off → Working
  • Auto = Changing between Day/Night based on the schedules you setup → Working
  • Cool = Night → Working
  1. Switches
    This is a switch to load the storage ONCE. (Called "SpeicherfĂĽllung)
- platform: template
  switches:
    speicher_fullen:
      turn_on:
        - action: select.select_option
          metadata: {}
          data:
            option: load
          target:
            entity_id: select.multimatic_700_hwcsfmode_sfmode
      turn_off:
        - action: select.select_option
          metadata: {}
          data:
            option: auto
          target:
            entity_id: select.multimatic_700_hwcsfmode_sfmode
      friendly_name: "Speicher fĂĽllen"
      unique_id: speicher_fullen
      value_template: "{{ is_state('select.multimatic_700_hwcsfmode_sfmode', 'load') }}"
      icon_template: |
        {% if is_state('select.multimatic_700_hwcsfmode_sfmode', 'load') %}
          mdi:water-boiler
        {% else %}
          mdi:water-boiler-off
        {% endif %}
  1. Finally, the actual Dashboard:
views:
  - title: Home
    visible:
      - user: 721f354368864cd7a22babca9e538a69
      - user: 35be36d8e17f4ce7915f8893851f7f28
      - user: faef4f741f97441a8312343a7828c062
    type: sidebar
    badges: []
    cards:
      - type: thermostat
        entity: climate.vaillant_ecotec_plus
        features:
          - style: icons
            hvac_modes:
              - heat
              - 'off'
              - auto
              - cool
            type: climate-hvac-modes
        show_current_as_primary: true
      - type: custom:mini-graph-card
        entities:
          - entity: sensor.ecotec_plus_flowtemp_temp
            name: Vorlauf
            show_points: false
            line_width: 1
          - entity: sensor.ecotec_plus_returntemp_temp
            name: RĂĽcklauf
            show_points: false
            line_width: 1
        hours_to_show: 8
        points_per_hour: 24
        animate: false
        hour24: true
        upper_bound: 35
      - type: thermostat
        entity: climate.vaillant_ecotec_plus_warmwasser
        features:
          - style: icons
            hvac_modes:
              - heat
              - 'off'
              - auto
            type: climate-hvac-modes
        show_current_as_primary: true
      - type: horizontal-stack
        cards:
          - type: conditional
            conditions:
              - condition: state
                entity: sensor.multimatic_700_hc1pumpstatus
                state: '1'
              - condition: or
                conditions:
                  - condition: state
                    entity: sensor.multimatic_700_hc1pumpstatus
                    state: '1'
                  - condition: state
                    entity: select.multimatic_700_hwcsfmode_sfmode
                    state: load
            card:
              type: custom:mushroom-entity-card
              entity: switch.speicher_fullen
              fill_container: false
              layout: vertical
          - type: conditional
            conditions:
              - condition: state
                entity: sensor.multimatic_700_hc1pumpstatus
                state: '0'
              - condition: state
                entity: select.multimatic_700_hwcsfmode_sfmode
                state: auto
            card:
              type: custom:mushroom-template-card
              primary: Speicher wird geheizt
              secondary: ''
              icon: mdi:water-boiler-auto
              layout: vertical
      - type: custom:mini-graph-card
        entities:
          - entity: sensor.ebusd_vr_71_sensordata1_s5
            name: Speichertemperatur Gas
            show_points: false
            line_width: 1
          - entity: sensor.ebusd_vr_71_sensordata1_s6
            name: Speichertemperatur Solar
            show_points: false
            line_width: 1
          - entity: sensor.ebusd_vr_71_sensordata1_s7
            name: Solar Temperatur
            show_points: false
            line_width: 1
        hours_to_show: 8
        points_per_hour: 24
        lower_bound: 10
        animate: false
        hour24: true
      - type: picture-elements
        elements:
          - type: state-label
            entity: sensor.ebusd_vr_71_sensordata1_s7
            style:
              top: 27%
              left: 92%
              color: black
              text-shadow: 0px 5px 10px
            title: Solar Temperatur
          - type: state-label
            entity: sensor.ebusd_vr_71_sensordata1_s5
            style:
              top: 45%
              left: 71.5%
              color: black
              text-shadow: 0px 5px 10px
            title: Warmwasserspeicher Temperatur
          - type: state-label
            entity: sensor.ebusd_vr_71_sensordata1_s6
            style:
              top: 95%
              left: 71.5%
              color: black
              text-shadow: 0px 5px 10px
            title: Solarspeicher Temperatur
          - type: state-label
            entity: sensor.ecotec_plus_flowtemp_temp
            style:
              top: 62%
              left: 25%
              color: black
              text-shadow: 0px 5px 10px
            title: Vorlauftemperatur
            prefix: 'Vorl. '
          - type: state-label
            entity: sensor.ecotec_plus_returntemp_temp
            style:
              top: 62%
              left: 44%
              color: black
              text-shadow: 0px 5px 10px
            title: RĂĽcklauftemperatur
            prefix: 'RĂĽckl. '
          - type: state-label
            entity: sensor.durchschnittliche_raumtemperatur
            style:
              top: 15%
              left: 34.6%
              color: black
              text-shadow: 0px 5px 10px
            title: Haustemperatur
        image: /local/vaillant_graph.jpeg

Notes about that: I’ve used a condition card, becauseif the boiler is actually heating automatically the water (based on the time plan, if set up) it should not be overwritten by the one time loading. The second graph is showing some solar details. this can be removed if no solar system is active.

2 Likes

Looks very good!

Question from a HA beginner: where do I have to put these configurations?

Hi,
Mit frischen HACS update tut’s nich mehr. Eine Idee?

Was geht denn nicht? Hier klappt noch alles ? (Hab alles aktuell)

Hi
I already have EbusD running in HA. Ik get all kinds off values. Mainly BAI and 350.
What i want to do is:

  • The floorheating system should work the oldfashioned way. Meaning: When the living room request heat it should work No matter the state of HA, and or the TRV’s
  • I want TRV’s with zigbee. (already have one for experimenting

When I have all TRV’s working and Ebusd, the setup would be

  • When the livingromm request heat: (no automation neede for this)
    Boiler on
    TRV’s wanting heat just open and get heated

  • One of the TRV’s wants heat and the livingroom is not requesting heat:
    Boiler On
    Valve on floorheating will be actively closed (It should be a NO valve)

Is this possible you think?

Close to my configuration. Unfortunately my Vaillant heater does not have a variable for the interior temperature. Apparently you solved the problem with sensor “homeassistant/sensor/durchschnittliche_raumtemperatur”. What kind of (external) sensor is this?

Yeah, that is a virtual sensor(helper), based on my multiple sonoff room sensors. It’s using the mean of all sensor to calculate the house temperature. You can use whatever you want (Netatmo, WiFi Thermometers, …) for that.


1 Like

That very interest (but off-topic). How I can create such virtual Sensor(helper) to it at the YAML configuration?

You can do it from the UI, under devices

Ok, I have found this point at the UI.
But how I can distribute this sensor “Thermometer_Wohnzimmer” to the MQTT?
image
[edit] Ok, I have found my solution with mqtt_statestream

Hello,

I’m in the process of configuring my HA. I have installed the PV panels and I want to use the energy more efficiently. This means I want to control my gas boiler as well. I have also the Vaillant EcoTec Plus. I was looking for an ebus module with Ethernet or WiFi but I have not found one. What are you using? Do I need to build the WiFi module or there is a ready solution available?

Thanks for the advice.

Hi, iam using that one: Willkommen zum eBUS Adapter Shield - eBUS Adapter Shield v5

Thanks a lot. I decided to buy C6 Willkommen zum eBUS Adapter Shield - eBUS Adapter Shield C6.

Is the C6 working properly? Any advise before buying it?
I’ve a Saunier Duval Thema Condens

I can’t answer that. But if it’s using Ebus, there is a chance (you could check the ebusd project)

Hi, I have a Vaillant flexoTHERM exclusive with a VRC700 control panel.

Could you give me some info to start implementing it into Home Assistant?

I shared some details about my system in this topic and I need help to understand if I can connect my system and what I need:

Hi, I would recommend to start reading here: http://ebusd.eu/

Hi. yes thank you for your advertise…I just need a step further and know if i actually can integrate this boiler into HA.

If you can find it here: ebusd-configuration/ebusd-2.1.x/en/vaillant at master · john30/ebusd-configuration · GitHub then yes.

But the easiest way is to use autoconf. But for that you need the adapter :confused:

I’m pretty sure you will receive data into HA with ebusd.eu

I am currently at the point, what to do with the data :wink: currently I’m analyizing it.

1 Like