My girlfriend and I bought a new house! And with it, an (older) Itho Daalderop CVE ECO 2SP mechanical ventilation unit. Itho Daalderop is a Dutch brand selling ventilation appliances and heating systems. I believe they mostly sell their products in The Netherlands.

half itho cve eco 2sp
Figure 1. Our Itho Daalderop CVE ECO 2SP ventilation unit

 

The above ventilation unit keeps the air in our house (specifically our bathroom, kitchen, and downstairs toilet) fresh by continuously exchanging indoor air with fresh outdoor air. It also came with a 868MHz RFT remote control to manually adjust the ventilation speed:

rft remote
Figure 2. Our remote control

 

A minor inconvenience is that the unit does not automatically adjust the ventilation speed based on the indoor air quality (e.g. humidity). I therefore wondered if it would be possible to automate the unit via my Home Assistant instance, paired with a humidity sensor in the bathroom, instead of manually using the remote control whenever we take a shower. As it turns out (like many times before), other people were wondering the same thing far before me.

A quick search led me to a Tweakers topic called Itho Daalderop - open source wifi control add-on module. Tweaker arjenhiemstra, with help of the community and in spirit of open source, reverse engineered the communication protocol used by the Itho Daalderop ventilation units. He then developed an add-on module that can be connected to the ventilation unit’s PCB to enable WiFi control via MQTT. Arjen Hiemstra even open sourced everything on GitHub. The whole project was covered in a Tweakers review (Dutch).

cve wifi addon
Figure 3. Arjen Hiemstra’s Itho CVE RFT WiFi Add-on module

 

Stuff like this warms my heart, where the power of open source and community collaboration enables us to extend the functionality of our devices beyond what the manufacturer provides ❤️.

Furthermore, he sells these add-on modules on his webshop for a reasonable price, and I decided to order one. The installation was quite straightforward, the add-on module comes with clear instructions (also in English) on how to connect it to the ventilation unit’s PCB 2x4-pin header:

2x4 pins
Figure 4. The 2x4-pin header on the ventilation unit PCB

 

First, I powered off the ventilation unit (in my case, unplugging the Perilex plug):

half perilex
Figure 5. The Perilex plug powering our ventilation unit

 

I then waited a few seconds to make sure all capacitors were discharged. Next, I opened the ventilation unit’s casing and opened the PCB compartment. Here you can see I already had my RFT remote control add-on module attached to that header:

rft attached
Figure 6. Original RFT remote control add-on module attached to the ventilation unit PCB

 

I then detached the RFT remote control add-on module, and replaced it with Arjen’s WiFi add-on module (notice the same 2x4 pin header on the add-on module):

wifi add on pins
Figure 7. Connecting the WiFi add-on module to the ventilation unit PCB, replacing the RFT remote control module

 

Arjen’s WiFi add-on module supports connecting the old RFT remote control add-on module on top, on its own 2x4-pin header, which is great! I therefore attached the RFT remote control module on top of it. Here’s how the final setup looked like:

rft on top
Figure 8. Connecting the RFT remote control module on top of the WiFi add-on module

 

Before closing everything up, I powered on the ventilation unit again to test if both the WiFi add-on module would power up and started broadcasting its own WiFi access point. Try connecting to the WiFi access point broadcasted by the add-on module. The SSID is nrg-itho-xxxx, where xxxx is a 4 character random string which differs per board, and the default password is password. Once connected, open a web browser and navigate to http://nrg-itho-xxxx (again, replace those trailing 4 characters matching the SSID’s), or http://192.168.4.1. You should see the web interface of the WiFi add-on module:

web ui remote control
Figure 9. WiFi add-on module web interface

 

On the 'Systems settings' page, set a new password for the add-on module’s web interface, API and file editor. On the 'MQTT' page, connect it to the MQTT broker on your Home Assistant by providing the IP address, username, and password. Also turn on 'Home Assistant MQTT Discovery' to make Home Assistant automatically discover the ventilation unit.

Once configured, close up the ventilation unit again.

Note
If you, like me, already had an RFT remote control add-on module attached, and re-attached it on top of the WiFi add-on module, you will need to pair it again. Go to the 'RF devices' page, click 'Learn/Leave mode', and then simultaneously press the 1 and 3 (or Low and High) buttons diagonally opposite of each other, on the remote control pane, to start pairing mode. Once paired, you should see the remote control listed on the 'RF remotes' table below on the same page.

The ventilation unit should now be controllable from Home Assistant:

fan presets
Figure 10. Itho CVE Fan entity in Home Assistant

 

From here you could for instance also add a fan card to your Home Assistant dashboard to manually control the ventilation speed:

If you have a humidity sensor in your bathroom and connected to Home Assistant (e.g. any of these), we can now automate the ventilation speed based on the humidity level in the bathroom. I decided to use the 🚿 Bathroom Humidity Exhaust Fan community blueprint by Blacky. I also needed to add 3 custom toggle helpers paired with an automation each, to set the Low, Medium, and High preset speeds based on the humidity level, and a derivative helper which the blueprint uses to determine whether to turn the fan on or off.

First, create 3 new toggle helpers, e.g. Bathroom Fan Low, Bathroom Fan Medium, and Bathroom Fan High. Then create a derivative helper, e.g. Bathroom Fan Humidity Derivative, with a 'Precision' of '2' decimals, a 'Time window' of '0:03:00' (3 minutes), and a 'Time unit' of 'Minutes'. Next, create the following 3 automations for Low, Medium, and High preset modes. Here is the YAML for the Low preset mode automation as an example:

alias: Bathroom Fan Low Automation
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_boolean.bathroom_fan_low
    to:
      - "on"
conditions: []
actions:
  - action: fan.set_preset_mode
    metadata: {}
    data:
      preset_mode: Low
    target:
      entity_id: fan.nrg_itho_e9b0_fan
mode: single

Repeat the same for the Medium and High preset modes, changing the alias, entity_id and preset_mode values accordingly.

Now, import the 🚿 Bathroom Humidity Exhaust Fan blueprint into your Home Assistant instance, and create a new automation from it. Please refer to the blueprint documentation for detailed instructions on how to set it up and tailoring it to your environment. Here’s how I configured mine, for reference:

alias: Automatic Bathroom Fan Control
description: ""
use_blueprint:
  path: Blackshome/bathroom-humidity-exhaust-fan.yaml
  input:
    trigger: sensor.bathroom_fan_humidity_derivative
    bathroom_humidity_sensor: sensor.bathroom_temperature_humidity
    fan_switch:
      entity_id: input_boolean.bathroom_fan_high
    include_max_humidity: maximum_humidity_enabled
    max_humidity: 80
    falling_humidity: -0.1
    include_fan_speed: fan_low_speed_enabled
    fan_speed_low:
      - input_boolean.bathroom_fan_medium
    fan_speed_off:
      - input_boolean.bathroom_fan_low
    month_winter_mode:
      - "12"
      - "1"
      - "2"
    winter_include_fan_speed: fan_low_speed_enabled
    winter_max_humidity: 85
    winter_include_max_humidity: maximum_humidity_enabled
    include_winter_mode: winter_mode_enabled

That should be all. Time to take a shower (and test if it works)!