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.
- 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
- MQTT: If you are using multiple users for MQTT, make sure the homeassistant user can WRITE into the ebusd topics
- 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
- 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 %}
- 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.