Skip to content

Instantly share code, notes, and snippets.

@JavanXD
Last active July 12, 2024 06:24
Show Gist options
  • Save JavanXD/a3e8911e69f3a27a81eeeb80414bb6ab to your computer and use it in GitHub Desktop.
Save JavanXD/a3e8911e69f3a27a81eeeb80414bb6ab to your computer and use it in GitHub Desktop.
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 Zustand Bypass
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: vebtcube_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' }}
@JavanXD
Copy link
Author

JavanXD commented Jan 7, 2024

@JavanXD
Copy link
Author

JavanXD commented Jan 7, 2024

Beispiel der Automation für eines der input_select Felder:

alias: VentCube Betriebsart Auswahlfeld
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.ventcube_betriebsart
    id: input
    to: null
  - platform: state
    entity_id:
      - input_select.ventcube_betriebsart
    id: select
    to: null
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: input
        sequence:
          - variables:
              index: "{{ trigger.to_state.state | int(0) }}"
          - service: input_select.select_option
            data:
              option: >-
                {{ state_attr("input_select.ventcube_betriebsart", "options")[
                index ] }}
            target:
              entity_id: input_select.ventcube_betriebsart
      - conditions:
          - condition: trigger
            id: select
        sequence:
          - service: modbus.write_register
            data_template:
              address: 100
              slave: 1
              hub: BIC_VentCube
              value:
                - "{{ trigger.to_state.state[0] | int(0) }}"
                - 0
mode: queued
max: 5

So eine Automation brauch man für jedes der Auswahlfelder.

@JavanXD
Copy link
Author

JavanXD commented Jan 7, 2024

Beispiel eines alert für einen der binary Template Sensoren:

alert:
  ventcube_meldung_druckwachter_aktiv_alert:
    name: VentCube Druckwächter ausgelöst
    entity_id: binary_sensor.ventcube_meldung_druckwachter_aktiv
    state: "on"
    title: VentCube Druckwächter ausgelöst!
    message: Die Leda LUC hat die Abluft der Lüftung ausgeschalten. Bitte das Fenster öffnen und ggs. Lüftungsanlage ausschalten.
    done_message: Druckwächter Meldung beendet.
    repeat: 
      - 10
    can_acknowledge: true
    skip_first: false  
    notifiers:
      - all_apps
    data:
      tag: ventcube_druck
      sticky: "true" # Android, can't be dismissed (clicking on it)
      color: "#2DF56D" # Android
      channel: "Alarm" # Android
      priority: high # However, in some cases (such as phone being stationary or when screen has been turned off for prolonged period of time), default notifications will not ring the phone until screen is turned on.
      ttl: 0 
      importance: high # Android, importance of the Channel (high, low, max, min and default)
      vibrationPattern: "100, 1000, 100, 1000, 100" # Android, the pattern you wish to set for vibration
      ledColor: "orange" # Android, set the LED to red
      persistent: false # Android, notification can't be swiped away
      visibility: public # Android, show all details on lock screen
      alert_once: true # Only alert once for this notification
      notification_icon: "mdi:hvac-off" # Android 
      push: # iOS notification settings:
        category: "ALARM"
        interruption-level: default # critical=notify even on mute, active=default
        sound: 
          name: "default"
          critical: 1
          volume: 1.0
      actions: 
      - action: "URI"
        title: "Öffne Dashboard"
        uri: "/my-smarthome/heizung"

@VRage
Copy link

VRage commented Feb 23, 2024

Hi, vielen Dank für die Konfiguration.
Ich hab mal versucht ein switch für die aktive Zusatzheizung zu erstellen:

- name: VentCube Aktiv Zusatzheizung Kinderzimmer2
      slave: 1
      address: 464
      command_on: 0x1 # Aktiv
      command_off: 0x0 # Gesperrt
      write_type: holdings
      verify:
        input_type: holding
        state_on: 0x1
        state_off: 0x0
        delay: 5
      unique_id: ventcube_set_aktiv_zusatzheizung_kinderzimmer2

Leider bekomme ich folgende Fehlermeldung: BIC_VentCube: Error: device: 1 address: 464 -> Exception Response(144, 16, IllegalAddress)
Interessanterweise wird diese Adresse richtig ausgelesen. Wenn ich im Zimmer die Zusatzheizung aktiviere, wird das korrekt angezeigt. Hast du zufällig das zum laufen bekommen?

Ahja und ich bekomme noch unabhängig von oben noch diese meldung Unexpected response from modbus device slave 1 register 100, got 0x 1

@JavanXD
Copy link
Author

JavanXD commented Feb 28, 2024

Ahja und ich bekomme noch unabhängig von oben noch diese meldung Unexpected response from modbus device slave 1 register 100, got 0x 1

Ich hab die Switches im Yaml, die das verursachen inzwischen entfernt, da ich nun das input_select dafür verwende.

Hast du zufällig das zum laufen bekommen?

Ich habe keine Zusatzheizung, kanns daher nicht testen. Könnte aber 1) daran liegen, dass es nur eine readonly-Adresse ist, oder 2) dass als state_on und command_on nicht 0x1 sondern nur 1als value genutzt werden muss.

Ich würde die modbus switches generell vermeiden und auf Skripte umstellen. Die Switches haben sich bei mir als unzuverlässig herausgestellt und haben auch eine große Latenz beim Schalten.

@VRage
Copy link

VRage commented Feb 28, 2024

Ich habe keine Zusatzheizung, kanns daher nicht testen.

Schade. In der Doku wird eigentlich eine write-Adresse angegeben und die anderen "Umsetzungen" z.b. im IoBroker verwenden auch diese Adresse zum setzen. Auch eigenartig ist, dass wenn man die Zusatzheizung an einem Bedienelement aktiviert, dann passt sich der modbus switch an die richtigen Wert an.

Wie sieht es mit den Climates aus, funktionierten diese einigermaßen richtig?

@JavanXD
Copy link
Author

JavanXD commented Feb 28, 2024

Wie sieht es mit den Climates aus, funktionierten diese einigermaßen richtig?

Ja die zwei Climates funktionieren einwandfrei :)

@nivost22
Copy link

Hallo,

bin neu in der HA-Welt und beruflich eher in der Mechanik zuhause. Was muss man tun, um die Integration zu integrieren? 😅
Muss ich die yaml-Datei in HA-Verzeichnis kopieren und dann in der configuration.yaml includieren oder läuft das über HACS? Inwieweit muss ich die modbus_wgt.yaml auf mein System anpassen?

@JavanXD
Copy link
Author

JavanXD commented May 19, 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

@JavanXD
Copy link
Author

JavanXD commented May 19, 2024

Ein paar Automatisierungs-Ideen, die ich nutze:

  • Im Winter schalte ich Abends die Nacherwärmung der Zuluft (T4) nachts aus, damit das Schlafzimmer kühl bleibt.
  • Im Sommer prüfe ich abends bereits die Temperaturprognose für den folgenden Tag und schalte bei heißen Wetter abends bereits die Kühlfunktion an, was wiederum den Bypass auslöst und damit die abgekühlte Nachtluft ohne Wärmerückgewinnung (T3) rein lässt.
  • Wenn der Feinstaubwert in der Außenluft zu hoch ist, schalte ich die Lüftungsanlage aus. Die Schornsteine im Winter hatten hier recht viel Feinstaub verursacht.
  • Ich habe einen CO2 Sensor im Schlafzimmer, anhand dieser Schwellwerte steuere ich die Lüftungsstufe.

@VRage
Copy link

VRage commented May 24, 2024

Ich hab eine Automatisierung die die Lüfterstufe auf 4 stellt, wenn der Luftfeuchtigkeitsensor (externes gerät) über 80% anzeigt, fällt die Luffeuchtigkeit unter 60% wird wieder die Lüfterstufe eingestellt die vor der Automatisierung eingestellt war

@JavanXD
Copy link
Author

JavanXD commented Jun 25, 2024

Ich habe eine neue Automation bei mir ergänzt:

  • Sobald die Zuluft (T5) wärmer ist als die Abluft (T4) wird die Lüftungsstufe auf 1 gestellt, und umgekehrt ist die Lüftungsstufe auf 3. Das ist dafür da um im Sommer die kühle Luft nachts reinzuholen und tagsüber die warme Luft möglichst draußen zu lassen.

@hessebubmaddin
Copy link

hessebubmaddin commented Jul 3, 2024

Ich habe die Integration soweit am Laufen und ein Steuerungs-Dashboard ähnlich dem Beispiel gebaut. Ich sehe auch die aktuelle Lüfterstufe und andere aktuelle Werte. ABER ich kann von HA aus nicht die Lüftung steuern. Ich habe eben mal durch das Menü der Bedieneinheit gescrollt, und mir ist eigentlich kein Wert aufgefallen, der augenscheinlich nicht auf "Kommunikation erlauben" stehen würde. Mag aber sein, dass ich nicht die richtigen Einstellungen kenne. Ist beispielsweise der "Digitaleingang" der USB-Port oder die Schnittstelle?
Was muss denn in der Bedieneinheit aktiviert sein, damit ich mit HA auch steuern kann?

Edit/add:
Im Protokoll werden auch ordentlich Fehler geworfen:
Pymodbus: BIC_VentCube: Error: device: 1 address: 142 -> pymodbus returned isError True
Pymodbus: BIC_VentCube: Error: device: 1 address: 144 -> 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

und
modbus BIC_VentCube communication closed

Im Bedienteil taucht folgende Meldung auf:
Fehler 02-04
Kommunikation Bus-Sensor

@VRage
Copy link

VRage commented Jul 3, 2024

Ich habe eine neue Automation bei mir ergänzt:

  • Sobald die Zuluft (T5) wärmer ist als die Abluft (T4) wird die Lüftungsstufe auf 1 gestellt, und umgekehrt ist die Lüftungsstufe auf 3. Das ist dafür da um im Sommer die kühle Luft nachts reinzuholen und tagsüber die warme Luft möglichst draußen zu lassen.

Wie gut hat das über die Zeit geklappt? Selbst wenn wir Nachts die Lüftung auf 3 stellen bleibt es teilweise über 25°C warm. Bei mir ist die Abluft T5 und T4 Temperatur nach Nacherwärmung, hab ich da was falsch?

@VRage
Copy link

VRage commented Jul 3, 2024

Ich habe die Integration soweit am Laufen und ein Steuerungs-Dashboard ähnlich dem Beispiel gebaut. Ich sehe auch die aktuelle Lüfterstufe und andere aktuelle Werte. ABER ich kann von HA aus nicht die Lüftung steuern. Ich habe eben mal durch das Menü der Bedieneinheit gescrollt, und mir ist eigentlich kein Wert aufgefallen, der augenscheinlich nicht auf "Kommunikation erlauben" stehen würde. Mag aber sein, dass ich nicht die richtigen Einstellungen kenne. Ist beispielsweise der "Digitaleingang" der USB-Port oder die Schnittstelle? Was muss denn in der Bedieneinheit aktiviert sein, damit ich mit HA auch steuern kann?

Wenn du die richtigen Werte siehst klappt ja schonmal die Kommunikation mit deinem Lüftungssteuergerät. Die Lüfterstufe lässt sich aber nur umschalten wenn der Modus auf Manuell steht. Sobald sommermodus oder Wintermodus aktiv ist kann die Lüfterstufe nicht bzw. beschränkt eingestellt werden

@hessebubmaddin
Copy link

@VRage Danke Dir - die Lösung lag in der Automation, da war was beim C/P doppelt reingekommen.

Kann mir einer noch sagen, wie ich die Stoßlüftung aktiviere? Nach meinem Verständnis gibt es einen Sensor für die Restlaufzeit und auch den Status, aber wie starte ich eine Stoßlüftung? -Selbst gebaut wäre es ja nix anderes als "manuell Stufe 4 für 30min", aber da es einen Sensor für die Restlaufzeit gibt, kann ich mir schwer vorstellen, dass der nur dafür da ist, den auf dem Bedienpanel dargestellten Wert in HA abzubilden.

@VRage
Copy link

VRage commented Jul 4, 2024

@hessebubmaddin meinst du vielleicht die "Sommer abluft", die sollte bei den Betriebsmodis dabei sein VentCube Betriebsart. Ich glaub, diese betreibsart kannst du nur verwenden wenn deine Fenster mindestens gekippt sind. Ich glaube da wird die Zuluft "deaktiviert" und die Abluft auf 4 gestellt. So wird direkt Luft über die Fenster ins Haus gezogen ... aber sicher bin ich mir nicht

@hessebubmaddin
Copy link

@VRage Nee, das ist was anderes. Die Stoßlüftung (shock ventilation) ist eine eigene Funktion, die Du bspw. beim Kochen anschmeißt. Die Lüftung geht für 30min auf Stufe vier und dann automatisch wieder zurück. Dass es tatsächlich eine eigene Funktion ist, scheint mir in den Zeilen 33-36 ersichtlich (ebenso im IO-Broker Code von Exodibur vorhanden). Bei uns ist das eigentlich die meistgenutzte Funktion.
Im inline Kommentar steht, dass diese Funktion per input_select Automation angesprochen werden muss - hier endet allerdings mein Latein. Vom dargestellten Beispiel oben komm ich mit meinen Minimalst-Skills da nicht weiter. Any ideas/help?

@VRage
Copy link

VRage commented Jul 4, 2024

Ah ok, die Funktion kannte ich nur wenn man Sommermodus an hat und auf Lüfterstufe 4 schaltet, da lief es auch nur 30min. Ob du das über Modbus steuern kannst muss man in der schwörer modbus parameterliste schauen

@JavanXD
Copy link
Author

JavanXD commented Jul 4, 2024

Ich habe eine neue Automation bei mir ergänzt:

  • Sobald die Zuluft (T5) wärmer ist als die Abluft (T4) wird die Lüftungsstufe auf 1 gestellt, und umgekehrt ist die Lüftungsstufe auf 3. Das ist dafür da um im Sommer die kühle Luft nachts reinzuholen und tagsüber die warme Luft möglichst draußen zu lassen.

Wie gut hat das über die Zeit geklappt? Selbst wenn wir Nachts die Lüftung auf 3 stellen bleibt es teilweise über 25°C warm. Bei mir ist die Abluft T5 und T4 Temperatur nach Nacherwärmung, hab ich da was falsch?

Laut den Thermostaten in der VentCube und in den Räumen funktioniert es schon, aber ja - wie du sagst, sehr träge und minimal. Problem ist, die Wände etc. haben die Temperatur bereits gespeichert und geben die wieder an die Luft ab. Ich lass es zwar so laufen, weil es minimal hilft. In Summe ist es bei mir einer aus vielen Faktoren, neben automatischer Verschattung, Lüften, und ggf. die Kühlfunktion der FBH.

@JavanXD
Copy link
Author

JavanXD commented Jul 4, 2024

@hessebubmaddin
Stoßluft aktiviert man per Skript so:

alias: VentCube Aktiviere Stoßlüftung
sequence:
  - service: modbus.write_register
    data:
      address: 111
      unit: 255
      value:
        - 1
      hub: BIC_VentCube
mode: single
icon: mdi:wind-power

Luftstufe 3 kann man so per Skript aktivieren:

alias: VentCube Luftstufe 3
sequence:
  - service: modbus.write_register
    data:
      address: 101
      slave: 1
      hub: BIC_VentCube
      value:
        - 3
mode: single
icon: mdi:fan-speed-3

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

alias: VentCube Manuelle Luftstufe Auswahlfeld
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.ventcube_manuelle_luftstufe
    id: input
    to: null
  - platform: state
    entity_id:
      - input_select.ventcube_manuelle_luftstufe
    id: select
    to: null
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: input
        sequence:
          - variables:
              index: "{{ trigger.to_state.state | int(0) }}"
          - service: input_select.select_option
            data:
              option: >-
                {{ state_attr("input_select.ventcube_manuelle_luftstufe",
                "options")[ index ] }}
            target:
              entity_id: input_select.ventcube_manuelle_luftstufe
      - conditions:
          - condition: trigger
            id: select
        sequence:
          - service: modbus.write_register
            data_template:
              address: 101
              slave: 1
              hub: BIC_VentCube
              value:
                - "{{ trigger.to_state.state[0] | int(0) }}"
mode: queued
max: 3

So eine Automation legt man für jedes Auswahlfeld an, hier die anderen:

Heiz oder Kühlfunktion:

alias: VentCube Heiz- Kühlfunktion Auswahlfeld
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.ventcube_heiz_kuehlfunktion
    id: input
    to: null
  - platform: state
    entity_id:
      - input_select.ventcube_heiz_kuehlfunktion
    id: select
    to: null
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: input
        sequence:
          - variables:
              index: "{{ trigger.to_state.state | int(0) }}"
          - service: input_select.select_option
            data:
              option: >-
                {{ state_attr("input_select.ventcube_heiz_kuehlfunktion",
                "options")[ index ] }}
            target:
              entity_id: input_select.ventcube_heiz_kuehlfunktion
      - conditions:
          - condition: trigger
            id: select
        sequence:
          - service: modbus.write_register
            data_template:
              address: 230
              slave: 1
              hub: BIC_VentCube
              value:
                - "{{ trigger.to_state.state[0] | int(0) }}"
                - 0
mode: queued
max: 3

Betriebsart:

alias: VentCube Betriebsart Auswahlfeld
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.ventcube_betriebsart
    id: input
    to: null
  - platform: state
    entity_id:
      - input_select.ventcube_betriebsart
    id: select
    to: null
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id: input
        sequence:
          - variables:
              index: "{{ trigger.to_state.state | int(0) }}"
          - service: input_select.select_option
            data:
              option: >-
                {{ state_attr("input_select.ventcube_betriebsart", "options")[
                index ] }}
            target:
              entity_id: input_select.ventcube_betriebsart
      - conditions:
          - condition: trigger
            id: select
        sequence:
          - service: modbus.write_register
            data_template:
              address: 100
              slave: 1
              hub: BIC_VentCube
              value:
                - "{{ trigger.to_state.state[0] | int(0) }}"
                - 0
mode: queued
max: 5

@VRage
Copy link

VRage commented Jul 4, 2024

@hessebubmaddin laut parameterliste ist Stoßlüften auf Adresse 111 gelegt und kann geschrieben werden ( mit 0 "inaktiv" und 1 "aktiv" ). Ob das wirklich über modbus Funktioniert müsste ich erst daheim ausprobieren.

@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.

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