Skip to content
 
 

Repository files navigation

Zendher WHR 950

Port of ComfoAir protocol to ESPHome.io firmware originally by @wichers modified by @nyxnyx to be installed as external_components. Modified for the Zehnder WHR 950 by @tieskuh. Also confirmed working for the Zehnder WHR 930.

Note: Updated for the latest ESPHome (verified to compile on 2026.5). Earlier versions no longer built due to changes in the ESPHome ClimateTraits API and component includes.

Configuration

Add to your yaml configuration the definition of external_components:

external_components:
  - source:
      type: git
      url: https://github.com/tieskuh/esphome-comfoair
    components: [comfoair]
    refresh: 0s

And than add the uart configuration and component. Pin 22 and 19 are used for the M5Stack Atom Lite with the RS-232 addon. For the Atom S3 Lite with the RS-232 addon use rx_pin 5 and tx_pin 6.

uart:
  id: uart_bus
  rx_pin: 22
  tx_pin: 19
  baud_rate: 9600

comfoair:
  name: "WHR 950"
  id: comfoair_climate
  uart_id: uart_bus
  fan_supply_air_percentage:
    name: "Supply fan"
  fan_exhaust_air_percentage:
    name: "Exhaust fan"
  fan_speed_supply:
    name: "Supply fan speed"
  fan_speed_exhaust:
    name: "Exhaust fan speed"
  is_bypass_valve_open:
    name: "Bypass"
  is_preheating:
    name: "Preheating"
  outside_air_temperature:
    name: "Outside temperature"
  supply_air_temperature:
    name: "Supply temperature"
  return_air_temperature:
    name: "Return temperature"
  exhaust_air_temperature:
    name: "Exhaust temperature"
  is_supply_fan_active:
    name: "Supply fan"
  is_filter_full:
    name: "Filter status"
  bypass_step:
    name: "Bypass valve"
  is_summer_mode:
    name: "Summer mode"

button:
  - platform: template
    name: "Reset filter"
    on_press:
      then:
        - lambda: |-
              id(comfoair_climate)->reset_filter();

Sensors

The following sensors are created in Homeassistant. With the climate entity, it is possible to change the fan speed.

image

Hardware

I used the following hardware:

image

image

image

Pin layout:

  • RX (receive) = pin 2
  • TX (transmit) = pin 3
  • GND (ground) = pin 5

(If it doesn't work, try to switch RX and TX. The RX on one end should be the TX on the other end.)

image

To power the M5Stack, I used a 12v to 5v USB-C adapter and powered the M5Stack via USB-C. There are unused 12v connectors on the WHR's board. Or just use a normal 220v USB adapter.

image

About

ESPHome configuration to drive Zehnder WHR 950

Resources

Stars

10 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages