Open Bjoern3003 opened 1 year ago
And an updated Version with select and switch entities to set values in vcontrold.
mqtt:
binary_sensor:
- name: "Status Pumpenzirkulation"
unique_id: "vcontroldgetPumpeStatusZirku"
state_topic: "openv/getPumpeStatusZirku"
device_class: running
value_template: "{% if(value|int == '0') %}OFF{% else %}ON{% endif %}"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Pumpen Status"
unique_id: "vcontroldgetPumpeStatusM1"
state_topic: "openv/getPumpeStatusM1"
device_class: running
value_template: "{% if(value|int == '0') %}OFF{% else %}ON{% endif %}"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Pumpen Status Sp"
unique_id: "vcontroldgetPumpeStatusSp"
state_topic: "openv/getPumpeStatusSp"
device_class: running
value_template: "{% if(value|int == 0) %}OFF{% else %}ON{% endif %}"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Brenner Status"
unique_id: "vcontroldgetBrennerStatus"
state_topic: "openv/getBrennerStatus"
device_class: running
value_template: "{% if(value|int == '0') %}OFF{% else %}ON{% endif %}"
device:
identifiers: vcontrold
manufacturer: Viessmann
select:
- name: "Betriebsart"
unique_id: "vcontroldgetBetriebArt"
state_topic: "openv/getBetriebArt"
device:
identifiers: vcontrold
manufacturer: Viessmann
command_topic: "openv/setBetriebArt"
options:
- "Heizen+Warmwasser"
- "Warmwasser"
- "Reduziert"
- "Normal"
- "Frostschutz"
- "Abschaltbetrieb"
command_template: |-
{% if value == 'Heizen+Warmwasser' %}
H+WW
{% elif value == 'Warmwasser' %}
WW
{% elif value == 'Reduziert' %}
RED
{% elif value == 'Normal' %}
NORM
{% elif value == 'Frostschutz' %}
H+WW FS
{% elif value == 'Abschaltbetrieb' %}
ABSCHALT
{% endif %}
value_template: |-
{% if value == 'H+WW' %}
Heizen+Warmwasser
{% elif value == 'WW' %}
Warmwasser
{% elif value == 'RED' %}
Reduziert
{% elif value == 'NORM' %}
Normal
{% elif value == 'H+WW FS' %}
Frostschutz
{% elif value == 'ABSCHALT' %}
Abschaltbetrieb
{% endif %}
- name: "Raumsolltemperatur normal"
unique_id: "vcontroldgetTempRaumNorSollM1"
state_topic: "openv/getTempRaumNorSollM1"
value_template: |-
{{ value | round(0) }}
device:
identifiers: vcontrold
manufacturer: Viessmann
command_topic: "openv/setTempRaumNorSollM1"
options:
- "3"
- "4"
- "5"
- "6"
- "7"
- "8"
- "9"
- "10"
- "11"
- "12"
- "13"
- "14"
- "15"
- "16"
- "17"
- "18"
- "19"
- "20"
- "21"
- "22"
- "23"
- "24"
- "25"
- "26"
- "27"
- "28"
- "29"
- "30"
- "31"
- "32"
- "33"
- "34"
- "35"
- "36"
- "37"
- name: "Raumsolltemperatur reduziert"
unique_id: "vcontroldgetTempRaumRedSollM1"
state_topic: "openv/getTempRaumRedSollM1"
value_template: |-
{{ value | round(0) }}
device:
identifiers: vcontrold
manufacturer: Viessmann
command_topic: "openv/setTempRaumRedSollM1"
options:
- "3"
- "4"
- "5"
- "6"
- "7"
- "8"
- "9"
- "10"
- "11"
- "12"
- "13"
- "14"
- "15"
- "16"
- "17"
- "18"
- "19"
- "20"
- "21"
- "22"
- "23"
- "24"
- "25"
- "26"
- "27"
- "28"
- "29"
- "30"
- "31"
- "32"
- "33"
- "34"
- "35"
- "36"
- "37"
- name: "Solltemperatur Partybetrieb"
unique_id: "vcontroldTempPartyM1"
state_topic: "openv/getTempPartyM1"
value_template: |-
{{ value | round(0) }}
device:
identifiers: vcontrold
manufacturer: Viessmann
command_topic: "openv/getTempPartyM1"
options:
- "3"
- "4"
- "5"
- "6"
- "7"
- "8"
- "9"
- "10"
- "11"
- "12"
- "13"
- "14"
- "15"
- "16"
- "17"
- "18"
- "19"
- "20"
- "21"
- "22"
- "23"
- "24"
- "25"
- "26"
- "27"
- "28"
- "29"
- "30"
- "31"
- "32"
- "33"
- "34"
- "35"
- "36"
- "37"
- name: "Neigung Mischer"
unique_id: "vcontroldgetNeigungM1"
state_topic: "openv/getNeigungM1"
device:
identifiers: vcontrold
manufacturer: Viessmann
value_template: |-
{{ value | round(1) }}
command_topic: "openv/setNeigungM1"
options:
- "0.2"
- "0.3"
- "0.4"
- "0.5"
- "0.6"
- "0.7"
- "0.8"
- "0.9"
- "1.0"
- "1.1"
- "1.2"
- "1.3"
- "1.4"
- "1.5"
- "1.6"
- "1.7"
- "1.8"
- "1.9"
- "2.0"
- "2.1"
- "2.2"
- "2.3"
- "2.4"
- "2.5"
- "2.6"
- "2.7"
- "2.8"
- "2.9"
- "3.0"
- "3.1"
- "3.2"
- "3.3"
- "3.4"
- "3.5"
- name: "Niveau Mischer"
unique_id: "vcontroldgetNiveauM1"
state_topic: "openv/getNiveauM1"
device:
identifiers: vcontrold
manufacturer: Viessmann
value_template: |-
{{ value | round(0) }}
command_topic: "openv/setNiveauM1"
options:
- "-13"
- "-12"
- "-11"
- "-10"
- "-9"
- "-8"
- "-7"
- "-6"
- "-5"
- "-4"
- "-3"
- "-2"
- "-1"
- "0"
- "1"
- "2"
- "3"
- "4"
- "5"
- "6"
- "7"
- "8"
- "9"
- "10"
- "11"
- "12"
- "13"
- "14"
- "15"
- "16"
- "17"
- "18"
- "19"
- "20"
- "21"
- "22"
- "23"
- "24"
- "25"
- "26"
- "27"
- "28"
- "29"
- "30"
- "31"
- "32"
- "33"
- "34"
- "35"
- "36"
- "37"
- "38"
- "39"
- "40"
sensor:
- name: "Aussentemperatur"
unique_id: "vcontroldgetTempA"
device_class: temperature
state_topic: "openv/getTempA"
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Warmwasser Ist Temperatur"
unique_id: "vcontroldgetTempWWist"
device_class: temperature
state_topic: "openv/getTempWWist"
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Warmwasser Soll Temperatur"
unique_id: "vcontroldgetTempWWsoll"
device_class: temperature
state_topic: "openv/getTempWWsoll"
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Kessel Ist Temperatur"
unique_id: "vcontroldgetTempKist"
device_class: temperature
state_topic: "openv/getTempKist"
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Kessel Soll Temperatur"
unique_id: "vcontroldgetTempKsoll"
device_class: temperature
state_topic: "openv/getTempKsoll"
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Brenner Starts"
unique_id: "vcontroldgetBrennerStarts"
state_topic: "openv/getBrennerStarts"
device:
identifiers: vcontrold
manufacturer: Viessmann
unit_of_measurement: "Starts"
value_template: |-
{{ value | round(0) }}
- name: "Brenner Stunden 1"
unique_id: "vcontroldgetBrennerStunden1"
state_topic: "openv/getBrennerStunden1"
device_class: duration
unit_of_measurement: h
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Vorlauftemperatur M1"
unique_id: "vcontroldgetTempVListM1"
state_topic: "openv/getTempVListM1"
device:
identifiers: vcontrold
manufacturer: Viessmann
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
- name: "Vorlaufsolltemperatur M1"
unique_id: "vcontroldgetTempVLsollM1"
state_topic: "openv/getTempVLsollM1"
device:
identifiers: vcontrold
manufacturer: Viessmann
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
- name: "Kesseloffset KT ueber WWsoll"
unique_id: "vcontroldgetTempKOffset"
state_topic: "openv/getTempKOffset"
device:
identifiers: vcontrold
manufacturer: Viessmann
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
# Fehler
- name: "Fehler 1"
unique_id: "vcontroldgetError0"
state_topic: "openv/getError0"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 2"
unique_id: "vcontroldgetError1"
state_topic: "openv/getError1"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 3"
unique_id: "vcontroldgetError2"
state_topic: "openv/getError2"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 4"
unique_id: "vcontroldgetError3"
state_topic: "openv/getError3"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 5"
unique_id: "vcontroldgetError4"
state_topic: "openv/getError4"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 6"
unique_id: "vcontroldgetError5"
state_topic: "openv/getError5"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 7"
unique_id: "vcontroldgetError6"
state_topic: "openv/getError6"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 8"
unique_id: "vcontroldgetError7"
state_topic: "openv/getError7"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 9"
unique_id: "vcontroldgetError8"
state_topic: "openv/getError8"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "Fehler 10"
unique_id: "vcontroldgetError9"
state_topic: "openv/getError9"
device:
identifiers: vcontrold
manufacturer: Viessmann
- name: "WarmwasserRuecklauf"
unique_id: "WarmwasserRuecklauf"
state_topic: "esp_viessmann/4025510030891776127/Temperature"
device:
identifiers: vcontrold
manufacturer: Viessmann
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
- name: "WarmwasserVorlauf"
unique_id: "WarmwasserVorlauf"
state_topic: "esp_viessmann/40255100308914319361/Temperature"
device:
identifiers: vcontrold
manufacturer: Viessmann
unit_of_measurement: "°C"
value_template: |-
{{ value | round(2) }}
switch:
- name: "Betriebsart Party"
unique_id: "vcontroldgetBetriebPartyM1"
state_topic: "openv/getBetriebPartyM1"
command_topic: "openv/setBetriebPartyM1"
device:
identifiers: vcontrold
manufacturer: Viessmann
value_template: |
{{ value|round(0) }}
payload_on: 1
payload_off: 0
state_on: 1
state_off: 0
Very nice work, will test it today or tomorrow in my setup. @Alexandre-io how about adding some example configs based on this work - what do you think?
Hello, @Bjoern3003. That's very nice configuration. I tried it today, however I've got few problems with it. For instance, the getBrennerStatus shows "on" all the time, despite it's off. When I check it manually from the console with vsensor, it shows "0" of course. The similar situation is with the Party and Spare modes.
Hi, please try this value_template for getBrennerStatus.
value_template: "{% if(value|int == 0) %}OFF{% else %}ON{% endif %}"
That is exactly the same template what I used.
- name: "Brenner Status" unique_id: "vcontroldgetBrennerStatus" state_topic: "openv/getBrennerStatus" device_class: running value_template: "{% if(value|int == '0') %}OFF{% else %}ON{% endif %}" device: identifiers: vcontrold manufacturer: Viessmann
No, its quoted. If have removed the ' before and after 0 to check for integer and not as string.
Indeed. Thank you.
Thank you for reporting.
Does anyone have a template for setting individual heating schedules? "setTimerMoHeizen" i.e. TIA.
I'm kind of lost and could need some advise with getting and setting the Betriebsart. I've set up vcontrol to get two Betriebsarten, one for M1, one for M2. Both are received by vcontrol correctly, e.g.:
[76] Sat Jan 13 18:13:11 2024 : Command: getBetriebArtM1 (...) [76] Sat Jan 13 18:13:11 2024 : <RECV: received 01 01 33 23 01 02 61 [76] Sat Jan 13 18:13:11 2024 : >FRAMER: framer_reset_actaddr framer_current_addr = FRAMER_NO_ADDR (was 2333) [76] Sat Jan 13 18:13:11 2024 : 02 -> NORM [76] Sat Jan 13 18:13:11 2024 : NORM
So Betriebsart 'NORM' is received correctly.
However, the values for Betriebsart M1 and M2 in Homeassistant are shown as "unknown".
Log is showing:
2024-01-13 18:15:27.356 ERROR (MainThread) [homeassistant.components.mqtt.select] Invalid option for select.mosquitto_broker_betriebsartm1: '' (valid options: ['Heizen+Warmwasser', 'Warmwasser', 'Reduziert', 'Normal', 'Frostschutz', 'Abschaltbetrieb']) 2024-01-13 18:15:27.370 ERROR (MainThread) [homeassistant.components.mqtt.select] Invalid option for select.mosquitto_broker_betriebsartm2: '' (valid options: ['Heizen+Warmwasser', 'Warmwasser', 'Reduziert', 'Normal', 'Frostschutz', 'Abschaltbetrieb'])
My yaml extract:
select:
Any help is appreciated!
Hi @skihoff the errormsg says there is something wrong with the select field mapping, maybe you can check without command and value template:
select:
If this is functional, I would play with the command template notation (correct line indentations).
Thanks @dk1305hb, good idea starting debugging with lower complexity. I've changed the mqtt yaml file as suggested:
select:
Ouput of vcontrold same as above as expected: [74] Sun Jan 14 17:54:34 2024 : Command: getBetriebArtM1 (...) [74] Sun Jan 14 17:54:34 2024 : 02 -> NORM [74] Sun Jan 14 17:54:34 2024 : NORM
Logfile now shows a different message:
2024-01-14 17:58:31.778 ERROR (MainThread) [homeassistant.components.mqtt.select] Invalid option for select.mosquitto_broker_betriebsartm1: '0.000000' (valid options: ['H+WW', 'WW', 'NORM', 'ABSCHALT'])
Not sure what's happening here, the string 'NORM' seems to be incorrectly parsed from vcontrol into homeassistant and ending up as '0.000000' in HA. Unfortunately I'm lacking basic HA system knowledge and am lost at this point. If anyone has an idea what else to check, pls. let me know and I'll try.
Do you use your own mqtt broker? Can you check with MQTT Explorer if your values are received correctly?
Dont worry, my values have got other names, I use my own vcontrol instance...
If mqtt is ok, did you try you try a simple field with "getTempA" ?
Thanks @dk1305hb, this pointed me into the right direction. MQTT Explorer also showed the value as float, so I could relate the issue to the vcontrol side. I figured I simply forgot to put ":STRING" behind my getBetriebArtM1 command in the list of commands. All working now!
For those who want to control the water temperature, here's my MQTT config for it. Naturally the relevant get/set commands have to be present in vito.xml.
water_heater:
- name: "Warmwasser Temperatur"
unique_id: "vcontroldTempWW"
current_temperature_topic: "openv/getTempWWist"
temperature_command_topic: "openv/setTempWWsoll"
temperature_state_topic: "openv/getTempWWsoll"
temperature_unit: "C"
device:
identifiers: vcontrold
manufacturer: Viessmann
Seems to work for now. The only issue I noticed so far is HA thinks the boiler is permanently off. Don't care enough about it to fix it for now though.
is it possible to get data for the Solarengergy? (Water from Roof) the Vcare app shows no data. but the vitodens itself shows values every day.
Here is my first solution for the configuration.yaml to add end configure the entities. I hope this will help somebody
New Update in the next Answer