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

I have created a new HA OS add-on/app version that works with a connected CC Ease/Comfosense control unit. :grinning:
It passively listens in on communication between Comfoair and CC Ease/Comfosense.Commands are only sent actively if the fan speed, etc., needs to be changed.
Works only with RS232 TCP Adaptare (e.g. Waveshare)!

Reactions times are quite fast (2-3s) and it overall works very smooth.

@pepo83 i currently use the solution from @adorobis adorobis hacomfoairmqtt PI OS on a Pi Zero W connected to the serial port of the ventilation unit.
This conflicted with my CC Ease (i left it connected dispite of the warnings here to do so…) so had to disconnect it to use the solution.

Since I have a CC Ease on the wall i’m interested if i can easily swith to your solution and connect it again?

I have to replace my hardware (Pi Zero W with the software from @adorobis) with a Waveshare device? Any Waveshare device will work?
Will the lovelace card from mweimerskirch work with your sollution?

I have it running with my CC Ease connected and it works very well. :grinning:
Do you have HA OS running (because the app is built for HA OS)?

I have this waveshare adapter.

But it’s better to use an external power supply for the adapter,
I first used the 12V from the Comfoair PCB, but then I often got bypass flap errors on the Comfoair. The bypass motors are also connected to the internal 12V supply, and perhaps the total consumption is too high when the Waveshare adapter is also connected there. So I would recommend an external power supply. I simply installed a 230V to 12V transformer internally at the Comfoair 230V supply lines. Or simply use an external power supply via the DC power port of the Waveshare adapter.

I think the lovalace card should work if you map the right sensors. At the moment I have no extra binary sensors in the app (if the card needs binary sensors) but I could easily add this.
I can try the card on the WE if I have some time. :wink:

@ dewildep The card is working:

I had to change some sensors to binary sensor. On the weekend I will clean up the code a bit and then push it to my repo, so the new code is not online yet.

@pepo83 thanks for your reply and the changes to your repo! Looking forward to start using them.
To answer your question, I am running HA OS on a RPI5.
I will go ahead and order a “Waveshare RS232/485 NAAR WIFI POE ETH (B)”.
Once i have it I will hook it up with an external power supply as you suggest.
I’ll let you know the outcome when it’s all connected and configured combined with the lovelace card.

@dewildep New verison is online.

type: custom:hacomfoairmqtt-card
climateEntity: climate.ca350_comfoair_climate
outsideTempSensor: sensor.ca350_outside_air
exhaustTempSensor: sensor.ca350_exhaust_air
returnTempSensor: sensor.ca350_ca350_extract_air
supplyTempSensor: sensor.ca350_supply_air
filterStatusSensor: binary_sensor.ca350_ca350_filter_warning
bypassValveSensor: binary_sensor.ca350_ca350_bypass_active
summerModeSensor: binary_sensor.ca350_ca350_summer_mode
returnAirLevelSensor: sensor.ca350_exhaust_fan
supplyAirLevelSensor: sensor.ca350_intake_fan
preheatingStatusSensor: binary_sensor.ca350_ca350_preheater_active

I also integrated a CC Ease emulation, so the script should now also work without connected control unit (if you activate the option)
(But it’s in beta phase, so I won’t be testing it further myself)

Comfosense_conected = True -->if you have no external control unit (CC Ease/Comfosense) connected: set to False

@pepo83 i received and configured my “Waveshare RS232/485 NAAR WIFI POE ETH (B)”. Connected it with a straight serial cable to the RS232 port on the CA350 unit.
I configured the Waveshare following the info i found on this post:



for testing it is still on DHCP but it will get a fixed IP once working fine.

I installed V1.6.0 of your CA 350 MQTT bridge and configured it with the IP of my Waveshare RS232 adapter.

This worked instantly ! And for now seems to be very responsive, also when controlling the CCEase wall panel.

I tried adding the the lovelace card from mweimerskirch again but this did not work out of the box, i had to update the code to reflect my correct entity and sensors.
The lovelace card doesn’t need the dependancy on the integration of @adorobis and is working fine with yours:

Glad to hear it’s working. :sunglasses:
I also had to change the entity names for the lovelace card (you just need to check the CA350 MQTT device to see what the exact names of the relevant entities are):

type: custom:hacomfoairmqtt-card
climateEntity: climate.ca350_ca350
outsideTempSensor: sensor.ca350_ca350_outside_air
exhaustTempSensor: sensor.ca350_ca350_exhaust_air
returnTempSensor: sensor.ca350_ca350_extract_air
supplyTempSensor: sensor.ca350_ca350_supply_air
filterStatusSensor: binary_sensor.ca350_ca350_filter_warning
bypassValveSensor: binary_sensor.ca350_ca350_bypass_active
summerModeSensor: binary_sensor.ca350_ca350_summer_mode
returnAirLevelSensor: sensor.ca350_ca350_exhaust_fan
supplyAirLevelSensor: sensor.ca350_ca350_intake_fan
preheatingStatusSensor: binary_sensor.ca350_ca350_preheater_active

I disabled this in my waveshare settings:
grafik

But it probably won’t make any difference

Sorry if i overlooked the option but can the “boost” function be controlled directly via a custom button or in an automation (when humidity reaches xx then run boost)

Sure, it’s part of the climate entity.


action:
  - service: climate.set_preset_mode
    target:
      entity_id: climate.ca350_ca350
    data:
      preset_mode: boost

i fixed it this way using your code:

I created a Helper toggle button.
When the button is toggled to ON it activates the boost mode (following the set Booster Time), If toggled off it writes none to the boost mode. It automatically returns to the previous state the fan was in (Auto, Absent, Low, Medium, High).

i Had to create 3 automations to make the Helper button to work correctly and in sync with the real status of the Boost function.

alias: Druk op knop bij handmatige toggle Ventilatie BOOST
description: ""
triggers:
  - entity_id:
      - input_boolean.ventilatie_boost_helper
    trigger: state
conditions:
  - condition: template
    value_template: "{{trigger.to_state.context.user_id is not none}}"
actions:
  - choose:
      - conditions:
          - condition: state
            entity_id: input_boolean.ventilatie_boost_helper
            state:
              - "on"
        sequence:
          - target:
              entity_id: climate.ca350_ca350
            data:
              preset_mode: boost
            action: climate.set_preset_mode
      - conditions:
          - condition: state
            entity_id: input_boolean.ventilatie_boost_helper
            state:
              - "off"
        sequence:
          - target:
              entity_id: climate.ca350_ca350
            data:
              preset_mode: none
            action: climate.set_preset_mode
mode: single

alias: Sync Ventilatie BOOST HELPER aan
description: ""
triggers:
  - entity_id:
      - climate.ca350_ca350
    to:
      - boost
    trigger: state
    attribute: preset_mode
conditions: []
actions:
  - target:
      entity_id:
        - input_boolean.ventilatie_boost_helper
    action: input_boolean.turn_on
    data: {}
mode: single

alias: Sync Ventilatie BOOST HELPER uit
description: ""
triggers:
  - entity_id:
      - climate.ca350_ca350
    to:
      - none
    trigger: state
    attribute: preset_mode
conditions: []
actions:
  - action: input_boolean.turn_off
    target:
      entity_id:
        - input_boolean.ventilatie_boost_helper
    data: {}
mode: single

Overengineerd or a good solution? Optimization of what i did possible?

Would be cool to have it available directly here via the MQTT Bridge you created:

I really like this approach and the possibility to use the CC Ease panel in parallel to the automation on the CA 350. However, whenever I power up the WaveShare Rail-Mount Serial Server, RS232/485/422 to RJ45 Ethernet Module, TCP/IP to serial with the following wiring, I’m instantly getting a COMM Error message on the CC ease wall panel. I receive data via MQTT though, I’m just looking for a way to properly use the wall panel together with the Add-on.

Is the wiring correct, connecting both, CC Ease communication and WaveShare on the same screw terminal? Should I rather use the LAN port below?

Thank you!

@dewildep Seems quite complicated. :grinning:
Why do you need this extra helper/button? You can just use the action yaml code from my last post in any automation script.
But I can also add an extra button to the script with the next update. :wink:

@FXB24 I am using the separate DB9 connector (which I have on my PCB), but I also tried it (successfully) in parallel to the CC Ease on the Screw terminals (like on your picture), so it should make no difference.
When I got a COM error (NC on the CC Ease) I had to swap TX/RX lines from the waveshare modul. (and mabye restart the whole unit)

We are using the boost button on the CC Ease panel from time to time to “vent” the house. When we had people comming over, when there is an odd smell in the living room etc…
So i wanted my wife to be able to press it from HA.
So would be cool to have it in your next update :wink:

But like you said, for the automation scripts, i know i can just use the action yaml code you shared.

You can also manage that fully in HA. For example I have two high vent modes: one of them is getting triggered automatically if humidity sensors detect high humidity in one of the bathrooms - it gets to mid level for 20 mins. I can also trigger it manually e.g. if I something got burned in the kitchen etc. I also have a second mode with high speed kicked in for 10 minutes - used in case some bad smell needs to be removed quickly etc.

New version is online:

Next Update:
v1.8.0 add filter weeks slider, add operating hours

Note: The filter_week Sensor is no longer available (as it is now in the controls), so you have to delete the Sensor Entity manually.

With this pace I might consider switching to it :slight_smile: Just need some more deployment options, starting with standalone container.

Don’t worry, I think I’m done now. :wink:
Almost all the useful options for CC Ease have been implemented. So I’m not planning any new features for now.

Regarding deployment options:
In principle, you can use the script as-is for standalone containers. You’d just need to change the few config lines at the beginning to “config parser”.

Dear community,

I have been using the CA350 Integration for more than one year now.
It all worked well.

Few weeks ago (I dont know if there might was an update), the entity for filter reset isnt available anymore.

I tried to find it, but without success.
Does anyone has the same problem or do you have an idea, how I can fix this?
Thank you very much in advance.