Zehnder ComfoAir mam Home Assistant verbannen

Mir hunn eng Zehnder Comfoair 350 Belüftungs Anlag mat just RS232 Interface (iwwert een RJ45 Stecker), ouni Méiglechkeet wéi se eng modern Anlag géif ubidden.

Fir de Moment wees den Home Assistant net op d’Anlag iwwerhapt ugeschalt ass (beim Grille schalte mir se aus…) oder op de Filter gewiesselt resp. gebotzt muss gin.

Glécklecherweise ginn et eng Rëtsch intelligent Persoune déi Programmer geschriwwe hunn fir en RS232 Interface mat Zehnder Protokoll un een Raspberry PI a souguer een ESP32 Mikro Kontrollerze hänken.

Raspberry Pi schéngt mir e bëssi overkill ze sinn, dohier sinn ech de Wee mam ESP32 gaang.

Wiesou ESP32 an net een ESP8266?

Virdeel vum ESP32 géint een ESP8266 ass den Hardware RX /TX Interface, op engem ESP8266 ass deen nëmme per Software Niveau définéiert. Bon, d’Vitesse déi benéidegt gëtt ass mat 9600Baud relativ geréng a sollt och vun engem ESP8266 gestemmt kënne ginn.

RS232 <-> TTL

Signal Pegel vun engerm RS232 Interface si verschidde zu den TTL Interface vun engem ESP32, dhier muss nach een Signal Wander zwësche geschalt ginn. A mengem Fall iwwerhëlt dat een SP3232 TTL To RS232 Modul.

Ouni dëse Modul gi sech den ESP32 an d’Anlag net eens.

De Kabel huet follgend Uschlëss:

SteckerPIN
RJ451238
TTLNC (24V!)RXTXGN

ESPHome Code

Wéi ëmmer benotzen ech ESPHome als 1t Wiel fir d’Firmware vum ESP32

Mat folgendem Code (Basis hunn ech op Github fonnt)

<code>esphome:
  name: comfoair-v2
esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: esp-idf
external_components:
  - source:
      type: git
      url: https://github.com/nyxnyx/esphome-comfoair
    components: &#91;comfoair]
wifi:
  min_auth_mode: WPA2
  ssid: "Wifi"
  password: "password"
  fast_connect: False
  reboot_timeout: 0s
  ap:
    ssid: "comfoair"
    password: comfoair
captive_portal:
# Disable uart logging
logger:
  baud_rate: 0
# Enable Home Assistant API
api:
  reboot_timeout: 0s
web_server:
ota:
  platform: esphome
# RJ45  1   2   3   8
# RS232 VDC RX  TX  GND
uart:
  id: uart_bus
  baud_rate: 9600
  tx_pin: 6
  rx_pin: 5
comfoair:
  id: my_comfoair
  name: "ComfoAir"
  uart_id: uart_bus
  
  # Core Sensors
  fan_supply_percentage:
    name: "Fan supply (%)"
  fan_exhaust_percentage:
    name: "Fan exhaust (%)"
  fan_speed_supply:
    name: "Supply fan speed"
  fan_speed_exhaust:
    name: "Exhaust fan speed"
    
  # Temperature Sensors
  outside_air_temperature:
    name: "Outside temperature"
  supply_air_temperature:
    name: "Supply temperature"
  return_air_temperature:
    name: "Return temperature"
  exhaust_air_temperature:
    name: "Exhaust temperature"
  enthalpy_temperature:
    name: "Enthalpy temperature"
  ewt_temperature:
    name: "EWT temperature"
  reheating_temperature:
    name: "Reheating temperature"
  kitchen_hood_temperature:
    name: "Kitchen hood temperature"
    
  # Status &amp; Binary Sensors
  is_bypass_valve_open:
    name: "Bypass valve open"
    id: comfoair_bypass_real
  is_preheating:
    name: "Is preheating active"
  is_summer_mode:
    name: "Is summer mode"
  is_supply_fan_active:
    name: "Is supply fan active"
  is_filter_full:
    name: "Is filter full"
    id: comfoair_is_filter_full
    
  # Ventilation Levels (required by the card)
  return_air_level:
    name: "Return level"
  supply_air_level:
    name: "Supply level"
  
  # Operating Hours
  fan_hours_supply:
    name: "Supply Fan Hours"
  fan_hours_exhaust:
    name: "Exhaust Fan Hours"
  bypass_hours:
    name: "Bypass Hours"
  preheater_hours:
    name: "Preheater Hours"
  filter_hours:
    name: "Filter Hours"
  ewt_hours:
    name: "EWT Hours"
    
  # Automation Features
  auto_balance:
    name: "Auto Temperature Balance"
    
  # Diagnostics
  error_code:
    name: "Last Error Code"
binary_sensor:
  - platform: template
    name: "Is bypas open"
    lambda: |-
      return id(comfoair_bypass_real).state;
text_sensor:
  - platform: template
    name: "Filter Status"
    lambda: |-
      if (id(comfoair_is_filter_full).state) {
        return {"Full"};
      } else {
        return {"Ok"};
      }
    update_interval: 60s
# Example button to reset the filter timer after maintenance
button:
  - platform: template
    name: "Reset Filter Timer"
    icon: "mdi:filter-remove"
    on_press:
      then:
        - lambda: |-
            id(my_comfoair)->reset_filter();</code>

POC ESP mat TTL-> RS232 Konverter

De Prototype ass verbonnen an empfänkt och Donnéeë. Ass zwar immens rudimentär mee et erfëllt säin Zweck.

Funktionnell, mee visuell eng fatzeg Datz.

Elegant Alternative mat M5Stack ESP an RS232 Interface

Eng Besser a méi propper Alternativ bidd sech mat engem M5Stack Atom un, zesummen mat engem RS232 Interface Modul. Dëse kann direkt iwwert déi 24V vum Zehnder RS232 Interface bedriwwe ginn, sou dass ee kuerze Kabel duergeet.

Integratioun am Home Assistant

Vu que dass et sech ëm een ESPHome Gerät handelt, gëtt et och direkt am Home Assistant erkannt:

Vue am Home Assistant vum ESPHome Modul

Alerte / Notifikatiounen am Home Assistant

Fir den Display an engem Dashboard benotze eng eng Custom Card: Lovelace-ComfoAir

Dofir mussen awer bestëmmte Sensoren ee fest définéierte Numm hunn, sooss ginn se vun der Lovelace Card net ugewise. Déi sin an der Card hard-coded an et ass méi einfach den Numm am Home Assistant unzepasse. (bei engem Update vun der Card géif d’Spill rëm vu vir starten)

Vue am Home Assistant Dashboard

Wat d’Alerte ugeet, zum Beispill wann d’Anlage aus ass, oder de Filter gewiesselt oder gebotzt muss ginn kënnt rëm d’AlertTicker Card zum Asatz.

Alerte wann d’Anlag net um Standard Level ugeschalt ass.
Alerte wann d’Anlag ganz ausgeschalt ass.
Notifikatioun wa de Filter muss gebotzt resp. gewiesselt ginn.

No der nächster Grillparty vergiessen ech net méi d’Anlag rëm unzeschalte!

Permanent link to this article: https://www.hiscorebob.lu/2026/05/zehnder-comfoair-mam-home-assistant-verbannen/

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.