Zehnder ComfoAir CA350 integration via serial connection (RS232) and MQTT

@adorobis thank you very much for your advice.

I’ll order today “ComfoConnect KNX C” for my setup.

Keep up your work,
Best

I recently started looking into automating our Zehnder ventilation unit, and I stumbled upon this amazing-looking HA integration. Major props to everyone involved!

The official naming of my unit is the “Zehnder ComfoD 350L Basic” that, at least on the surface, seems to look just like a barebones comfoair 350 without any of the optional boards. I found lots of technical data over at https://zehnderbe.zendesk.com/hc/nl-nl/articles/360004066498-ComfoD-350-Basic like electrical schemas, installer guides and connecting extra sensors - apologies for the Dutch, but I couldn’t find an equivalent in English

So far I’ve:

  • Created an rj45->usb cable through a rs232 ttl adapter with a FTDI chip (no intermediary db9 plug)
  • Installed the python requirements and integration repo on an old ethernet-connected raspberry pi 1 B+ that I still had laying around
  • Wired everything up, and managed to get the MQTT entities into HA

I seem to be running into similar issues as @hif2k1 and @Michael-Yongshi though. The board seems identical to theirs, and none of the serial communication works.

I’ve verified the rs232 usb adapter by shorting rx/tx, I’ve reviewed the connections of the rj45-> usb adapter ad nauseum, power cycled everything, and left everything running for extended periods of time; all to no avail.

Today I decided to bust out the multimeter once again (not having access to an oscilloscope) and noticed a few… oddities with my unit as I dug deeper:

  • Pin 1 of the rj45 adapter outputs 20 volts, instead of the 12V/24V mentioned everywhere else (measured between pin 1 and pin 8)
  • Pin 4 seems to be a sort of clock signal? It consistently oscillates between 0-5V. I previously assumed pins 4-7 weren’t connected to anything.
  • On the RX side of my dongle, I consistently receive 0x00s, all the time. I’ve sniffed the traffic, and it just keeps outputting 0x00 every so often, even when not transmitting anything. This makes the python script assume any transmitted command failed, as we always “get 0x00 back”.
  • Whenever I unplug and replug the USB adapter I do see some actual data coming in, perhaps as if there is some sort of handshaking going on? I haven’t had the time to fully look into the sequence yet, but will try to get the full sequence and report back if this could help.

All of this leads me to speculate that my unit, produced in late 2020, is possibly a revision of the CA350 which includes some changes to the debug/expansion port.

Does anyone have any further ideas of what I could do to figure this out? I’d really like to have a shower without having to think about changing the ventilation speed :smiley:

I’ve tried my best to document my findings, but this is pretty unknown territory for me, so apologies if I misunderstood or poorly described anything!

I’m afraid that for the Basic model you can only connect it with an external 3 position switch. I think it is explained here:

You can connect it to the following connector on the board:


For that you could use 2 2-channel smart relays or some other esp-based board with 3+ releays (e.g. Sonoff 4CH Pro R3 flashed with esphome is very good for that). Make sure you guarantee interlocking of the relays, not sure if the unit is protected from providing current to two or three inputs simultaneously.

1 Like

I think only the Luxe model allows for connecting of external RS232 controller:

Hey, thanks for the reply @adorobis
I did notice that in their documentation but assumed they simply didn’t officially support it to sell more “luxe” units :smile:

You’re probably right. I’ll still attempt to contact the manufacturer and ask what this port can be used for, as this product is no longer being manufactured anyway.

If that turns into a dead end I’ll go with a smart relay. I was hoping to avoid messing with grid power cables, but it seems to be the only option outside of buying their RF expansion card from unofficial resellers for far too much money :slight_smile:

Did you get anywhere? I spent so long on this, but didn’t get anything. So frustrating seeing the potneital, but not being able to use it.

So far I’ve gotten no answer from Zehnder directly, which isn’t a surprise. The installer of our comfod350 basic mentioned that the rj45 plug can’t be used to control the unit directly, and that a smart relay is the only viable solution.

This project is on the back-burner for now, but the plan is to put a smart relay in between of the switch and the unit, ideally keeping the physical switch intact and functional :slight_smile: once I get around to it I’ll provide an update.

1 Like

Adding to @hif2k1 @bennod, I have a WHR930 (which seems to be compatible with a comfoair) that has close to the exact same PCB as @bennod posted. Some slight differences are that the unit outputs 38v (!) on pin 1 and on pin 4 there is an average of ~8v. I verified the voltage in the unit and even where it staes it should be 12v it outputs 38v (How did this pass Q&A). Interestingly the blog here details an equal PCB where the RS232 seems to work and doesnt have the separate RS232 interface apart from the RJ45.

If pin 4 is in the range of 3v it looks like CANBUS, but in my case I am unsure.

It is possible to convert a basic model to a luxe model by: https://ventishop.eu/ombouwset-basis-luxe-whr-950-comfod-500-ca-500/, not sure if I’d like to investigate that or investigate a replacement board (cannot post the link yet due to being limited)

ComfoWay V3 for Zehnder ComfoAir: KNX & modbus interface and vizualisation – KNX & Logic Integration claims to be compatible with the ComfoD 350 Basic. Its firmware can be downloaded at Firmware – KNX & Logic Integration. At first glance, it looks to use the same communication protocol as the other libraries out there.

But I haven’t build an adapter yet to test the RJ45 port on my unit, so this is all speculation at this point.

Hi all,
I have also an Zehnder Comfoair 180 with a Comfosense Unit. I tried to get a connection but I always get these errors.:

*****************************
* CA350 MQTT Home Assistant *
*****************************

18-07-2023 19:21:50 WARNING: Changing the RS232 mode went wrong
18-07-2023 19:21:50 DEBUG: published message online on topic comfoair/status at Tue Jul 18 21:21:50 2023
18-07-2023 19:21:50 DEBUG: delete topic homeassistant/fan/ca350_fan/config at Tue Jul 18 21:21:50 2023
18-07-2023 19:21:50 INFO: Home Assistant MQTT Autodiscovery Topic Set: homeassistant/sensor/ca350_[nametemp]/config
18-07-2023 19:21:50 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_outsidetemp/config
18-07-2023 19:21:50 DEBUG: published message {"name": "CA350 Outside temperature", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_outsidetemp", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/outsidetemp", "unit_of_measurement": "\u00b0C", "device_class": "temperature"} on topic homeassistant/sensor/ca350_outsidetemp/config at Tue Jul 18 21:21:50 2023
18-07-2023 19:21:50 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_supplytemp/config
18-07-2023 19:21:50 DEBUG: published message {"name": "CA350 Supply temperature", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_supplytemp", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/supplytemp", "unit_of_measurement": "\u00b0C", "device_class": "temperature"} on topic homeassistant/sensor/ca350_supplytemp/config at Tue Jul 18 21:21:50 2023
18-07-2023 19:21:50 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_exhausttemp/config
18-07-2023 19:21:50 DEBUG: published message {"name": "CA350 Exhaust temperature", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_exhausttemp", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/exhausttemp", "unit_of_measurement": "\u00b0C", "device_class": "temperature"} on topic homeassistant/sensor/ca350_exhausttemp/config at Tue Jul 18 21:21:50 2023
18-07-2023 19:21:50 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_returntemp/config
18-07-2023 19:21:50 DEBUG: published message {"name": "CA350 Return temperature", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_returntemp", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/returntemp", "unit_of_measurement": "\u00b0C", "device_class": "temperature"} on topic homeassistant/sensor/ca350_returntemp/config at Tue Jul 18 21:21:50 2023
18-07-2023 19:21:50 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_analog_sensor_1/config
18-07-2023 19:21:50 DEBUG: published message {"name": "CA350 Analog sensor 1", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_analog_sensor_1", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/analog_sensor_1", "unit_of_measurement": "%", "icon": "mdi:gauge"} on topic homeassistant/sensor/ca350_analog_sensor_1/config at Tue Jul 18 21:21:50 2023
18-07-2023 19:21:50 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_analog_sensor_2/config
18-07-2023 19:21:50 DEBUG: published message {"name": "CA350 Analog sensor 2", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_analog_sensor_2", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/analog_sensor_2", "unit_of_measurement": "%", "icon": "mdi:gauge"} on topic homeassistant/sensor/ca350_analog_sensor_2/config at Tue Jul 18 21:21:50 2023
18-07-2023 19:21:50 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_analog_sensor_3/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Analog sensor 3", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_analog_sensor_3", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/analog_sensor_3", "unit_of_measurement": "%", "icon": "mdi:gauge"} on topic homeassistant/sensor/ca350_analog_sensor_3/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_analog_sensor_4/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Analog sensor 4", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_analog_sensor_4", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/analog_sensor_4", "unit_of_measurement": "%", "icon": "mdi:gauge"} on topic homeassistant/sensor/ca350_analog_sensor_4/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_fan_speed_supply/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Supply fan speed", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_fan_speed_supply", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/intakefanrpm", "unit_of_measurement": "rpm", "icon": "mdi:fan"} on topic homeassistant/sensor/ca350_fan_speed_supply/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_fan_speed_exhaust/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Exhaust fan speed", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_fan_speed_exhaust", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/exhaustfanrpm", "unit_of_measurement": "rpm", "icon": "mdi:fan"} on topic homeassistant/sensor/ca350_fan_speed_exhaust/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_supply_air_level/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Supply air level", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_supply_air_level", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/intakefanspeed", "unit_of_measurement": "%", "icon": "mdi:fan"} on topic homeassistant/sensor/ca350_supply_air_level/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_return_air_level/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Return air level", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_return_air_level", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/exhaustfanspeed", "unit_of_measurement": "%", "icon": "mdi:fan"} on topic homeassistant/sensor/ca350_return_air_level/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/binary_sensor/ca350_filterstatus/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Filter status", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_filterstatus", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/filterstatus_binary", "device_class": "problem", "icon": "mdi:air-filter"} on topic homeassistant/binary_sensor/ca350_filterstatus/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/number/ca350_filter_weeks/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Filter Weeks", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_filter_weeks", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/filterweeks_state", "command_topic": "comfoair/filterweeks", "unit_of_measurement": "weeks", "icon": "mdi:air-filter", "min": 1, "max": 26} on topic homeassistant/number/ca350_filter_weeks/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_filter_hours/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Filter Hours", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_filter_hours", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/filterhours", "unit_of_measurement": "h", "icon": "mdi:timer"} on topic homeassistant/sensor/ca350_filter_hours/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/button/ca350_reset_filter/config
18-07-2023 19:21:51 DEBUG: published message {"name": "CA350 Reset Filter", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_reset_filter", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "command_topic": "comfoair/reset_filter", "icon": "mdi:air-filter"} on topic homeassistant/button/ca350_reset_filter/config at Tue Jul 18 21:21:51 2023
18-07-2023 19:21:51 DEBUG: Sending autodiscover for homeassistant/binary_sensor/ca350_bypass_valve/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 Bypass valve", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_bypass_valve", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/ca350_bypass_valve", "device_class": "opening"} on topic homeassistant/binary_sensor/ca350_bypass_valve/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_bypass_valve/config
18-07-2023 19:21:52 WARNING: get_temp function could not get serial data
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 Bypass valve", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_bypass_valve", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/bypassstatus", "unit_of_measurement": "%", "icon": "mdi:valve"} on topic homeassistant/sensor/ca350_bypass_valve/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/binary_sensor/ca350_summer_mode/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 Summer mode", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_summer_mode", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/ca350_summer_mode", "icon": "mdi:sun-snowflake"} on topic homeassistant/binary_sensor/ca350_summer_mode/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_summer_mode/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 Summer mode", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_summer_mode", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/bypassmode", "icon": "mdi:sun-snowflake"} on topic homeassistant/sensor/ca350_summer_mode/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/binary_sensor/ca350_preheatingstatus/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 Preheating status", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_preheatingstatus", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/preheatingstatus", "device_class": "heat"} on topic homeassistant/binary_sensor/ca350_preheatingstatus/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/sensor/ca350_ewttemp/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 EWT temperature", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_ewttemp", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/ewttemp", "unit_of_measurement": "\u00b0C", "device_class": "temperature"} on topic homeassistant/sensor/ca350_ewttemp/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/number/ca350_ewtlowtemp/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 EWT Low Temperature", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_ewtlowtemp", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/ewtlowtemp_state", "command_topic": "comfoair/ewtlowtemp", "unit_of_measurement": "\u00b0C", "device_class": "temperature", "icon": "mdi:thermometer-low", "max": 15} on topic homeassistant/number/ca350_ewtlowtemp/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/number/ca350_ewthighertemp/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 EWT High Temperature", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_ewthighertemp", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/ewthightemp_state", "command_topic": "comfoair/ewthightemp", "unit_of_measurement": "\u00b0C", "device_class": "temperature", "icon": "mdi:thermometer-high", "min": 10, "max": 25} on topic homeassistant/number/ca350_ewthighertemp/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/number/ca350_ewtspeedup/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 EWT Speed Up", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_ewtspeedup", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "state_topic": "comfoair/ewtspeedup_state", "command_topic": "comfoair/ewtspeedup", "unit_of_measurement": "%", "device_class": "temperature", "icon": "mdi:fan", "max": 99} on topic homeassistant/number/ca350_ewtspeedup/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 INFO: Home Assistant MQTT Autodiscovery Topic Set: homeassistant/climate/ca350_climate/config
18-07-2023 19:21:52 DEBUG: Sending autodiscover for homeassistant/climate/ca350_climate/config
18-07-2023 19:21:52 DEBUG: published message {"name": "CA350 Climate", "availability_topic": "comfoair/status", "payload_available": "online", "payload_not_available": "offline", "unique_id": "ca350-ca350_climate", "device": {"identifiers": ["ca350"], "name": "CA350", "manufacturer": "Zehnder", "model": "ComfoAir 350"}, "temperature_command_topic": "comfoair/comforttemp/set", "temperature_state_topic": "comfoair/comforttemp", "current_temperature_topic": "comfoair/supplytemp", "min_temp": "15", "max_temp": "27", "temp_step": "1", "modes": ["off", "fan_only"], "mode_state_topic": "comfoair/ha_climate_mode", "mode_command_topic": "comfoair/ha_climate_mode/set", "fan_modes": ["off", "low", "medium", "high"], "fan_mode_state_topic": "comfoair/ha_climate_mode/fan", "fan_mode_command_topic": "comfoair/ha_climate_mode/fan/set", "temperature_unit": "C"} on topic homeassistant/climate/ca350_climate/config at Tue Jul 18 21:21:52 2023
18-07-2023 19:21:52 INFO: Successfull subscribed to the comfoair/comforttemp/set topic
18-07-2023 19:21:52 INFO: Successfull subscribed to the comfoair/ha_climate_mode/set topic
18-07-2023 19:21:52 INFO: Successfull subscribed to the comfoair/ha_climate_mode/fan/set topic
18-07-2023 19:21:52 INFO: Successfull subscribed to the comfoair/reset_filter topic
18-07-2023 19:21:52 INFO: Successfull subscribed to the comfoair/filterweeks topic
18-07-2023 19:21:52 INFO: Successfull subscribed to the comfoair/ewtlowtemp topic
18-07-2023 19:21:52 INFO: Successfull subscribed to the comfoair/ewthightemp topic
18-07-2023 19:21:52 INFO: Successfull subscribed to the comfoair/ewtspeedup topic
18-07-2023 19:21:54 WARNING: function get_fan_status could not get serial data
18-07-2023 19:21:56 WARNING: get_ventilation_status function could not get serial data
18-07-2023 19:21:58 WARNING: get_filter_status function could not get serial data
18-07-2023 19:22:00 WARNING: function get_filter_weeks could not get serial data

First warning:Changing the RS232 mode went wrong

What does this mean??

I want to use this code to get all the values and then I want to use them via MQTT in Openhab.

Looks like the first command sent to the RS232 fails so I would check the connection. The most typical issue is swapped TX and RX cables.

Btw, there is an openhab binding available, is it not providing enough sensors/controls?

Hello together

I have been following this post for some time which has now become very long and intense. I have a Zehnder Comfair SL330 system, which has an RS-232 interface. Can someone tell me briefly in summary how I can implement this in the HA?

Looking at this connection instructions https://www.zehnder-systems.ch/download/d7e6ab05c5234703b6658f318a487bc4 it seems that it will work.
I would start here:
Zehnder ComfoAir CA350 integration via serial connection (RS232) and MQTT - #3 by adorobis
and then go to the gihub to install the software:
GitHub - adorobis/hacomfoairmqtt: Home Assistant integration for ComfoAir 350 device via serial communication and MQTT
Above assumes that you’ll connect the Comfoair to a computer running linux or TrueNAS (or other FreeBSD one).
There is also an alternative way by connecting it to an esp board:
GitHub - wichers/esphome-comfoair: ESPHome configuration to drive Zehnder ComfoAir devices.

+1 to all of what adorabis shared above and I will add a shameless plug for my fork of wicher’s github repo which adds support for Comfosense through a second RS232 channel if you want to use your existing comfosense unit if you have one. :grin:

1 Like

Many thanks for the support. I will test it directly via RS-232 since I have an interface. My HA installation doesn’t seem to have python, so I’ll have to see how to get that on first.

HA is all python. Here are instructions on how to run it on HAOS:

I have inserted the files in this directory and adjusted config.ini
HA_ZH

script_

What do I need to do with these commands:

python3 -m venv /config/custom_components/ca350/python3venv
source /config/custom_components/ca350/python3venv/bin/activate
pip3 install paho-mqtt
pip3 install pyserial
deactivate

Do I need to run this on the command line ?

Yes, those should be run in the command line. But as I’m not using HAOS I won’t help much here.

ok i understand, thx

The problem is this:
Hasso