« Heizung, Lüftung, Klima  |

Maico WS 320 - Home Assistant Implementierung

Teilen: facebook    whatsapp    email
Zusammenfassung anzeigen (Beta)
 1  2 ... 3  4  5  6  7  8 
  •  mampfgnom
  •   Bronze-Award
23.10.2022 - 12.5.2025
147 Antworten | 17 Autoren 147
6
153
Hallo,
wie bereits in diesem Beitrag ( https://www.energiesparhaus.at/forum-berhans-smarthome-projekt/65520_3#688057 ) angekündigt, möchte ich gerne meine Home Assistant (HA) Implementierung für meine Maico WS 320 vorstellen. Bei mir läuft ein RaspPi mit HA und über die Modbus TCP Schnittstelle lese ich die Maico aus und ändere per Knopfdruck den Betriebsmodus und die Lüfterstufe. Aktuell sieht das ganze wie folgt aus:


2022/20221023215201.jpg
 
Wir sehen in der oberen Grafik die Maico mit ihren 4 Kanälen, 3 Filter und viele Betriebsparameter. Im unteren Bereich befinden sich Buttons zum Wechsel der Betriebsart und zum Einstellen der Lüfterstufe. ACHTUNG - die Buttons schreiben Modbus Register, verwendet die zugehörigen Codeschnipsel auf eigene Verantwortung.
Alle angezeigten Werte werden über Modbus Register ausgelesen und teilweise daraus berechnet (z.B. Wärmerückgewinnung). Das Hintergrundbild hat mir Schorschi81 zur Verfügung gestellt und ich habe es auf meine Anlage angepasst. Die Bilder der drei Filter habe ich per Screenshot von leitwolfs Homepage entnommen, ich hoffe das gibt keine Probleme mit Copyright.

Sensoren

Wie kriegen wir das umgesetzt? Ich gehe davon aus, dass HA läuft und die Maico per LAN mit dem Netzwerk verbunden ist. In die configuration.yaml kommt dann folgendes:

https://drive.google.com/file/d/1v_koLB_hQvF0GdJXUwa2f6-bCt4CeSUx/view?usp=sharing

GUI

Als nächstes erzeugt euch ein neues Dashbord und geht auf „Karte hinzufügen“ --> „Manuell“. Dann fügt ihr folgenden Code ein:

https://drive.google.com/file/d/1vZWlK_PpW5CVA_g5ubIznu-wGzd9C_58/view?usp=sharing

Darin wird auf ein image mit dem Pfad „/local/skizze_kwl.png“ verwiesen. Der Ordner „/local/“ meint den Ordner „www“ in eurem HA /config Pfad. Also da wo eure configuration.yaml liegt, erstellt ihr euch einen Ordner „www“ falls der noch nicht existiert und kopiert dort hin euer Hintergrundbild.
Ich wünsche euch viel Spaß beim Ausprobieren. Sollten Fragen offen bleiben, will ich gerne versuchen sie zu beantworten, aber ich bin selber absoluter Neuling in HA.
 

von Metzi, owall, leitwolf, lewurm, hpgo

  •  Schorschi81
5.5.2025  (#141)
Werkseinstellung sind 14 °C als Minimum bei Maico. So steht meine auch aktuell immer noch.
Der Bypass dürfte geregelt sein, also nicht nur Auf-Zu. Meine aktuelle AUL ist ca. 10,5 °C und die ZUL 15,9 °C. Laut Diagramm ging die ZUL in den letzten 24 h nie unter 14 °C.

1
  •  mampfgnom
  •   Bronze-Award
5.5.2025  (#142)
Hmmm also bei 14C hätte ich Bauchschmerzen, dass in einer abgehängten Decke die stehende Luft zwischen kaltem Spirorohr und Trockenbauabhängung am Rohr kondensiert. Ich habe es aber nicht gerechnet. 

Jedenfalls scheint die Regelung des Bypass zu funktionieren. Ich öffne den Bypass, sobald rF im Führungsraum über 55% steigt und die absolute Feuchtigkeit außen größer ist als innen. Geschlossen wird der Bypass wieder, wenn rF_in < 50% oder H_in < H_out. Letzte Nacht hat das geklappt:


_aktuell/20250505125594.jpg


Der Entfeuchtungseffekt ist natürlich überschaubar und hängt von der Außenluft ab. Wichtig ist mir vor allem, dass der Bypass nicht mehr aufgeht, wenn die Luft draußen feuchter ist als innen. Sobald das passiert, kriegt man die Feuchtigkeit mit Enthalpiewärmetauscher kaum wieder raus im Sommer. Mal schauen wie lange ich mit der Regelung im Sommer unter 60% bleiben kann. 


1
  •  leitwolf
  •   Gold-Award
6.5.2025  (#143)

zitat..
mampfgnom schrieb: Jedenfalls scheint die Regelung des Bypass zu funktionieren. Ich öffne den Bypass, sobald rF im Führungsraum über 55% steigt und die absolute Feuchtigkeit außen größer ist als innen.

war wohl nur ein Tippfehler: Bypass öffnen, sobald abs. Feuchte außen kleiner ist als innen.

Wenn die Feuchteunterschiede zwischen innen und außen gering sind, ist es relativ egal, ob Enthalpietauscher oder Standardtauscher.
Jedoch bringt der Enthalpietauscher an schwülen Sommertagen schon eine deutliche Verringerung des Feuchteeintrages in das Haus. Die Bypasssteuerung über die Absolutfeuchte statt über die Temperatur ist meiner Einschätzung nach wesentlich sinnvoller. Leider scheitert es da bei den Herstellern an der Erkennung des Bedarfs und dem Mehraufwand für die Implementierung der Absolutfeuchtemessung/-berechnung.


1
  •  mampfgnom
  •   Bronze-Award
6.5.2025  (#144)

zitat..
leitwolf schrieb: war wohl nur ein Tippfehler: Bypass öffnen, sobald abs. Feuchte außen kleiner ist als innen.

Ja natürlich das war ein Tippfehler. Danke für die Korrektur. 
 

zitat..
leitwolf schrieb: Die Bypasssteuerung über die Absolutfeuchte statt über die Temperatur ist meiner Einschätzung nach wesentlich sinnvoller.

Sehe ich genau so. Zumal ich mich bei einem normal gedämmten Neubau frage, welche Kühlwirkung der Bypass im Sommer haben soll. 


1
  •  mampfgnom
  •   Bronze-Award
10.5.2025  (#145)
Ich möchte noch mal ein paar zusammenfassende Worte zu der Bypass Regelung schreiben,

Wozu braucht es eine extra Regelung?

Der Bypass der WS 320 wird nur zur Kühlung genutzt. Abhängig von den eingestellten Grenzwerten für die Raumtemperatur sowie der Außentemperatur, geht der Bypass auf und soll kalte Luft ins Haus lassen. Dabei wird wird die Feuchtigkeit der Luft innen und außen nicht berücksichtigt. Gerade in den Sommermonaten mit schwülem Klima hat es draußen schnell eine sehr hohe relative Feuchtigkeit. Wenn die Außentemperatur dann leicht unter der Innentemperatur liegt, ist die absolute Feuchtigkeit außen deutlich höher als innen. Der Bypass geht auf und die ganze Feuchtigkeit wandert ungebremst ins Haus. Selbst wenn die Außenfeuchte in den folgenden Tagen sinken sollte, bleibt es im Haus feucht, weil der Enthalpietauscher einen Feuchtigkeitsabbau verlangsamt. Zusammen mit passiver Kühlung entsteht so schnell ein unangenehmes Klimas mit rel. Feuchte (rF) von über 60%. Wir hatten bis jetzt jeden Sommer irgendwann um die 70% rF. 

Eine Feuchteregelung kennt die WS 320 fast nicht. Man kann einen maximalen Wert für den rF-Sensor definieren (zentral in der Abluft). Wird dieser Maximalwert überschritten, reagiert die Maico mit Intensivlüftung. Dank Enthalpietauscher kann es trotzdem dauern bis die Feuchtigkeit wieder sinkt. Noch schlimmer ist der Fall, dass die absolute Feuchtigkeit außen (H_out) größer ist als im Haus (H_in), aber die gemessene rF innen dank eines Badevorgangs oder einer Kochaktion den Maximalwert überschreitet. Dann versucht die Maico mit voller Drehzahl die Feuchtigkeit zu senken und holt dabei noch mehr feuchte Luft von außen ins Haus.

Was wollen wir erreichen?

Wir möchten die Regelung der Feuchtigkeit selbst in die Hand nehmen und so verhindern, dass sich im Sommer ein feuchtes Kellerklima einstellt. Unser Werkzeug zur Regelung soll der Bypass sein. Die Temperaturregelung / Kühlung mit der Maico wollen wir komplett unterbinden. Ich habe es nicht durchgerechnet, aber ich vermute der Kühleffekt durch die Lüftung bei offenen Bypass ist vernachlässigbar. Dafür haben wir eine passive Kühlung über FBH FBH [Fußbodenheizung]/BKA.

Wie machen wir das?

Den Bypass kann man meines Wissens nicht direkt ansteuern. Ich kenne kein Modbus Register, mit dem der Bypass geöffnet und geschlossen werden kann. Also nutzen wir die Logik beim Kühlen aus. Dazu müssen wir verstehen wann der Bypass beim Kühlen öffnet und wann er wieder schließt. Zunächst die relevanten Größen:

Traum ... Das ist die aktuelle Raumtemperatur. Hierfür wird standardmäßig die Ablufttemperatur herangezogen.
Traum_soll ... Diesen Wert soll die Raumtemperatur mindestens haben.
Traum_max ... Diesen Wert darf die Raumtemperatur maximal haben.
Tzul_min ... Diesen Wert soll die Zuluft beim Kühlen nicht unterschreiten.

Wenn Traum über Traum_max steigt, öffnet der Bypass. Dabei muss die Außentemperatur unter Traum liegen. Sobald Traum unter Traum_soll fällt, geht die Maico davon aus, dass ausreichend gekühlt wurde und schließt den Bypass wieder.

Also allein mit den 3 Werten Traum, Traum_max und Traum_soll kann man den Bypass steuern:

Bypass auf: Setze Traum > Traum_max
Bypass zu: Setze Traum < Traum_soll

Nun können wir die Raumtemperatur / Abluft Temperatur nicht einfach verändern. Wir haben aber die Möglichkeit, Traum über ein Bussignal zu beschreiben. Damit können wir uns selber Traum vorgeben und den Bypass nach Belieben ändern. Wenn Traum zwischen Traum_soll und Traum_max gesendet wird, wird der Bypass niemals aufgehen. Das alleine wäre vermutlich schon eine deutliche Verbesserung gegenüber der werksseitigen Regelung.

Was können wir noch verbessern?

Wir wollen den Bypass natürlich nicht auf immer und ewig schließen. Deswegen prüfen wir zusätzlich die absoluten Feuchten außen und innen. Der Bypass darf nur aufgehen, wenn H_out < H_in! Das ist die wichtigeste Regel! Wenn die relative Feuchtigkeit innen einen akzeptablen Grenzwert übersteigt (zB 55%), dann darf der Bypass öffnen. Aber natürlich nur, wenn H_out < H_in. Der Bypass bleibt dann so lange offen, bis entweder rF_in < rF_in_soll oder bis H_out > H_in. Wir wollen uns ja keine Feuchtigkeit ins Haus holen, sondern die feuchte Luft los werden. 

Was brauchen wir dafür?

Wir brauchen zunächst Messwerte innen und außen. Ich empfehle innen eine Sensorposition an einem Ort, der nicht sofort von Bade- oder Kochvorgängen beeinflusst wird. Mein Sensor liegt im Treppenhaus im OG. Der Sensor sollte Temperatur und relative Feuchtigkeit messen können. Daraus kann man sich die absolute Feuchtigkeit bestimmen. Das gleiche sollte außen an geeigneter Stelle aufgezeichnet werden. Ich verwende dafür eine Wetterstation von Ecowitt. Wir brauchen 3 Messwerte für die Regelung:

H_in
H_out
rF_in

Weiterhin müssen wir die Modbusregister beschreiben. Ich nutze dafür HomeAssistant. Pythonpuristen mit YAML Aversie dürfen sich natürlich gerne selber was basteln emoji Die Umsetzung des Ganzen schildere ich im nächsten Post ... Fortsetzung folgt


1
  •  mampfgnom
  •   Bronze-Award
10.5.2025  (#146)
Die Umsetzung

Jetzt werde ich etwas schreibfaul und kopiere hoffentlich alles notwendige hier rein. Zunächst ein paar Sensoren definieren:

- name: "kwl_t_raum"
  unit_of_measurement: °C
  slave: 1
  address: 700
  input_type: holding
  data_type: int16
  precision: 1
  scale: 0.1

- name: "kwl_t_raumbus"
  unit_of_measurement: °C
  slave: 1
  address: 707
  input_type: holding
  data_type: int16
  precision: 1
  scale: 0.1

- name: "kwl_t_raum_max"
  unit_of_measurement: °C
  slave: 1
  address: 302
  input_type: holding
  data_type: int16
  precision: 1
  scale: 0.1

- name: "kwl_t_raum_soll"
  unit_of_measurement: °C
  slave: 1
  address: 553
  input_type: holding
  data_type: int16
  precision: 1
  scale: 0.1

- name: "kwl_raumtempauswahl"
  unit_of_measurement: ""
  slave: 1
  address: 109
  input_type: holding
  data_type: uint16
  precision: 0
  scale: 1.0

Noch ein Sensor Template:

kwl_traumregelung:
  friendly_name: "Traum_Regelung"
  ##unit_of_measurement: ""
  value_template: >-
    {% set mapper =  {
    '0' : 'Komfort-BDE',
    '1' : 'Extern',
    '2' : 'Intern',
    '3' : 'Bus'} %}
    {% set state =  states.sensor.kwl_raumtempauswahl.state %}
    {{ mapper[state] if state in mapper else 'Unknown' }}

Und zwei Template Sensor (ja das ist was anderes als zuvor):

- name: "kwl_abs_humidity_indoor"
  unit_of_measurement: "g/m³"
  state_class: measurement
  state: >
    {% from 'tools.jinja' import get_abs_humidity%}
    {{get_abs_humidity(states('sensor.aqara_04_temperature'), states('sensor.aqara_04_humidity_2'))}}

- name: "kwl_abs_humidity_outdoor"
  unit_of_measurement: "g/m³"
  state_class: measurement
  state: >
    {% from 'tools.jinja' import get_abs_humidity%}
    {{get_abs_humidity(states('sensor.ws2900_v2_02_03_outdoor_temperature'), states('sensor.ws2900_v2_02_03_humidity'))}}

Und eine Input Selection:

# input selections
input_select:
  raumtempauswahl:
    name: "Maico Raumtempauswahl"
    options:
      - 'Komfort-BDE'
      - 'Extern'
      - 'Intern'
      - 'Bus'
    icon: mdi:thermometer

Die letzteren Beiden dienen dem Umstellen des Traum Signals auf "Bus".

Im Unterordner "custom_templates" liegt bei mir eine Datei "tools.jinja". Darin definiere ich mir Funktionen / Makros:

{% macro get_abs_humidity(T_air, h_rel) %}
{% set T = T_air | float %}
{% set phi = (h_rel | float)/100.0 %}
{% set RD = 461.66 | float %}
{% set psat = 1000*e**(19.016 - (4064.95 / (T+236.25))) | float %}
{{ (phi*psat/RD/(T+273.15)*100 | float) | round(3)}}
{% endmacro %}

In HomeAssistant habe ich einige Automatiserungen:

alias: Update Raumtempauswahl Modbus Register
description: Updates the Raumtempauswahl holding register
trigger:
  - platform: state
    entity_id: input_select.raumtempauswahl
condition: []
action:
  - service: modbus.write_register
    data:
      hub: ws320
      slave: 1
      address: 109
      value: >
        {{ state_attr('input_select.raumtempauswahl',
        'options').index(states('input_select.raumtempauswahl')) }}
mode: single

alias: kwl_repeat_Traum_bus
description: Write KWL KWL [Kontrollierte Wohnraumlüftung] Traum_bus every 5 minutes with current value.
trigger:
  - platform: time_pattern
    minutes: /5
condition:
  - condition: state
    entity_id: input_select.raumtempauswahl
    state: Bus
action:
  - service: modbus.write_register
    data_template:
      address: 707
      slave: 1
      value: |
        {{(states('sensor.kwl_t_raumbus') | float(21.0))*10 | int(210)}}
      hub: ws320
mode: single

alias: kwl_bypass_auto_open
description: ""
trigger:
  - platform: time_pattern
    hours: /1
condition:
  - condition: or
    conditions:
      - condition: numeric_state
        entity_id: sensor.aqara_04_humidity_2
        above: 55
      - condition: numeric_state
        entity_id: sensor.kwl_t_ab
        below: sensor.kwl_t_raum_soll
        above: sensor.kwl_t_raum_max
  - condition: numeric_state
    entity_id: sensor.kwl_abs_humidity_indoor
    above: sensor.kwl_abs_humidity_outdoor
  - condition: numeric_state
    entity_id: sensor.kwl_schalt_bypass
    below: 0.5
action:
  - service: script.kwl_bypass_open
    data: {}
mode: single

alias: kwl_bypass_auto_close
description: ""
trigger:
  - platform: time_pattern
    minutes: /5
condition:
  - condition: or
    conditions:
      - condition: numeric_state
        entity_id: sensor.kwl_abs_humidity_indoor
        below: sensor.kwl_abs_humidity_outdoor
      - condition: numeric_state
        entity_id: sensor.aqara_04_humidity_2
        below: 50
      - condition: numeric_state
        entity_id: sensor.kwl_t_ab
        below: sensor.kwl_t_raum_soll
  - condition: numeric_state
    entity_id: sensor.kwl_schalt_bypass
    above: 0.5
action:
  - service: script.kwl_bypass_close
    data: {}
mode: single

Und zwei Skripte:

alias: kwl_bypass_open
sequence:
  - service: modbus.write_register
    data_template:
      address: 707
      slave: 1
      value: |
        {{ ((states('sensor.kwl_t_raum_max') | float) + 1.0)*10 | int(260) }}
      hub: ws320
mode: single

alias: kwl_bypass_close
sequence:
  - service: modbus.write_register
    data_template:
      address: 707
      slave: 1
      value: |
        {{ ((states('sensor.kwl_t_raum_soll') | float) - 1.0)*10 | int(210) }}
      hub: ws320
mode: single

Meine GUI im HA sieht mittlerweile so aus:


_aktuell/20250510173909.png

Ich habe mir zwei Buttons zum Manuellen Öffnen und Schließen des Bypass hinzugefügt. Beim Drücken der Buttons werden die entsprechenden Skripte ausgeführt. Mit der Input Selection links, kann ich das Signal für Traum wechseln. 

Probiert das gerne mal selber aus. Ich habe bestimmt irgend eine notwendige Information vergessen, aber reiche das gerne nach. Bei mir machen alle Skripte und Automatisierungen nach ersten Tests, was sie sollen. Richtig spannend wird es aber erst im Hochsommer. Ich bin selber gespannt wie sich die Regelung schlagen wird.


1
  •  taliesin
  •   Gold-Award
12.5.2025  (#147)
@mampfgnom Bei mir geht arbeitsmäßig grad die Welt unter, gleichzeitig hat sich mein Installationsplan in (der immer noch nicht strömenden) Luft aufgelöst, weil Löcher wieder mal nicht da Platz finden, wo der Plan meinte, das geht.

Also nein keine dB, sondern eher cm emoji

1


Beitrag schreiben oder Werbung ausblenden?
Einloggen

 Kostenlos registrieren [Mehr Infos]

Nächstes Thema: Wärmepumpe dimensionieren und Konfiguration entscheiden