Connected Vaillant to Home Assistant

Introduction

I bought a new Vaillant ( Hr-ketel ecoTEC plus) central heating boiler a few months back, my old boiler from 2001 still worked, but I rather had it replaced, before it broke. When ordering there was an option to make it connected with the vSMART for about €200 extra. It sounded a bit to much and saw no integration with Home Assistant (HA) directly (at that time). So I tried an alternate way.

eBUS

Vaillant uses a protocol called eBUS for external communication. This protocol is based on UART but at different voltage levels, so be able to use this protocol we need some hardware to do the translation. Although there were some solutions available online, I couldn’t find a tiny and SMD variant. This is why I decided to create my own PCB in KiCAD. My design is based on the following project: https://ebus.github.io/adapter/. My project can be found here: https://gitlab.com/fromeijn/ebuzzz-adapter

This PCB uses a USB to UART converter board with an CP2102, e.g this one. It is electrically isolated so no harmful ground loops or other issues can occur. There are also some helpfull LEDs to show you what is going on.

Home Assistant Integration

To integrate with Home Assistant I used ebusd running on an Raspberry Pi I had laying around. The ebusd has an MQTT client integrated, this is an easy way to hook it up to Home Assistant. To give you an idea how it is hooked up see this drawing below.

I used it in the following configuration for ebusd:

# add custom config for the vrt350 thermostat
cd /home/pi/
git clone https://github.com/john30/ebusd-configuration.git
cd ebusd-configuration/
cp ebusd-2.1.x/en/vaillant/15.370.csv ebusd-2.1.x/en/vaillant/15.350.csv

# you can change the r; at the beginning of the lines by r1; so it will be read out automatically and pushed on MQTT

# edit /etc/default/ebusd
EBUSD_OPTS="--scanconfig 
--configpath=/home/pi/ebusd-configuration/ebusd-2.1.x/en --mqtthost=<homeassistant_ip> --mqttport=1883 --mqttuser=<user> --mqttpass=<passwd>"

In Home Assistant I used the MQTT HVAC integration and set is up as follows:

climate:
  - platform: mqtt
    name: CV
    modes:
     - auto
     - heat
     - cool
     - 'off'
    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: "convert/modeset"
    mode_state_topic:  "ebusd/350/Hc1OPMode"
    temperature_state_topic: "ebusd/350/DisplayedHc1RoomTempDesired"
    temperature_low_state_topic: "ebusd/350/Hc1NightTemp"
    temperature_high_state_topic: "ebusd/350/Hc1DayTemp"
    temperature_low_command_topic: "ebusd/350/Hc1NightTemp/set"
    temperature_high_command_topic: "ebusd/350/Hc1DayTemp/set"
    current_temperature_topic: "ebusd/350/DisplayedRoomTemp"

Sadly my Valliant / ebusd doesn’t understand heat, cool. Also my heater can not cool (of course), but it has a night mode (low temperature setting), we use that instead. So we need to translate heat to on and cool to night, we do this with this automation:

- id: 1234
  alias: Convert HVAC Mode
  trigger:
  - platform: mqtt
    topic: convert/modeset
  action:
  - data_template:
      payload: '{% set mode_name = trigger.payload %} {% set modes = { ''off'':''summer'',
        ''heat'':''on'', ''cool'':''night'', ''auto'':''auto'' } %} {{ modes[mode_name]
        if mode_name in modes.keys() else ''auto'' }}'
      topic: ebusd/350/Hc1OPMode/set
    service: mqtt.publish

Automations

When having home assistant and ebusd connected we can start automating things and let the computer do stuff for us. I have configured a google calendar in which I can plan my normal heating schedule. But this only is enabled when i’m home, and turns off when I leave the house.

alias: Heater on/off on calendar
description: ''
trigger:
  - entity_id: calendar.heater
    platform: state
  - entity_id: binary_sensor.people_home
    platform: state
    to: 'on'
condition:
  - condition: state
    entity_id: binary_sensor.people_home
    state: 'on'
  - condition: template
    value_template: '{{ not is_state("climate.heater", "off") }}'
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: calendar.heater
            state: 'on'
        sequence:
          - service: climate.set_hvac_mode
            data:
              hvac_mode: heat
            entity_id: climate.heater
    default:
      - service: climate.set_hvac_mode
        data:
          hvac_mode: cool
        entity_id: climate.heater
mode: single
alias: Heater low when nobody home
description: ''
trigger:
  - entity_id: binary_sensor.people_home
    from: 'on'
    platform: state
    to: 'off'
    for: '00:05:00'
condition: []
action:
  - data:
      hvac_mode: cool
    entity_id: climate.heater
    service: climate.set_hvac_mode
mode: single

Conclusion

With this integration we can control the temperature remotely or automatically. I’ve added presence detection and a google calendar so no energy is wasted which is a big plus for me. This project was fun to get my home automation kick stared and I learned something one the way. Hope this helps some of you as well!

Board available

Because of lots of requests, the boards are now availible at Tindie

https://www.tindie.com/products/foxrom/ebus-usb-adapter-ebuzzz-adapter

Motorized IKEA lamp

Today I want to share with you that I fitted a motor in this IKEA lamp. It is now possible to open and close the lamp without touching it. Automating would be my next step, so it can be controlled from everywhere, stay tuned!