could you elaborate on that? i assume you dont have exhaust air vents in the rooms like living room etc… so why it should distribute smell around entire house?
thanks
could you elaborate on that? i assume you dont have exhaust air vents in the rooms like living room etc… so why it should distribute smell around entire house?
thanks
Well, because I have (and most houses will have as well) exhaust vents not only in the kitchen where the smell is produced but also in the bathrooms or in the corridor on a second floor. So the air will go all over the house. If you keep doors shut in the rooms with supply vents only most likely they’ll be ok but if the door is open you’ll always have some air exchange with the other rooms. So creating pressure imbalance - higher pressure from the active supply fan there is much more air going out only through the kitchen hood hence preventing the smells going around the house.
It is even the standard behaviour of the Comfoair system if you have the kitchen hood switch connected to it.
can you share your automations to control humidity levels? That would be inspirational!
Well, it is quite simple:
alias: Vent - Airing on humidity or presence
description: ""
mode: single
triggers:
- entity_id: sensor.aeon_labs_zw100_multisensor_6_relative_humidity
above: "64"
trigger: numeric_state
- entity_id: binary_sensor.aeon_labs_zw100_multisensor_6_home_security_motion_detection
to: "on"
for:
hours: 0
minutes: 6
seconds: 0
trigger: state
- entity_id: sensor.sensor_bathroom_upstairs_humidity
above: "65"
trigger: numeric_state
conditions:
- condition: state
entity_id: input_select.fan_mode
state: low
- condition: state
entity_id: group.allpersons
state: home
- condition: time
after: "05:00:00"
before: "22:30:00"
actions:
- data: {}
action: script.fan_medium_20min
and here is the script called in the actions:
alias: Vent - Airing Medium 20 minutes
sequence:
- data:
entity_id: script.fan_high_10min
action: script.turn_off
- data:
entity_id: climate.ca350_climate
fan_mode: medium
action: climate.set_fan_mode
- data:
entity_id: input_select.wietrzenie
option: medium
action: input_select.select_option
- choose:
- conditions:
- condition: or
conditions:
- condition: state
entity_id: select.ca350_fan_control
state: "off"
- condition: state
entity_id: select.ca350_fan_control
state: In
sequence:
- data:
option: Both
target:
entity_id: select.ca350_fan_control
action: select.select_option
- delay: "00:20:00"
- data:
entity_id: climate.ca350_climate
fan_mode: low
action: climate.set_fan_mode
- data:
entity_id: input_select.wietrzenie
option: "off"
action: input_select.select_option
mode: restart
Cool thank you. One question: why do you use relative humidity instead of absolute? I believe absolute is more precise as relative depends on the temperature as well
I’m using the one that my sensors provide. No choice here
Alright if you are interested there’s a handy integration called thermal comfort which gives you all the data starting from temp and relative humidity
Hello guys!
I’ve tried to use julianpas/esphome-comfoair repo to communicate with my Zehnder CA 550. The ESP32 starts up normally and appears to run fine, but as soon as I power on my Zehnder CA 550 and communication begins between the ESP32 and the ventilation unit, the ESP32 freezes after a few seconds.
With the original code from wichers repo, the ESP32 communicates with the Zehnder unit reliably without any freeze ('m using the same ESP32 hardware and wiring for both your fork and the original repo).
Some details:
Logs:
INFO ESPHome 2025.4.1
INFO Reading configuration /config/esphome/esphome-web-8ab534.yaml...
INFO Starting log output from 192.168.68.53 using esphome API
INFO Successfully connected to esphome-web-8ab534 @ 192.168.68.53 in 2.054s
INFO Successful handshake with esphome-web-8ab534 @ 192.168.68.53 in 0.022s
[11:18:45][I][app:100]: ESPHome version 2025.4.1 compiled on May 2 2025, 11:04:26
[11:18:45][C][wifi:600]: WiFi:
[11:18:45][C][wifi:428]: Local MAC: 5C:01:3B:8A:B5:34
[11:18:45][C][wifi:433]: SSID: [redacted]
[11:18:45][C][wifi:436]: IP Address: 192.168.68.53
[11:18:45][C][wifi:440]: BSSID: [redacted]
[11:18:45][C][wifi:441]: Hostname: 'esphome-web-8ab534'
[11:18:45][C][wifi:443]: Signal strength: -24 dB ▂▄▆█
[11:18:45][V][wifi:445]: Priority: 0.0
[11:18:45][C][wifi:447]: Channel: 1
[11:18:45][C][wifi:448]: Subnet: 255.255.255.0
[11:18:45][C][wifi:449]: Gateway: 192.168.68.1
[11:18:45][C][wifi:450]: DNS1: 8.8.8.8
[11:18:45][C][wifi:451]: DNS2: 0.0.0.0
[11:18:45][C][logger:177]: Logger:
[11:18:45][C][logger:178]: Max Level: VERBOSE
[11:18:45][C][logger:179]: Initial Level: VERBOSE
[11:18:45][C][logger:181]: Log Baud Rate: 0
[11:18:45][C][logger:182]: Hardware UART: UART0
[11:18:45][C][uart.arduino_esp32:151]: UART Bus 0:
[11:18:45][C][uart.arduino_esp32:152]: TX Pin: GPIO17
[11:18:45][C][uart.arduino_esp32:153]: RX Pin: GPIO16
[11:18:45][C][uart.arduino_esp32:155]: RX Buffer Size: 256
[11:18:45][C][uart.arduino_esp32:157]: Baud Rate: 9600 baud
[11:18:45][C][uart.arduino_esp32:158]: Data Bits: 8
[11:18:45][C][uart.arduino_esp32:159]: Parity: NONE
[11:18:45][C][uart.arduino_esp32:160]: Stop bits: 1
[11:18:45][C][uart.arduino_esp32:151]: UART Bus 1:
[11:18:45][C][uart.arduino_esp32:152]: TX Pin: GPIO1
[11:18:45][C][uart.arduino_esp32:153]: RX Pin: GPIO3
[11:18:45][C][uart.arduino_esp32:155]: RX Buffer Size: 256
[11:18:45][C][uart.arduino_esp32:157]: Baud Rate: 9600 baud
[11:18:45][C][uart.arduino_esp32:158]: Data Bits: 8
[11:18:45][C][uart.arduino_esp32:159]: Parity: NONE
[11:18:45][C][uart.arduino_esp32:160]: Stop bits: 1
[11:18:45][C][switch.gpio:068]: GPIO Switch 'Test Switch'
[11:18:45][C][switch.gpio:091]: Restore Mode: always OFF
[11:18:45][C][switch.gpio:031]: Pin: GPIO25
[11:18:45][C][comfoair:149]: ComfoAir:
[11:18:45][C][comfoair:152]: Bootloader WHR 960 v3.60 b32
[11:18:45][C][comfoair:154]: Firmware WHR 960 v3.60 b32
[11:18:45][C][comfoair:156]: Connector Board Luxe CA350 v3.22
[11:18:45][C][mdns:116]: mDNS:
[11:18:45][C][mdns:117]: Hostname: esphome-web-8ab534
[11:18:45][V][mdns:118]: Services:
[11:18:45][V][mdns:120]: - _esphomelib, _tcp, 6053
[11:18:45][V][mdns:122]: TXT: friendly_name = ESP-Rekuperacja-3
[11:18:45][V][mdns:122]: TXT: version = 2025.4.1
[11:18:45][V][mdns:122]: TXT: mac = 5c013b8ab534
[11:18:45][V][mdns:122]: TXT: platform = ESP32
[11:18:45][V][mdns:122]: TXT: board = esp32dev
[11:18:45][V][mdns:122]: TXT: network = wifi
[11:18:45][C][esphome.ota:073]: Over-The-Air updates:
[11:18:45][C][esphome.ota:074]: Address: 192.168.68.53:3232
[11:18:45][C][esphome.ota:075]: Version: 2
[11:18:45][C][safe_mode:018]: Safe Mode:
[11:18:45][C][safe_mode:020]: Boot considered successful after 60 seconds
[11:18:45][C][safe_mode:021]: Invoke after 10 boot attempts
[11:18:45][C][safe_mode:023]: Remain in safe mode for 300 seconds
[11:18:45][W][safe_mode:029]: Last reset occurred too quickly; safe mode will be invoked in 8 restarts
[11:18:45][C][api:140]: API Server:
[11:18:45][C][api:141]: Address: 192.168.68.53:6053
[11:18:45][C][api:145]: Using noise encryption: NO
[11:18:47][D][comfoair:896]: getting fan status
[11:18:47][V][comfoair:246]: Response 0xD6 from confosense with 2 bytes.
[11:18:47][V][comfoair:246]: Response 0x0C from confosense with 14 bytes.
[11:18:47][V][sensor:043]: 'intake_fan_speed': Received new state 15.000000
[11:18:47][D][sensor:094]: 'intake_fan_speed': Sending state 15.00000 % with 0 decimals of accuracy
[11:18:47][V][sensor:043]: 'exhaust_fan_speed': Received new state 15.000000
[11:18:47][D][sensor:094]: 'exhaust_fan_speed': Sending state 15.00000 % with 0 decimals of accuracy
[11:18:47][V][sensor:043]: 'intake_fan_speed_rpm': Received new state 462.278107
[11:18:47][D][sensor:094]: 'intake_fan_speed_rpm': Sending state 462.27811 RPM with 0 decimals of accuracy
[11:18:47][V][sensor:043]: 'exhaust_fan_speed_rpm': Received new state 471.579468
[11:18:47][D][sensor:094]: 'exhaust_fan_speed_rpm': Sending state 471.57947 RPM with 0 decimals of accuracy
[11:18:49][D][comfoair:905]: getting valve status
[11:18:49][V][comfoair:246]: Response 0x0C from confosense with 2 bytes.
[11:18:49][V][comfoair:246]: Response 0x0E from confosense with 12 bytes.
[11:18:49][V][sensor:043]: 'bypass_valve': Received new state 0.000000
[11:18:49][D][sensor:094]: 'bypass_valve': Sending state 0.00000 % with 0 decimals of accuracy
[11:18:49][D][binary_sensor:036]: 'bypass_valve_open': Sending state OFF
[11:18:49][D][binary_sensor:036]: 'preheating_state': Sending state OFF
[11:18:49][V][sensor:043]: 'motor_current_bypass': Received new state 0.000000
[11:18:49][D][sensor:094]: 'motor_current_bypass': Sending state 0.00000 A with 1 decimals of accuracy
[11:18:49][V][sensor:043]: 'motor_current_preheating': Received new state 0.000000
[11:18:49][D][sensor:094]: 'motor_current_preheating': Sending state 0.00000 A with 1 decimals of accuracy
[11:18:49][W][component:239]: Component esphome.coroutine took a long time for an operation (53 ms).
[11:18:49][W][component:240]: Components should block for at most 30 ms.
[11:18:51][D][comfoair:940]: getting sensor data
[11:18:51][V][comfoair:246]: Response 0x0E from confosense with 2 bytes.
[11:18:51][V][comfoair:246]: Response 0x98 from confosense with 28 bytes.
[11:18:51][V][sensor:043]: 'enthalpy_temperature': Received new state -20.000000
[11:18:51][D][sensor:094]: 'enthalpy_temperature': Sending state -20.00000 °C with 1 decimals of accuracy
[11:18:53][D][comfoair:946]: getting ventilation level
[11:18:53][V][comfoair:246]: Response 0x98 from confosense with 2 bytes.
[11:18:53][V][comfoair:246]: Response 0xCE from confosense with 22 bytes.
[11:18:53][D][comfoair:523]: Level 01
[11:18:53][W][comfoair:524]: Off ab 15 - Off zu 15 - Low ab 35 - Low zu 35 - Middle ab 50 - Middle zu 50 - High ab 80 - High zu 77
[11:18:53][V][sensor:043]: 'return_air_level': Received new state 15.000000
[11:18:53][D][sensor:094]: 'return_air_level': Sending state 15.00000 m³ with 1 decimals of accuracy
[11:18:53][V][sensor:043]: 'supply_air_level': Received new state 15.000000
[11:18:53][D][sensor:094]: 'supply_air_level': Sending state 15.00000 m³ with 1 decimals of accuracy
>>>>> LOGS FREEZE HERE so I closed the window and started logs again<<<<
INFO Starting log output from 192.168.68.53 using esphome API
INFO Successfully connected to esphome-web-8ab534 @ 192.168.68.53 in 7.212s
WARNING Can't connect to ESPHome API for esphome-web-8ab534 @ 192.168.68.53: Timeout waiting for HelloResponse, ConnectResponse after 30.0s (TimeoutAPIError)
INFO Trying to connect to esphome-web-8ab534 @ 192.168.68.53 in the background
WARNING esphome-web-8ab534 @ 192.168.68.53: Connection error occurred: esphome-web-8ab534 @ 192.168.68.53: Connection lost
INFO Successfully connected to esphome-web-8ab534 @ 192.168.68.53 in 0.012s
INFO Successful handshake with esphome-web-8ab534 @ 192.168.68.53 in 2.322s
[11:20:27][I][app:100]: ESPHome version 2025.4.1 compiled on May 2 2025, 11:04:26
[11:20:27][C][wifi:600]: WiFi:
[11:20:27][C][wifi:428]: Local MAC: 5C:01:3B:8A:B5:34
WARNING esphome-web-8ab534 @ 192.168.68.53: Connection error occurred: [Errno 104] Connection reset by peer
INFO Processing unexpected disconnect from ESPHome API for esphome-web-8ab534 @ 192.168.68.53
WARNING Disconnected from API
WARNING Can't connect to ESPHome API for esphome-web-8ab534 @ 192.168.68.53: Error connecting to [AddrInfo(family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, proto=6, sockaddr=IPv4Sockaddr(address='192.168.68.53', port=6053))]: [Errno 111] Connect call failed ('192.168.68.53', 6053) (SocketAPIError)
The above pattern repeats consistently every time, and it does not matter whether I have comfosense connected or not. Has anyone else encountered this problem?
Can you describe how you wired the ESP32 up? It seems like you have wired the unit to the second UART which is meant to proxy the ComfoSense commands.
Hi Julian! Thanks for responding!
I’ve triple-checked the wiring and it is the same as in the image from the post above, so:
the units TX/RX → level shifter channel 1 RX/TX → esp32 RX/TX pins (3/1)
comfosense TX/RX → level shifter channel2 RX/TX → esp32 pins 16/17
Here is my yaml:
esphome:
name: esphome-web-8ab534
friendly_name: ESP-Rekuperacja-3
min_version: 2024.11.0
name_add_mac_suffix: false
esp32:
board: esp32dev
framework:
type: arduino
logger:
baud_rate: 0
level: VERY_VERBOSE
# Enable Home Assistant API
api:
# Allow Over-The-Air updates
ota:
- platform: esphome
wifi:
ssid: "[cut]"
password: "[cut]"
domain: .local
reboot_timeout: 15min
power_save_mode: NONE
fast_connect: False
passive_scan: False
output_power: 20.0dB
enable_on_boot: True
manual_ip:
static_ip: 192.168.68.53
gateway: 192.168.68.1
subnet: 255.255.255.0
dns1: 8.8.8.8
use_address: 192.168.68.53
ap:
ssid: "Rekuperacja Fallback Hotspot"
switch:
- platform: gpio
pin: GPIO25
name: "Test Switch"
sensor:
binary_sensor:
external_components:
- source:
type: git
url: https://github.com/julianpas/esphome-comfoair
components: [comfoair]
uart:
- id: uart_bus
rx_pin: 3
tx_pin: 1
baud_rate: 9600
- id: uart_proxy
rx_pin: 16
tx_pin: 17
baud_rate: 9600
comfoair:
name: "ComfoAir 350"
id: "comfoair_climate"
uart_id: uart_bus
proxy_uart: uart_proxy
type:
name: "type"
size:
Here are the logs:
INFO ESPHome 2025.4.1
INFO Reading configuration /config/esphome/esphome-web-8ab534.yaml...
INFO Starting log output from 192.168.68.53 using esphome API
INFO Successfully connected to esphome-web-8ab534 @ 192.168.68.53 in 0.005s
INFO Successful handshake with esphome-web-8ab534 @ 192.168.68.53 in 0.023s
[16:33:58][I][app:100]: ESPHome version 2025.4.1 compiled on May 11 2025, 16:32:08
[16:33:58][C][wifi:600]: WiFi:
[16:33:58][C][wifi:428]: Local MAC: 5C:01:3B:8A:B5:34
[16:33:58][C][wifi:433]: SSID: [redacted]
[16:33:58][C][wifi:436]: IP Address: 192.168.68.53
[16:33:58][C][wifi:440]: BSSID: [redacted]
[16:33:58][C][wifi:441]: Hostname: 'esphome-web-8ab534'
[16:33:58][C][wifi:443]: Signal strength: -44 dB ▂▄▆█
[16:33:58][V][wifi:445]: Priority: 0.0
[16:33:58][C][wifi:447]: Channel: 1
[16:33:58][C][wifi:448]: Subnet: 255.255.255.0
[16:33:58][C][wifi:449]: Gateway: 192.168.68.1
[16:33:58][C][wifi:450]: DNS1: 8.8.8.8
[16:33:58][C][wifi:451]: DNS2: 0.0.0.0
[16:33:58][C][logger:177]: Logger:
[16:33:58][C][logger:178]: Max Level: VERY_VERBOSE
[16:33:58][C][logger:179]: Initial Level: VERY_VERBOSE
[16:33:58][C][logger:181]: Log Baud Rate: 0
[16:33:58][C][logger:182]: Hardware UART: UART0
[16:33:58][C][uart.arduino_esp32:151]: UART Bus 0:
[16:33:58][C][uart.arduino_esp32:152]: TX Pin: GPIO1
[16:33:58][C][uart.arduino_esp32:153]: RX Pin: GPIO3
[16:33:58][C][uart.arduino_esp32:155]: RX Buffer Size: 256
[16:33:58][C][uart.arduino_esp32:157]: Baud Rate: 9600 baud
[16:33:58][C][uart.arduino_esp32:158]: Data Bits: 8
[16:33:58][C][uart.arduino_esp32:159]: Parity: NONE
[16:33:58][C][uart.arduino_esp32:160]: Stop bits: 1
[16:33:58][C][uart.arduino_esp32:151]: UART Bus 1:
[16:33:58][C][uart.arduino_esp32:152]: TX Pin: GPIO17
[16:33:58][C][uart.arduino_esp32:153]: RX Pin: GPIO16
[16:33:58][C][uart.arduino_esp32:155]: RX Buffer Size: 256
[16:33:58][C][uart.arduino_esp32:157]: Baud Rate: 9600 baud
[16:33:58][C][uart.arduino_esp32:158]: Data Bits: 8
[16:33:58][C][uart.arduino_esp32:159]: Parity: NONE
[16:33:58][C][uart.arduino_esp32:160]: Stop bits: 1
[16:33:58][C][switch.gpio:068]: GPIO Switch 'Test Switch'
[16:33:58][C][switch.gpio:091]: Restore Mode: always OFF
[16:33:58][C][switch.gpio:031]: Pin: GPIO25
[16:33:58][C][comfoair:149]: ComfoAir:
[16:33:58][C][comfoair:152]: Bootloader v0.00 b 0
[16:33:58][C][comfoair:154]: Firmware v0.00 b 0
[16:33:58][C][comfoair:156]: Connector Board v0.00
[16:33:58][C][mdns:116]: mDNS:
[16:33:58][C][mdns:117]: Hostname: esphome-web-8ab534
[16:33:58][V][mdns:118]: Services:
[16:33:58][V][mdns:120]: - _esphomelib, _tcp, 6053
[16:33:58][V][mdns:122]: TXT: friendly_name = ESP-Rekuperacja-3
[16:33:58][V][mdns:122]: TXT: version = 2025.4.1
[16:33:58][V][mdns:122]: TXT: mac = 5c013b8ab534
[16:33:58][V][mdns:122]: TXT: platform = ESP32
[16:33:58][V][mdns:122]: TXT: board = esp32dev
[16:33:58][V][mdns:122]: TXT: network = wifi
[16:33:58][C][esphome.ota:073]: Over-The-Air updates:
[16:33:58][C][esphome.ota:074]: Address: 192.168.68.53:3232
[16:33:58][C][esphome.ota:075]: Version: 2
[16:33:58][C][safe_mode:018]: Safe Mode:
[16:33:58][C][safe_mode:020]: Boot considered successful after 60 seconds
[16:33:58][C][safe_mode:021]: Invoke after 10 boot attempts
[16:33:58][C][safe_mode:023]: Remain in safe mode for 300 seconds
[16:33:58][C][api:140]: API Server:
[16:33:58][C][api:141]: Address: 192.168.68.53:6053
[16:33:58][C][api:145]: Using noise encryption: NO
[16:33:59][D][comfoair:956]: getting operation hours
[16:33:59][VV][uart.arduino_esp32:194]: Flushing...
[16:34:01][D][comfoair:961]: getting preheating status
[16:34:01][VV][uart.arduino_esp32:194]: Flushing...
[16:34:03][D][comfoair:966]: getting time delay
[16:34:03][VV][uart.arduino_esp32:194]: Flushing...
[16:34:04][VV][api.service:697]: on_ping_request: PingRequest {}
[16:34:04][VV][api.service:043]: send_ping_response: PingResponse {}
[16:34:05][D][comfoair:896]: getting fan status
[16:34:05][VV][uart.arduino_esp32:194]: Flushing...
[16:34:07][D][comfoair:905]: getting valve status
[16:34:07][VV][uart.arduino_esp32:194]: Flushing...
[16:34:09][D][comfoair:940]: getting sensor data
[16:34:09][VV][uart.arduino_esp32:194]: Flushing...
[16:34:11][D][comfoair:946]: getting ventilation level
[16:34:11][VV][uart.arduino_esp32:194]: Flushing...
[16:34:13][D][comfoair:951]: getting temperatures
[16:34:13][VV][uart.arduino_esp32:194]: Flushing...
[16:34:15][D][comfoair:913]: getting error status
[16:34:15][VV][uart.arduino_esp32:194]: Flushing...
[16:34:17][D][comfoair:923]: getting bypass control
[16:34:17][VV][uart.arduino_esp32:194]: Flushing...
[16:34:19][D][comfoair:956]: getting operation hours
[16:34:19][VV][uart.arduino_esp32:194]: Flushing...
[16:34:19][V][comfoair:246]: Response 0x3F from confosense with 2 bytes.
[16:34:19][VV][uart.arduino_esp32:194]: Flushing...
[16:34:19][V][comfoair:246]: Response 0xDE from confosense with 28 bytes.
[16:34:19][V][sensor:043]: 'level0_hours': Received new state 54463.000000
[16:34:19][D][sensor:094]: 'level0_hours': Sending state 54463.00000 h with 0 decimals of accuracy
[16:34:19][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2783741559
state: 54463
missing_state: NO
}
[16:34:19][V][sensor:043]: 'level1_hours': Received new state 26522.000000
[16:34:19][D][sensor:094]: 'level1_hours': Sending state 26522.00000 h with 0 decimals of accuracy
[16:34:19][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 4003978570
state: 26522
missing_state: NO
}
[16:34:19][V][sensor:043]: 'level2_hours': Received new state 3990.000000
[16:34:19][D][sensor:094]: 'level2_hours': Sending state 3990.00000 h with 0 decimals of accuracy
[16:34:19][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 4111507005
state: 3990
missing_state: NO
}
[16:34:19][V][sensor:043]: 'level3_hours': Received new state 377.000000
[16:34:19][D][sensor:094]: 'level3_hours': Sending state 377.00000 h with 0 decimals of accuracy
[16:34:19][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 948212344
state: 377
missing_state: NO
}
[16:34:19][V][sensor:043]: 'frost_protection_hours': Received new state 0.000000
[16:34:19][D][sensor:094]: 'frost_protection_hours': Sending state 0.00000 h with 0 decimals of accuracy
[16:34:19][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2375985149
state: 0
missing_state: NO
}
[16:34:19][V][sensor:043]: 'bypass_open_hours': Received new state 23579.000000
[16:34:19][D][sensor:094]: 'bypass_open_hours': Sending state 23579.00000 h with 0 decimals of accuracy
[16:34:19][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 3096519312
state: 23579
missing_state: NO
}
[16:34:19][V][sensor:043]: 'preheating_hours': Received new state 84.000000
[16:34:19][D][sensor:094]: 'preheating_hours': Sending state 84.00000 h with 0 decimals of accuracy
[16:34:19][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2108822
state: 84
missing_state: NO
}
[16:34:19][V][sensor:043]: 'filter_hours': Received new state 206.000000
[16:34:19][D][sensor:094]: 'filter_hours': Sending state 206.00000 h with 0 decimals of accuracy
[16:34:19][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 932503283
state: 206
missing_state: NO
}
[16:34:19][VV][uart.arduino_esp32:194]: Flushing...
[16:34:19][W][component:239]: Component esphome.coroutine took a long time for an operation (136 ms).
[16:34:19][W][component:240]: Components should block for at most 30 ms.
[16:34:21][D][comfoair:961]: getting preheating status
[16:34:21][VV][uart.arduino_esp32:194]: Flushing...
[16:34:21][V][comfoair:246]: Response 0xDE from confosense with 2 bytes.
[16:34:21][VV][uart.arduino_esp32:194]: Flushing...
[16:34:21][V][comfoair:246]: Response 0xE2 from confosense with 14 bytes.
[16:34:21][V][text_sensor:013]: 'preheating_valve': Received new state Closed
[16:34:21][D][text_sensor:064]: 'preheating_valve': Sending state 'Closed'
[16:34:21][VV][api.service:174]: send_text_sensor_state_response: TextSensorStateResponse {
key: 3407430625
state: 'Closed'
missing_state: NO
}
[16:34:21][D][binary_sensor:036]: 'frost_protection_active': Sending state OFF
[16:34:21][VV][api.service:070]: send_binary_sensor_state_response: BinarySensorStateResponse {
key: 452245478
state: NO
missing_state: NO
}
[16:34:21][D][binary_sensor:036]: 'preheating_state': Sending state OFF
[16:34:21][VV][api.service:070]: send_binary_sensor_state_response: BinarySensorStateResponse {
key: 3801981092
state: NO
missing_state: NO
}
[16:34:21][V][sensor:043]: 'frost_protection_minutes': Received new state 0.000000
[16:34:21][D][sensor:094]: 'frost_protection_minutes': Sending state 0.00000 min with 0 decimals of accuracy
[16:34:21][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2213580883
state: 0
missing_state: NO
}
[16:34:21][V][text_sensor:013]: 'frost_protection_level': Received new state HighProtection
[16:34:21][D][text_sensor:064]: 'frost_protection_level': Sending state 'HighProtection'
[16:34:21][VV][api.service:174]: send_text_sensor_state_response: TextSensorStateResponse {
key: 1190408890
state: 'HighProtection'
missing_state: NO
}
[16:34:21][VV][uart.arduino_esp32:194]: Flushing...
[16:34:21][W][component:239]: Component esphome.coroutine took a long time for an operation (77 ms).
[16:34:21][W][component:240]: Components should block for at most 30 ms.
[16:34:23][D][comfoair:966]: getting time delay
[16:34:23][VV][uart.arduino_esp32:194]: Flushing...
[16:34:23][V][comfoair:246]: Response 0xE2 from confosense with 2 bytes.
[16:34:23][VV][uart.arduino_esp32:194]: Flushing...
[16:34:23][V][comfoair:246]: Response 0xCA from confosense with 16 bytes.
[16:34:23][V][sensor:043]: 'bathroom_switch_on_delay_minutes': Received new state 0.000000
[16:34:23][D][sensor:094]: 'bathroom_switch_on_delay_minutes': Sending state 0.00000 with 0 decimals of accuracy
[16:34:23][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 37141532
state: 0
missing_state: NO
}
[16:34:23][V][sensor:043]: 'bathroom_switch_off_delay_minutes': Received new state 30.000000
[16:34:23][D][sensor:094]: 'bathroom_switch_off_delay_minutes': Sending state 30.00000 with 0 decimals of accuracy
[16:34:23][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 3329223050
state: 30
missing_state: NO
}
[16:34:23][V][sensor:043]: 'l1_switch_off_delay_minutes': Received new state 0.000000
[16:34:23][D][sensor:094]: 'l1_switch_off_delay_minutes': Sending state 0.00000 with 0 decimals of accuracy
[16:34:23][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 643315379
state: 0
missing_state: NO
}
[16:34:23][V][sensor:043]: 'boost_ventilation_minutes': Received new state 30.000000
[16:34:23][D][sensor:094]: 'boost_ventilation_minutes': Sending state 30.00000 with 0 decimals of accuracy
[16:34:23][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 567365624
state: 30
missing_state: NO
}
[16:34:23][V][sensor:043]: 'filter_warning_weeks': Received new state 26.000000
[16:34:23][D][sensor:094]: 'filter_warning_weeks': Sending state 26.00000 weeks with 0 decimals of accuracy
[16:34:23][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 3253144704
state: 26
missing_state: NO
}
[16:34:23][V][sensor:043]: 'rf_high_time_short_minutes': Received new state 10.000000
[16:34:23][D][sensor:094]: 'rf_high_time_short_minutes': Sending state 10.00000 with 0 decimals of accuracy
[16:34:23][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 1226358341
state: 10
missing_state: NO
}
[16:34:23][V][sensor:043]: 'rf_high_time_long_minutes': Received new state 30.000000
[16:34:23][D][sensor:094]: 'rf_high_time_long_minutes': Sending state 30.00000 with 0 decimals of accuracy
[16:34:23][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2639474907
state: 30
missing_state: NO
}
[16:34:23][V][sensor:043]: 'extractor_hood_switch_off_delay_minutes': Received new state 0.000000
[16:34:23][D][sensor:094]: 'extractor_hood_switch_off_delay_minutes': Sending state 0.00000 with 0 decimals of accuracy
[16:34:23][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 3409199027
state: 0
missing_state: NO
}
[16:34:23][VV][uart.arduino_esp32:194]: Flushing...
[16:34:23][W][component:239]: Component esphome.coroutine took a long time for an operation (120 ms).
[16:34:23][W][component:240]: Components should block for at most 30 ms.
[16:34:25][D][comfoair:896]: getting fan status
[16:34:25][VV][uart.arduino_esp32:194]: Flushing...
[16:34:25][V][comfoair:246]: Response 0xCA from confosense with 2 bytes.
[16:34:25][VV][uart.arduino_esp32:194]: Flushing...
[16:34:25][V][comfoair:246]: Response 0x0C from confosense with 14 bytes.
[16:34:25][V][sensor:043]: 'intake_fan_speed': Received new state 35.000000
[16:34:25][D][sensor:094]: 'intake_fan_speed': Sending state 35.00000 % with 0 decimals of accuracy
[16:34:25][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2256682803
state: 35
missing_state: NO
}
[16:34:25][V][sensor:043]: 'exhaust_fan_speed': Received new state 35.000000
[16:34:25][D][sensor:094]: 'exhaust_fan_speed': Sending state 35.00000 % with 0 decimals of accuracy
[16:34:25][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 3240621979
state: 35
missing_state: NO
}
[16:34:25][V][sensor:043]: 'intake_fan_speed_rpm': Received new state 1278.990479
[16:34:25][D][sensor:094]: 'intake_fan_speed_rpm': Sending state 1278.99048 RPM with 0 decimals of accuracy
[16:34:25][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2775799405
state: 1278.99
missing_state: NO
}
[16:34:25][V][sensor:043]: 'exhaust_fan_speed_rpm': Received new state 1246.675537
[16:34:25][D][sensor:094]: 'exhaust_fan_speed_rpm': Sending state 1246.67554 RPM with 0 decimals of accuracy
[16:34:25][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 3840914389
state: 1246.68
missing_state: NO
}
[16:34:25][VV][uart.arduino_esp32:194]: Flushing...
[16:34:25][W][component:239]: Component esphome.coroutine took a long time for an operation (77 ms).
[16:34:25][W][component:240]: Components should block for at most 30 ms.
[16:34:27][D][comfoair:905]: getting valve status
[16:34:27][VV][uart.arduino_esp32:194]: Flushing...
[16:34:27][V][comfoair:246]: Response 0x0C from confosense with 2 bytes.
[16:34:27][VV][uart.arduino_esp32:194]: Flushing...
[16:34:27][V][comfoair:246]: Response 0x0E from confosense with 12 bytes.
[16:34:27][V][sensor:043]: 'bypass_valve': Received new state 0.000000
[16:34:27][D][sensor:094]: 'bypass_valve': Sending state 0.00000 % with 0 decimals of accuracy
[16:34:27][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 4097165914
state: 0
missing_state: NO
}
[16:34:27][D][binary_sensor:036]: 'bypass_valve_open': Sending state OFF
[16:34:27][VV][api.service:070]: send_binary_sensor_state_response: BinarySensorStateResponse {
key: 3828666037
state: NO
missing_state: NO
}
[16:34:27][V][sensor:043]: 'motor_current_bypass': Received new state 0.000000
[16:34:27][D][sensor:094]: 'motor_current_bypass': Sending state 0.00000 A with 1 decimals of accuracy
[16:34:27][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2944638445
state: 0
missing_state: NO
}
[16:34:27][V][sensor:043]: 'motor_current_preheating': Received new state 0.000000
[16:34:27][D][sensor:094]: 'motor_current_preheating': Sending state 0.00000 A with 1 decimals of accuracy
[16:34:27][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 4040142686
state: 0
missing_state: NO
}
[16:34:27][VV][uart.arduino_esp32:194]: Flushing...
[16:34:27][W][component:239]: Component esphome.coroutine took a long time for an operation (69 ms).
[16:34:27][W][component:240]: Components should block for at most 30 ms.
[16:34:29][D][comfoair:940]: getting sensor data
[16:34:29][VV][uart.arduino_esp32:194]: Flushing...
[16:34:29][V][comfoair:246]: Response 0x0E from confosense with 2 bytes.
[16:34:29][VV][uart.arduino_esp32:194]: Flushing...
[16:34:29][V][comfoair:246]: Response 0x98 from confosense with 28 bytes.
[16:34:29][V][sensor:043]: 'enthalpy_temperature': Received new state -20.000000
[16:34:29][D][sensor:094]: 'enthalpy_temperature': Sending state -20.00000 °C with 1 decimals of accuracy
[16:34:29][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 1399672037
state: -20
missing_state: NO
}
[16:34:29][VV][uart.arduino_esp32:194]: Flushing...
[16:34:29][W][component:239]: Component esphome.coroutine took a long time for an operation (55 ms).
[16:34:29][W][component:240]: Components should block for at most 30 ms.
[16:34:31][D][comfoair:946]: getting ventilation level
[16:34:31][VV][uart.arduino_esp32:194]: Flushing...
[16:34:31][V][comfoair:246]: Response 0x98 from confosense with 2 bytes.
[16:34:31][VV][uart.arduino_esp32:194]: Flushing...
[16:34:31][V][comfoair:246]: Response 0xCE from confosense with 22 bytes.
[16:34:31][D][comfoair:523]: Level 02
[16:34:31][W][comfoair:524]: Off ab 15 - Off zu 15 - Low ab 35 - Low zu 35 - Middle ab 50 - Middle zu 50 - High ab 80 - High zu 77
[16:34:31][V][sensor:043]: 'return_air_level': Received new state 35.000000
[16:34:31][D][sensor:094]: 'return_air_level': Sending state 35.00000 m³ with 1 decimals of accuracy
[16:34:31][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 229499437
state: 35
missing_state: NO
}
[16:34:31][V][sensor:043]: 'supply_air_level': Received new state 35.000000
[16:34:31][D][sensor:094]: 'supply_air_level': Sending state 35.00000 m³ with 1 decimals of accuracy
[16:34:31][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 3719388934
state: 35
missing_state: NO
}
[16:34:31][V][sensor:043]: 'ventilation_level': Received new state 1.000000
[16:34:31][D][sensor:094]: 'ventilation_level': Sending state 1.00000 with 0 decimals of accuracy
[16:34:31][VV][api.service:140]: send_sensor_state_response: SensorStateResponse {
key: 2606862985
state: 1
missing_state: NO
}
WARNING esphome-web-8ab534 @ 192.168.68.53: Connection error occurred: Ping response not received after 90.0 seconds
INFO Processing unexpected disconnect from ESPHome API for esphome-web-8ab534 @ 192.168.68.53
WARNING Disconnected from API
WARNING Can't connect to ESPHome API for esphome-web-8ab534 @ 192.168.68.53: Error connecting to [AddrInfo(family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, proto=6, sockaddr=IPv4Sockaddr(address='192.168.68.53', port=6053))]: [Errno 113] Connect call failed ('192.168.68.53', 6053) (SocketAPIError)
INFO Trying to connect to esphome-web-8ab534 @ 192.168.68.53 in the background
(please ignore the logs between 16:34:59 and 16:34:19 - recuperator and comfosense were not powered on at this time)
Can you share you esphome yaml part that change the ventilationlevel?
of course:
on_click:
- min_length: 25ms
max_length: 700ms
then:
- if:
condition:
lambda: 'return id(ventilation_level).state > 1;'
then:
- uart.write: [0x07, 0xF0, 0x00, 0x99, 0x01, 0x02, 0x49, 0x07, 0x0F]
- light.turn_off: led
else:
- uart.write: [0x07, 0xF0, 0x00, 0x99, 0x01, 0x03, 0x4A, 0x07, 0x0F]
- light.turn_on: led
- min_length: 1000ms
max_length: 3000ms
then:
- if:
condition:
lambda: 'return id(ventilation_level).state < 3;'
then:
- uart.write: [0x07, 0xF0, 0x00, 0x99, 0x01, 0x04, 0x4B, 0x07, 0x0F]
- light.turn_on: led
else:
- uart.write: [0x07, 0xF0, 0x00, 0x99, 0x01, 0x03, 0x4A, 0x07, 0x0F]
- light.turn_on: led
Sorry for the late reply @trutru21 , I was not around for a while.
I see that you are getting data but then the ESP crashes for some reason. Honestly I don’t have good sense what is the issue. Are you getting the same issue even when the ComfoSense is not connected? Also I would try to power up the Zehned unit first and then the ESP (or at least reset it when the unit is on) because then it will go through the init sequence properly.
Yeah, the issues is the same. I’ve tried all configurations to no avail. Don’t worry about it, I just switched to wicher’s and removed the comfosense ![]()
Is it possible to cut of the power of the zehnder ?
When I am not using it, it still gives me 11 /12w per hour. It is possible to reduce it ?
Most models can only be turned down to lowest speed. The possible lowest setting depends on the model (you can find that info in the installer manual). My CA350 allows 15% lowest setting. In this setting it uses ~12W.
This is due to the fact that mechanical ventilation fully replaces gravitational one and it should never be fully turned off. If you really know what you are doing you can just install a smart plug and turn of the power completely. But I would not recommend doing it.
Hello, I have managed to connect to Zehnder 375 using wichers/esphome-comfoair. I can read values from sensor. I am however unable to control the power levels.
I have the unit connected using the 3-position switch. I don’t have the comfosense unit, just direct connection to esp32.
Did anybody manage to control the power levels on Zehnder 375 via HA? Any clues what could be wrong?
Edit: It turns out that I can control the levels, but only to and above the level set on the 3-way switch. So it needs to be set to level 1 to be able to switch between all levels.
Well, that is no surprise. You can replace the physical switch with a smart one or disconnect it completely and relay on the smart control only.
Hi all, my unit seems to be different from everything I already read. I bought a house with a storkAir WHR930. I wanted to automate this with an ESP8266 and HA. I bought and build the parts similar to GitHub - LukasdeBoer/esp8266-whr930-mqtt: Control your StorkAir / Zehnder WHR930 using a ESP8266 via MQTT. However when the time came to connect it to the PCB i found that my unit did not have an RJ45 port, after some measuring and testing i found out it was an RJ9 port (4P4C). I ordered this cable cut it up and tried connecting it this way to a DB9 RS232-TTL converter. However i am not sure about the pin out i tried a couple of combinations but nothing seems to work. Has anyone got any ideas. tips or resources to set me in the right direction?
Are you sure its a WHR930, because it doesn’t look like a print of a WHR930. These are green and have a RJ44 (RJ45) connector for RS232 communication.
By the AI looks of it this is a 950 or 960;
edit: hmm funny… If I click on electrical scheme I get a schematic drawing which mentions RJ45. https://zehndernl.zendesk.com/hc/nl/articles/360000168117-WHR-950-Elektrisch-schema
apparently there are different board versions? As your photo matches the connector on the 950/960 board photo.