Skip to content

Instantly share code, notes, and snippets.

@JavanXD
Last active January 10, 2025 21:00
SchwörerHaus WGT BIC VentCube Fresh Home Assistant Integration via modbus
# Helpful information:
# https://github.com/Excodibur/ioBroker.schwoerer-ventcube/blob/master/src/lib/schwoerer/parameters.ts
# https://github.com/fgoettel/wgt/blob/main/wgt/lueftungsanlage.py
# https://knx-user-forum.de/forum/öffentlicher-bereich/knx-eib-forum/diy-do-it-yourself/1822296-modbus-schwörer-heizung?p=1906252#post1906252
##################
# MODBUS SENSORS #
##################
modbus:
- name: BIC_VentCube
delay: 2
timeout: 3
type: tcp
host: !secret wgt_ip
port: 502
sensors:
- name: VentCube Betriebsart
slave: 1
unique_id: ventcube_betriebsart
address: 100
# Translated with template sensor
# Translated with input_select Automation
- name: VentCube Manuelle Luftstufe
slave: 1
unique_id: ventcube_manuelle_luftstufe
address: 101
# Translated with input_select Automation
- name: VentCube Aktuelle Luftstufe
slave: 1
unique_id: ventcube_aktuelle_luftstufe
address: 102
- name: VentCube Status Stoßlüftung
slave: 1
unique_id: ventcube_status_stosslueftung
address: 111
# Translated with template sensor
- name: VentCube Restlaufzeit Stoßlüftung
slave: 1
unique_id: ventcube_restlaufzeit_stosslueftung
address: 112
unit_of_measurement: min
device_class: duration
min_value: 0
max_value: 60
- name: VentCube Status Wärmepumpe
slave: 1
unique_id: ventcube_status_waermepumpe
address: 114
# Translated with template sensor
- name: VentCube Status Nachheizregister
slave: 1
unique_id: ventcube_status_nachheizregister
address: 116
# Translated with template sensor
- name: VentCube Status Gebläse Zuluft
slave: 1
unique_id: ventcube_status_geblaese_zuluft
address: 117
# Translated with template sensor
- name: VentCube Status Gebläse Abluft
slave: 1
unique_id: ventcube_status_geblaese_abluft
address: 118
# Translated with template sensor
- name: VentCube Bypass Zustand
slave: 1
unique_id: ventcube_bypass_zustand
address: 123
# Translated with template sensor
- name: VentCube Zustand Außenklappe
slave: 1
unique_id: ventcube_zustand_aussenklappe
address: 131
# Translated with template sensor
- name: VentCube Status Vorheizregister
slave: 1
unique_id: ventcube_status_vorheizregister
address: 133
# Translated with template sensor
- name: VentCube aktuelle Luftleistung Zuluft
slave: 1
unique_id: ventcube_aktuelle_luftleistung_zuluft
address: 142
state_class: measurement
unit_of_measurement: "%"
min_value: 0
max_value: 100
scale: 1
precision: 0
- name: VentCube aktuelle Luftleistung Abluft
unique_id: ventcube_aktuelle_luftleistung_abluft
slave: 1
address: 143
state_class: measurement
unit_of_measurement: "%"
min_value: 0
max_value: 100
scale: 1
precision: 0
- name: VentCube aktuelle Drehzahl Zuluft
unique_id: ventcube_aktuelle_drehzahl_zuluft
slave: 1
address: 144
state_class: measurement
unit_of_measurement: "rpm"
min_value: 0
max_value: 10000
precision: 0
- name: VentCube aktuelle Drehzahl Abluft
unique_id: ventcube_aktuelle_drehzahl_abluft
slave: 1
address: 145
state_class: measurement
unit_of_measurement: "rpm"
min_value: 0
max_value: 10000
precision: 0
- name: VentCube T2 Temperatur nach Vorheizregister
slave: 1
unique_id: ventcube_t2_temperatur_nach_vorheizregister
unit_of_measurement: °C
device_class: temperature
address: 201
scale: 0.1
precision: 1
- name: VentCube T3 Temperatur vor Nacherwärmung
slave: 1
unique_id: ventcube_t3_temperatur_vor_nacherwaermung
unit_of_measurement: °C
device_class: temperature
address: 202
scale: 0.1
precision: 1
- name: VentCube T4 Temperatur nach Nacherwärmung
slave: 1
unique_id: ventcube_t4_temperatur_nach_nacherwaermung
unit_of_measurement: °C
device_class: temperature
address: 203
scale: 0.1
precision: 1
- name: VentCube T5 Temperatur Abluft
slave: 1
unique_id: ventcube_t5_temperatur_abluft
unit_of_measurement: °C
device_class: temperature
address: 204
scale: 0.1
precision: 1
- name: VentCube T6 Temperatur im Wärmetauscher
slave: 1
unique_id: ventcube_t6_temperatur_im_waermetauscher
unit_of_measurement: °C
device_class: temperature
address: 205
scale: 0.1
precision: 1
- name: VentCube T10 Temperatur Außen
slave: 1
unique_id: ventcube_t10_temperatur_aussen
unit_of_measurement: °C
device_class: temperature
address: 209
scale: 0.1
precision: 1
- name: VentCube Heiz- Kühlfunktion
slave: 1
unique_id: ventcube_heiz_kuehlfunktion
address: 230
# Translated with template sensor
# Translated with input_select Automation
- name: VentCube Wärmepumpe Heizen
slave: 1
unique_id: ventcube_wp_heizen
address: 231
- name: VentCube Wärmepumpe Kühlen
slave: 1
unique_id: ventcube_wp_kuehlen
address: 232
- name: VentCube Druckwächter aktiv
slave: 1
unique_id: ventcube_druckwachter_aktiv
address: 242
# Translated with template sensor (binary_sensor)
- name: VentCube EVU Sperre aktiv
slave: 1
unique_id: ventcube_evu_sperre_aktiv
address: 243
# Translated with template sensor (binary_sensor)
- name: VentCube Wartungstür offen
slave: 1
unique_id: ventcube_wartungstur_offen
address: 244
# Translated with template sensor (binary_sensor)
- name: VentCube Gerätefilter verschmutzt
slave: 1
unique_id: ventcube_geratefilter_verschmutzt
address: 245
# Translated with template sensor (binary_sensor)
- name: VentCube Vorgelagerter Filter verschmutzt
slave: 1
unique_id: ventcube_vorgelagerter_filter_verschmutzt
address: 246
# Translated with template sensor (binary_sensor)
- name: VentCube Zuluft zu kalt
slave: 1
unique_id: ventcube_zuluft_zu_kalt
address: 254
# Translated with template sensor (binary_sensor)
- name: VentCube Restlaufzeit Gerätefilter
slave: 1
unique_id: ventcube_restlaufzeit_geratefilter
address: 265
unit_of_measurement: d
min_value: 0
max_value: 255
device_class: duration
- name: VentCube Temperatur Wohnzimmer IST
slave: 1
unique_id: ventcube_temperatur_wohnzimmer_ist
unit_of_measurement: °C
device_class: temperature
address: 360
scale: 0.1
precision: 1
min_value: 0
max_value: 100
switches:
- name: VentCube Freigabe WP auf Heizen
slave: 1
address: 231
command_on: 0x1 # Freigabe
command_off: 0x0 # Gesperrt
write_type: holdings
verify:
input_type: holding
state_on: 0x1
state_off: 0x0
delay: 5
unique_id: ventcube_set_waermepumpe_heizen
- name: VentCube Freigabe WP auf Kühlen
slave: 1
address: 232
command_on: 0x1 # Freigabe
command_off: 0x0 # Gesperrt
write_type: holdings
verify:
input_type: holding
state_on: 0x1
state_off: 0x0
delay: 5
unique_id: ventcube_set_waermepumpe_kuehlen
climates:
- name: "VentCube Soll-Temperatur"
unique_id: ventcube_soll_temperatur
slave: 1
address: 400
max_temp: 30
min_temp: 10
offset: 0
precision: 0
scale: 0.1
target_temp_register: 400
target_temp_write_registers: true
temp_step: 1
temperature_unit: °C
- name: "VentCube Basis-Temperatur"
unique_id: ventcube_basis_temperatur
slave: 1
address: 420
max_temp: 30
min_temp: 18
offset: 0
precision: 0
scale: 0.1
target_temp_register: 420
target_temp_write_registers: true
temp_step: 1
temperature_unit: °C
#####################################################
# Select Options which require separate Automations #
#####################################################
input_select:
ventcube_manuelle_luftstufe:
name: VentCube Manuelle Luftstufe
options:
- "0 - Aus"
- "1 - Stufe 1"
- "2 - Stufe 2"
- "3 - Stufe 3"
- "4 - Stufe 4"
- "5 - Automatik"
- "6 - Linearbetrieb"
icon: mdi:fan
ventcube_betriebsart:
name: VentCube Betriebsart
options:
- "0 - Aus"
- "1 - Handbetrieb"
- "2 - Winterbetrieb"
- "3 - Sommerbetrieb"
- "4 - Sommer Abluft"
icon: mdi:fan
ventcube_heiz_kuehlfunktion:
name: VentCube Heiz- Kühlfunktion
options:
- "0 - Aus"
- "1 - Heizen"
- "2 - Kühlen"
- "3 - Auto T-Außen"
- "4 - Auto Digitaler Eingang"
icon: mdi:fan
####################
# TEMPLATE SENSORS #
####################
sensor:
- platform: template
sensors:
ventcube_betriebsart_text:
unique_id: ventcube_betriebsart_text
friendly_name: "VentCube Betriebsart"
value_template: >
{% set mapper = {
'0': 'Aus',
'1': 'Handbetrieb',
'2': 'Winterbetrieb',
'3': 'Sommerbetrieb',
'4': 'Sommer Abluft'} %}
{% set state = states.sensor.ventcube_betriebsart.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_bypass_zustand_text:
unique_id: ventcube_bypass_zustand_text
friendly_name: "VentCube Zustand Bypass"
value_template: >
{% set mapper = {
'0': 'Geschlossen',
'1': 'Offen (Kühlen)',
'2': 'Offen (Heizen)'} %}
{% set state = states.sensor.ventcube_bypass_zustand.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_zustand_aussenklappe_text:
unique_id: ventcube_zustand_aussenklappe_text
friendly_name: "VentCube Zustand Außenklappe"
value_template: >
{% set mapper = {
'0': 'Geschlossen',
'1': 'Offen'} %}
{% set state = states.sensor.ventcube_zustand_aussenklappe.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_status_waermepumpe_text:
unique_id: ventcube_status_waermepumpe_text
friendly_name: "VentCube Status Wärmepumpe"
value_template: >
{% set mapper = {
'0': 'Aus',
'5': 'WP Heizen',
'49': 'WP Kühlen'} %}
{% set state = states.sensor.ventcube_status_waermepumpe.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_heiz_kuehlfunktion_text:
unique_id: ventcube_heiz_kuehlfunktion_text
friendly_name: "VentCube Status Heiz- Kühlfunktion"
value_template: >
{% set mapper = {
'0': 'Aus',
'1': 'Heizen',
'2': 'Kühlen',
'3': 'Auto T-Außen',
'4': 'Auto Digitaler Eingang'} %}
{% set state = states.sensor.ventcube_heiz_kuehlfunktion.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_status_nachheizregister_text:
unique_id: ventcube_status_nachheizregister_text
friendly_name: "VentCube Status Nachheizregister"
value_template: >
{% set mapper = {
'0': 'Inaktiv',
'1': 'Aktiv'} %}
{% set state = states.sensor.ventcube_status_nachheizregister.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_status_vorheizregister_text:
unique_id: ventcube_status_vorheizregister_text
friendly_name: "VentCube Status Vorheizregister"
value_template: >
{% set mapper = {
'0': 'Aus',
'1': 'VHR1 Aktiv',
'2': 'VHR2 Aktiv',
'3': 'VHR1+2 Aktiv'} %}
{% set state = states.sensor.ventcube_status_vorheizregister.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_status_stosslueftung_text:
unique_id: ventcube_status_stosslueftung_text
friendly_name: "VentCube Status Stoßlüftung"
value_template: >
{% set mapper = {
'0': 'Inaktiv',
'1': 'Aktiv'} %}
{% set state = states.sensor.ventcube_status_stosslueftung.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_status_geblaese_zuluft_text:
unique_id: ventcube_status_geblaese_zuluft_text
friendly_name: "VentCube Status Gebläse Zuluft"
value_template: >
{% set mapper = {
'0': 'Deaktiviert',
'1': 'Anlaufphase',
'2': 'Aktiv',
'5': 'Standby',
'6': 'Fehler'} %}
{% set state = states.sensor.ventcube_status_geblaese_zuluft.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
ventcube_status_geblaese_abluft_text:
unique_id: ventcube_status_geblaese_abluft_text
friendly_name: "VentCube Status Gebläse Abluft"
value_template: >
{% set mapper = {
'0': 'Deaktiviert',
'1': 'Anlaufphase',
'2': 'Aktiv',
'5': 'Standby',
'6': 'Fehler'} %}
{% set state = states.sensor.ventcube_status_geblaese_abluft.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
template:
- binary_sensor:
- name: "VentCube Meldung Druckwächter Aktiv"
unique_id: ventcube_meldung_druckwachter_aktiv
device_class: problem
state: >
{% set mapper = {
'0': 'off',
'1': 'on'} %}
{% set state = states.sensor.ventcube_druckwachter_aktiv.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
- name: "VentCube Meldung EVU Sperre aktiv"
unique_id: ventcube_meldung_evu_sperre_aktiv
device_class: problem
state: >
{% set mapper = {
'0': 'off',
'1': 'on'} %}
{% set state = states.sensor.ventcube_evu_sperre_aktiv.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
- name: "VentCube Meldung Wartungstür offen"
unique_id: ventcube_meldung_wartungstur_offen
device_class: problem
state: >
{% set mapper = {
'0': 'off',
'1': 'on'} %}
{% set state = states.sensor.ventcube_wartungstur_offen.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
- name: "VentCube Meldung Gerätefilter verschmutzt"
unique_id: ventcube_meldung_geratefilter_verschmutzt
device_class: problem
state: >
{% set mapper = {
'0': 'off',
'1': 'on'} %}
{% set state = states.sensor.ventcube_geratefilter_verschmutzt.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
- name: "VentCube Meldung Vorgelagerter Filter verschmutzt"
unique_id: ventcube_meldung_vorgelagerter_filter_verschmutzt
device_class: problem
state: >
{% set mapper = {
'0': 'on',
'1': 'off'} %}
{% set state = states.sensor.ventcube_vorgelagerter_filter_verschmutzt.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
- name: "VentCube Meldung Zuluft Zu Kalt"
unique_id: ventcube_meldung_zuluft_zu_kalt
device_class: problem
state: >
{% set mapper = {
'0': 'off',
'1': 'on'} %}
{% set state = states.sensor.ventcube_zuluft_zu_kalt.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}
@hessebubmaddin
Copy link

@JavanXD und @VRage Mega großes Dankeschön, funktioniert!
Das Stoßlüften-Skript hatte ich schon von hier quasi 1:1 ausprobiert, allerdings reicht mein copy/paste Halbwissen nicht um herauszufinden, warum der augenscheinlich gleiche Code mit anderen Einrückungen funktioniert und der aus dem KNX-Forum nicht. Aber hey, Haken dran dank Eurer Hilfe!

@VRage
Copy link

VRage commented Jul 4, 2024

warum der augenscheinlich gleiche Code mit anderen Einrückungen funktioniert
weil yaml der größte 💩 seit JavaScript ist 😋

@hessebubmaddin
Copy link

Ich bekomme im Bedienteil noch immer folgende Fehlermeldung:

Fehler 02-04
Kommunikation Bus-Sensor

Außerdem steht der Sensor "VentCube Temperatur Wohnzimmer IST" seit einer Woche auf 19,5° C - sowohl in HA als auch auf dem Bedienteil!

Kann einer von Euch einen Hinweis geben, wo ich ansetzen kann?

Im Protokoll werden weiterhin hundertfach Fehler geworfen, sie zeigen allerdings nicht auf die korrespondierende Adresse 360, sondern weiterhin auf die aktuellen Drehzahlen:

Pymodbus: BIC_VentCube: Error: device: 1 address: 142 -> pymodbus returned isError True
Pymodbus: BIC_VentCube: Error: device: 1 address: 145 -> pymodbus returned isError True
Pymodbus: BIC_VentCube: Error: device: 1 address: 143 -> pymodbus returned isError True

@VRage
Copy link

VRage commented Jul 12, 2024

Ich bekomme im Bedienteil noch immer folgende Fehlermeldung:

Fehler 02-04
Kommunikation Bus-Sensor

Außerdem steht der Sensor "VentCube Temperatur Wohnzimmer IST" seit einer Woche auf 19,5° C - sowohl in HA als auch auf dem Bedienteil!

Kann einer von Euch einen Hinweis geben, wo ich ansetzen kann?

Im Protokoll werden weiterhin hundertfach Fehler geworfen, sie zeigen allerdings nicht auf die korrespondierende Adresse 360, sondern weiterhin auf die aktuellen Drehzahlen:

Pymodbus: BIC_VentCube: Error: device: 1 address: 142 -> pymodbus returned isError True
Pymodbus: BIC_VentCube: Error: device: 1 address: 145 -> pymodbus returned isError True
Pymodbus: BIC_VentCube: Error: device: 1 address: 143 -> pymodbus returned isError True

Da würde ich auf ein Fehler im Bedienteil schließen. Schonmal die IT- Silverbullet probiert und das Ding neugestartet? Also komplett mit Sicherung raus für Bedien und Leistungsteil, paar sekunden warten und wieder einschalten?! Ansonsten musst du dich bei Schwörer melden und fragen ob sie dir ein Update haben.

@hessebubmaddin
Copy link

Meine Anlage ist 2.15, in der Doku wird 2.25 genannt. Anfrage nach Update ist raus.

@nivost22
Copy link

nivost22 commented Aug 20, 2024

@nivost22

  1. Du brauchst ein Add-On wie zum Beispiel den File Editor https://github.com/home-assistant/addons/tree/master/configurator
  2. Du fügst die Zeile in deine /homeassistant/configuration.yaml hinzu:
homeassistant:
  packages: !include_dir_named packages
  1. Du erstellst einen Ordner mit der oben beschriebenen Yaml Datei in /homeassistant/packages/modbus_wgt.yaml

Hallo @JavanXD , vielen lieben Dank für deine Rückmeldung und generelle Arbeit an der Integration! Ich hatte nicht mitbekommen, dass du mir geantwortet hattest, daher die späte Rückmeldung. Mit deinen Anweisungen hat es funktioniert und ich habe meine WGT in mein HA integrieren können.

Nur die Entität "ventcube_bypass_zustand_text" will er bei mir noch nicht so richtig umsetzen (status: "unknown") - klappt sie bei dir weiterhin?
Am kleinen Rechschreibfehler in deinem Skipt ("vebtcube") liegt es leider nicht.

Beste Grüße

@nivost22
Copy link

Hier mal meine Visualisierung im Tag- & Nachtmodus:

Bildschirmfoto 2024-08-20 um 20 53 58

@nivost22
Copy link

Hallo @JavanXD, kann es sein, dass hier "on" und "off" getauscht werden müssen?

name: "VentCube Meldung Vorgelagerter Filter verschmutzt"
unique_id: ventcube_meldung_vorgelagerter_filter_verschmutzt
device_class: problem
state: >
{% set mapper = {
'0': 'on',
'1': 'off'} %}
{% set state = states.sensor.ventcube_vorgelagerter_filter_verschmutzt.state %}
{{ mapper[state] if state in mapper else 'Unknown' }}

In der Datei parameter.ts von Schwörer steht die "0" an der Stelle für "nein", also "keine Verschmutzung", hier sollte sie dann für "nein", also "kein Problem" stehen, richtig?

Beste Grüße

@JavanXD
Copy link
Author

JavanXD commented Aug 22, 2024

@nivost22

Hier mal meine Visualisierung im Tag- & Nachtmodus:
Bildschirmfoto 2024-08-20 um 20 53 58

Deine Grafik mit dem Luftfluss durch die VentCube sieht um vieles besser aus, als meine, wäre es dir möglich die Grafik hier hochzuladen?

@nivost22
Copy link

nivost22 commented Aug 22, 2024

dark_mode_image image

Wenn es Änderungswünsche/ Verbesserungsvorschläge gibt, dann kann ich die Grafik gerne anpassen 😎
Und wenn es eine bessere Möglichkeit gibt die Grafik zu teilen, dann gerne Bescheid geben, bin noch neu im Github-Game.

@Maigus2510
Copy link

Hallo zusammen und vielen Dank für die Integration. Ich konnte einige Grundfunktionen in Apple HomeKit integrieren. Hat hier jemand schon mal die Zusatzheizungen von Schwörer in den Home Assistent bekommen? Ich kann die nirgends in den Daten finden.
IMG_4458

@mandingo-krieger
Copy link

@nivost22

Die Visualisierung sieht echt top aus. Da ich noch relativ neu im HA-Umfeld bin meine Frage/Bitte, ob es möglich ist, dass du die yaml von der Karte evtl. Teilen könntest. Würde mir gerade wirklich sehr weiterhelfen. Danke schon mal 👍

@nivost22
Copy link

Ob die Positionen der einzelnen Temperaturen in der WGT richtig sind sei mal dahin gestellt. Wenn jemand genauere Infos hat/bekommt oder es besser weiß gerne Rückmeldung geben. Die Grafik kann ggf. noch angepasst werden. Es gibt ja auch unterschiedliche Versionen mit und ohne Nachheizregister...

Die Bilder müssen natürlich manuell über den visuellen Editor eingefügt werden.

type: picture-elements
elements:
  - type: state-badge
    entity: sensor.ventcube_t10_temperatur_aussen
    style:
      top: 17%
      left: 70%
      color: transparent
      '--label-badge-red': seagreen
  - type: state-badge
    entity: sensor.ventcube_t5_temperatur_abluft
    style:
      top: 17%
      left: 30%
      color: transparent
      '--label-badge-red': gold
  - type: state-badge
    entity: sensor.ventcube_t6_temperatur_im_warmetauscher
    style:
      top: 95%
      left: 50%
      color: transparent
      '--label-badge-red': grey
  - type: state-badge
    entity: sensor.ventcube_t2_temperatur_nach_vorheizregister
    style:
      top: 57%
      left: 70%
      color: transparent
      '--label-badge-red': seagreen
  - type: state-badge
    entity: sensor.ventcube_t3_temperatur_vor_nacherwarmung
    style:
      top: 77%
      left: 61%
      color: transparent
      '--label-badge-red': darkolivegreen
  - type: state-badge
    entity: sensor.ventcube_t4_temperatur_nach_nacherwarmung
    style:
      top: 96%
      left: 11%
      color: transparent
      '--label-badge-red': crimson
  - type: state-badge
    entity: sensor.ventcube_temperatur_wohnzimmer_ist
    style:
      top: 17%
      left: 11%
      color: transparent
      '--label-badge-red': grey
  - type: state-badge
    entity: sensor.ventcube_aktuelle_drehzahl_zuluft
    style:
      top: 56%
      left: 11%
      color: transparent
      '--label-badge-red': crimson
  - type: state-badge
    entity: sensor.ventcube_aktuelle_drehzahl_abluft
    style:
      top: 56%
      left: 30%
      color: transparent
      '--label-badge-red': gold
image: /api/image/serve/dcffa23dcf635987ef04418d94393d28/512x512
dark_mode_image: /api/image/serve/d5175d0168137751b94045c53aad80e6/512x512

@JavanXD
Copy link
Author

JavanXD commented Sep 19, 2024

image

Danke Dir für das tolle Bild! So sieht's bei mir aktuell aus.

@mandingo-krieger
Copy link

Wow super. Danke dir 👍

@nivost22
Copy link

@JavanXD , würdest du deine 3 Automatisierungen teilen?

@Hooorny
Copy link

Hooorny commented Sep 21, 2024

Moin, vielen Dank für den coolen Input hier!
Ich habe mal was für meine WRG 134 BP-HK-v mit Erdwärmetauscher gebastelt.

grafik

Grafiken kann ich bei Bedarf gerne zur Verfügung stellen.

@Maigus2510
Copy link

Hallo zusammen, hat jemand eine Ahnung wie ich die Zusatzheizungen einbinden kann?

@Polu2
Copy link

Polu2 commented Sep 26, 2024

Ich habe es so bei mir eingerichtet. Der erste Switch ist für die Freigabe der Zusatzheizung. Der zweite Switch ist dann für die einzelnen Räume. Die Adresse der anderen Räume erhöht sich immer um eins.

modbus:
 ...
 switches:
     - name: "Zusatzheizung Haus"
       address: 234
       write_type: holdings
       verify:
           input_type: holding
     - name: "Wohnzimmer Zusatzheizung Freigabe"
       address: 440
       write_type: holdings
       verify:
           input_type: holding

@Maigus2510
Copy link

So bei mir hat jetzt alles funktioniert, das einzige was ich noch nicht hinbekommen habe ist den PTC Boost einzubinden.

@Polu2
Copy link

Polu2 commented Oct 14, 2024

Meinst die Zusatzheizung für die jeweiligen Räume? So sieht dein weiterer Teil aus. Hilft dir das?

switches:
      - name: "Zusatzheizung Haus"
        address: 234
        write_type: holdings
        verify:
            input_type: holding
      - name: "Wohnzimmer Zusatzheizung Freigabe"
        address: 440
        write_type: holdings
        verify:
            input_type: holding
      - name: "Büro Zusatzheizung Freigabe"
        address: 441
        write_type: holdings
        verify:
            input_type: holding
      - name: "Schlafzimmer Zusatzheizung Freigabe"
        address: 442
        write_type: holdings
        verify:
            input_type: holding
      - name: "Kind links Zusatzheizung Freigabe"
        address: 443
        write_type: holdings
        verify:
            input_type: holding
      - name: "Kind rechts Zusatzheizung Freigabe"
        address: 444
        write_type: holdings
        verify:
            input_type: holding
      - name: "Diele Zusatzheizung Freigabe"
        address: 445
        write_type: holdings
        verify:
            input_type: holding
      - name: "Flur Zusatzheizung Freigabe"
        address: 446
        write_type: holdings
        verify:
            input_type: holding
      - name: "Bad EG Zusatzheizung Freigabe"
        address: 447
        write_type: holdings
        verify:
            input_type: holding
      - name: "Bad OG Zusatzheizung Freigabe"
        address: 448
        write_type: holdings
        verify:
            input_type: holding
      - name: "Wohnzimmer Zusatzheizung aktiv"
        address: 460
        write_type: holdings
        verify:
            input_type: holding
      - name: "Büro Zusatzheizung aktiv"
        address: 461
        write_type: holdings
        verify:
            input_type: holding
      - name: "Schlafzimmer Zusatzheizung aktiv"
        address: 462
        write_type: holdings
        verify:
            input_type: holding
      - name: "Kind links Zusatzheizung aktiv"
        address: 463
        write_type: holdings
        verify:
            input_type: holding
      - name: "Kind rechts Zusatzheizung aktiv"
        address: 464
        write_type: holdings
        verify:
            input_type: holding
      - name: "Diele Zusatzheizung aktiv"
        address: 465
        write_type: holdings
        verify:
            input_type: holding
      - name: "Flur Zusatzheizung aktiv"
        address: 466
        write_type: holdings
        verify:
            input_type: holding

@Maigus2510
Copy link

Die Freigabe selbst hab ich schon drin. Man kann doch da so einen 30 Minuten Heiz-Boost aktivieren am Display in den jeweiligen Räumen. Ich hatte es mit den Parametern „ Zusatzheizung aktiv Raum„ probiert. Das tut sich aber Nix

@Polu2
Copy link

Polu2 commented Oct 14, 2024

Diese Funktion kenne ich von meiner Anlage nicht. Vielleicht schaltet er nur die PTC- Elemente für 30 min ein. Da könntest du über eine Automatisierung lösen, welche die Zusatzheizung für 30 min einschaltet und dann nach 30 min wieder ausschaltet.

Damit die Zusatzheizung bei mir funktioniert, muss ich die generelle Freigabe über den ersten Schalter Zusatzheizung Haus aktivieren. Danach können die einzelnen Räume separat freigegeben werden.

@Maigus2510
Copy link

Wir haben im Bad eine elektrische Fußbodenheizung. Die kann ich entweder über die Zeit-Heizprogramme oder die Zusatzheizungen frei geben. Das funktioniert auch. Zusätzliche kann man in dem Bedienfeld auch noch einen 30 Minuten „Boost“ anklicken und die Heizung würde 30 Minuten an bleiben. Das wäre praktisch ähnlich wie die Stoßlüftung.
IMG_4610

@Maigus2510
Copy link

@JavanXD , würdest du deine 3 Automatisierungen teilen?

Daran wäre ich auch Interessiert. Wir haben noch ein Leda Luc 2 Unterdruckwächter. Der hat ja auch ein Temperatur-Sensor. Hat den schonmal jemand eingebunden?

Grüße

@JavanXD
Copy link
Author

JavanXD commented Nov 19, 2024

@JavanXD , würdest du deine 3 Automatisierungen teilen?

Hallo @Maigus2510 / @nivost22 ,

meine Automatisierungen hier:

alias: VentCube - Schalte Kühl-/Heizmodus je nach Wetterprognose
description: ""
mode: single
triggers:
  - at: "00:15:00"
    trigger: time
  - at: "07:00:00"
    trigger: time
conditions: []
actions:
  - if:
      - condition: numeric_state
        entity_id: sensor.openweathermap_forecast_temperature
        above: 22
      - condition: time
        before: "01:00:00"
    then:
      - data: {}
        action: script.ventcube_luftstufe_3
      - metadata: {}
        data: {}
        action: script.ventcube_aktiviere_kuhlen
  - if:
      - condition: numeric_state
        entity_id: sensor.openweathermap_forecast_temperature
        below: 19
      - condition: time
        after: "05:00:00"
    then:
      - metadata: {}
        data: {}
        action: script.ventcube_aktiviere_heizen

Im Sommer um Hitze zu Vermeiden:

alias: VentCube - Reguliere Lüftungsstufe wenn warm draußen
description: ""
mode: single
triggers:
  - minutes: /10
    trigger: time_pattern
  - entity_id:
      - sensor.ventcube_bypass_zustand
    from: null
    to: null
    trigger: state
conditions:
  - condition: state
    state: "2"
    entity_id: sensor.ventcube_heiz_kuehlfunktion
actions:
  - if:
      - condition: or
        conditions:
          - condition: numeric_state
            entity_id: sensor.ventcube_t4_temperatur_nach_nacherwarmung
            below: sensor.ventcube_t5_temperatur_abluft
          - condition: numeric_state
            entity_id: sensor.ventcube_t3_temperatur_vor_nacherwarmung
            below: sensor.ventcube_t5_temperatur_abluft
          - condition: state
            entity_id: sensor.ventcube_bypass_zustand
            state: "1"
    then:
      - if:
          - condition: and
            conditions:
              - condition: numeric_state
                entity_id: sensor.ventcube_t5_temperatur_abluft
                above: 23.5
              - condition: numeric_state
                entity_id: sensor.ventcube_t10_temperatur_aussen
                below: 20
        then:
          - action: script.ventcube_luftstufe_3
            data: {}
        else:
          - action: script.ventcube_luftstufe_2
            data: {}
    else:
      - metadata: {}
        data: {}
        action: script.ventcube_luftstufe_1

CO2 Sensor:

alias: VentCube - Anpassung Lüftungsstufe bei CO2
description: ""
mode: single
triggers:
  - minutes: /15
    trigger: time_pattern
conditions:
  - condition: state
    entity_id: sensor.ventcube_betriebsart
    state: "1"
  - type: is_carbon_dioxide
    condition: device
    device_id: ebd29c5419fa6418f130987624a519ed
    entity_id: 54a176aa531b7d4562485fc82402bd3e
    domain: sensor
    above: 380
  - condition: state
    entity_id: input_boolean.turn_on_automation_kohlendioxid
    state: "on"
actions:
  - if:
      - condition: numeric_state
        entity_id: sensor.co2_kohlendioxid
        below: 800
    then:
      - metadata: {}
        data: {}
        action: script.ventcube_luftstufe_1
    else:
      - if:
          - condition: numeric_state
            entity_id: sensor.co2_kohlendioxid
            below: 1000
        then:
          - data: {}
            action: script.ventcube_luftstufe_2
        else:
          - if:
              - condition: numeric_state
                entity_id: sensor.co2_luftfeuchtigkeit
                above: 40
            then:
              - metadata: {}
                data: {}
                action: script.ventcube_luftstufe_3
  - delay:
      hours: 0
      minutes: 5
      seconds: 0
      milliseconds: 0

@JavanXD
Copy link
Author

JavanXD commented Nov 19, 2024

Daran wäre ich auch Interessiert. Wir haben noch ein Leda Luc 2 Unterdruckwächter. Der hat ja auch ein Temperatur-Sensor. Hat den schonmal jemand eingebunden?

Hi @Maigus2510 ,

das lässt sich mit einem ESPHome umsetzen, dazu brauchst du einen ESP32, den kannst du über den USB Port des Displays mit Strom versorgen. Blauer Kreis = USB Anschluss, Roter Kreis den Temperatursensor auslesen.
Der Temperatursensor ist ein PT100, der lässt sich mit der https://esphome.io/components/sensor/max31865.html Komponente auslesen.
Problem ist aber, der Temperatursensor lässt sich nur von einem Receiver auslesen, dh. die Leda LUC würde dann kein Messwert mehr empfangen.

@JavanXD
Copy link
Author

JavanXD commented Nov 23, 2024

@Maigus2510 Ich muss mich korrigieren, ich messe in der Zwischenzeit die LEDA Luc2 Messwerte über den CAN Bus aus. Ich habe die Yaml Datei hier hochgeladen und auch die benötigten Bauteile aufgelistet: https://gist.github.com/JavanXD/696d026ef202a7d6455ed4745df63e39
Image

@StefanZander
Copy link

StefanZander commented Jan 6, 2025

Hallo in die Runde,
erstmal vielen Dank für die tollen Beiträge hier.
Mein Problem ist ein vergleichsweise triviales: Viele der Text-Entitäten (bspw. ventcube_status_waermepumpe_text) liefern bei mir den Wert Unknown obwohl der zugehörige Sensor (bspw. states.sensor.ventcube_status_waermepumpe.state) die korrekte Zahl liefert.

Im YAML sieht der Template Sensor so aus:

      ventcube_status_waermepumpe_text:
        unique_id: ventcube_status_waermepumpe_text
        friendly_name: "VentCube Status Wärmepumpe"
        value_template: >
          {% set mapper = {
            '0': 'Aus',
            '5': 'WP Heizen',
            '49': 'WP Kühlen'} %}
          {% set state =  states.sensor.ventcube_status_waermepumpe.state %}
          {{ mapper[state] if state in mapper else 'Unknown' }}

Interessant ist, dass der Eintrag für den Zustand der Außenklappe mit nahezu identischem YAML-Code funktioniert, d.h., in der Text-Entität (ventcube_zustand_aussenklappe_text) wird der korrekte Text (bspw. Geschlossen bei Status 0) angezeigt.

Zum Vergleich hier der entspr. Auszug aus der modbus_wgt.yaml:

ventcube_zustand_aussenklappe_text:
        unique_id: ventcube_zustand_aussenklappe_text
        friendly_name: "VentCube Zustand Außenklappe"
        value_template: >
          {% set mapper = {
            '0': 'Geschlossen',
            '1': 'Offen'} %}
          {% set state =  states.sensor.ventcube_zustand_aussenklappe.state %}
          {{ mapper[state] if state in mapper else 'Unknown' }}

Vielleicht hat jemand eine Idee woran das liegen könnte...

Vielen Dank vorab und beste Grüße!

Edit: Es scheint, als hätte states.sensor.ventcube_status_waermepumpe.state keinen Wert bzw. ist diese Variable leer. Der Aufruf has_value('sensor.ventcube_status_waermepumpe') liefert False zurück.

Edit 2: Es wird immer kurioser:
Verwende ich statt dem obigen Eintrag diesen hier {% set state = states('sensor.ventcube_status_warmepumpe') %} (man beachte: ...status_warmepumpe statt ...status_waermepumpe) dann funktioniert der template sensor (siehe Autovervollständigung auf beigefügten Screenshot). Ich habe aktuell noch keine Ahnung warum dies der Fall ist. In der modbus_wgt.yaml findet sich an keiner Stelle ein Sensor mit dem Namen ventcube_status_warmepumpe.

Screenshot 2025-01-06 at 21 40 32

@FreshyQS
Copy link

Hi, danke für die Vorarbeit und die ganzen Kommentare.
Das ist mein erstes Projekt im Home Assistend, damit sich andere Anfänger leichter tun, hab ich mal eine Anleitung geschrieben, die gerne angepasst und weitergeführt werden darf.
Teilweise stehen die Infos auch in den Kommentaren hier, dort habe ich mich dann bedient. In der Anleitung steht es nur etwas ausfürhlicher drinnen mit ein paar Zusatzschritten.

Anleitung Ventcube in Homeassistend integrieren

  1. Ventcube in das Hauseigene Netzwerk integrieren
    a. Ventcube via Lan-Verkabeln
    b. In den Einstellungen Modbus TCP aktivieren
    i. WGT Display
    ii. Einstellungen
    iii. Service
    iv. Passwort eingeben (Standard „1234“)
    v. Ihr landet dadurch wieder in den Hauptscreen -> klickt erneut auf Einstellungen
    vi. Grundeinstellungen
    vii. 10. Modbus TCP aktivieren
    viii. WGT neustarten (Sicherung raus/rein -> gibt eventuell auch charmantere Wege)
    c. IP-Adresse der WGT herausfinden
    i. Entweder in den Netzwerkeinstellung am WGT-Display
    ii. Bei Fritzbox-Modem wie folgt
    1. Internet Browser startet -> fritz.box + einloggen
    2. Heimnetz -> Netzwerk

  2. Installation File Editor
    a. Am besten erstmal ein Back-Up in Home Assistent ziehen
    b. Add-On zum Editieren von File Editor installieren (z.B https://github.com/home-assistant/addons/tree/master/configurator) oder
    „File Editor“ aus dem offiziellen Add-On Store (Einstellungen -> Add-ons->Add-on Store-> File Editor->Installieren und starten

3.. Anpassen der Konfiguration
a. Anpassung der /homeassistant/configuration.yaml
i. File-Editor öffnen configuration.yaml suchen und öffnen
ii. In die configuration.yaml folgendes schreiben
grafik
homeassistant:
packages: !include_dir_named packages

  iii.	Neuen Ordner mit dem Namen „packages“ im File Editor anlegen
  iv.	Ordner öffnen und neues File in diesem Ordner anlegen „modbus_wgt.yaml“
  v.	Die oben beschriebene yaml hineinkopieren (am besten in RAW  öffnen (oben rechts) und copy&paste)
  vi.	Zeile 15 „host: !secret wgt_ip“ durch IP-Adresse ersetzen, welche im Schritt 1.c rausgefunden wurde
            Die Zeile sieht dann wie folgt aus „host: XXX.XXX.XX.XX“
  1. YAML-Konfiguration neu laden
    a. Einstellungen
    b. Nach Neu Laden „Alle YAML-Konfigurationen“ suchen und ausführen.

  2. Dashboard anpassen
    a. Übersicht
    b. Stift oben rechts (bearbeiten)
    c. Karten hinzufügen
    i. Nun könnt ihr Karten auswählen oder nach Entität
    ii. Wollt ihr das Diagramm von nivost22 laden, dann bei „Auswahl nach Karte“ nach unten scrollen und „Manuell auswählen“
    iii. Die yaml siehe Kommentar nivost 22 on Sep 19, 2024 kopieren und einfügen (type: darf nur am Anfang einmal stehen
    müsst ihr wsl einmal löschen, da es schon vorgegeben ist)
    iv. Auf „visuellen Editor anzeigen“ wechseln (unten links im Dialog)
    v. Ganz unten „Neues Element hinzufügen“ -> Bild
    vi. Die zugehörigen Bilder hochladen
    vii. ANMERKUNG
    viii. Ab hier müsst ihr die Bildwerte anpassen, das hab ich selbst nur mit mühe und Not hinbekommen. Kann wer evtl die
    Anleitung weiterführen?
    Das Bild wurde bei mir etwas klein und ich habe die ganzen Badges und das Bild rumgeschoben
    ix.
    grafik

    x. Speichern -> Fertig

@JavanXD

Die drei Auswahlfelder:

Damit das Auswahlfelöd der Lüftungsstufe funktioniert brauch man für das Auswahlfeld eine Automation, die so aussieht:..

Kannst du das noch erklären wie wo was?
Finde die Funktion nämlich sehr gut.

Danke :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment