[GUIDE] Controlling ITHO Daalderop fan with ESP8266 and CC1101

The Itho Daalderop fan can be remotely controlled using an ESP8266, CC1101 and appropriate software. Several posts are floating around on the Internet and on this forum on how to build a wireless remote. Many of these posts have a large number of questions / comments and it is not clear for a newcomer what to do. This guide attempts to give a newcomer clear instructions on what to do. Since this guide is in the “Community Guides” section you can edit it. So please feel free to update the information.

Please note that there seems to be various hardware versions of the Itho fan. This influences the functionality of your wireless remote.

== High level steps ==

  1. Buy the ESP8266 and CC1101
  2. Select a software package
  3. Wire the ESP8266 and CC1101 together
  4. Generate the software image
  5. Flash the software image
  6. Configure software
  7. Register the new remote with your Itho fan
  8. Integration with Home Assistant

== Buy the ESP8266 and CC1101 ==
Here are some links where to buy the ESP8266



DuPont cables

== Select a software package ==
Here are the various software packages available (in random order):

I am using a remote control made with the instructions in “Itho Ventilatie bedienen en monitoren met Home Assistant”

== Wire the ESP8266 and CC1101 together ==
Use the wiring scheme as described in your software package documentation. You will probably need DuPont cables for this.

If there is no description try the wiring scheme below (from GitHub - arjenhiemstra/IthoEcoFanRFT: Control the Itho Daalderop Eco Fan RFT using a microcontroller and CC1101 chip. The original code is fully tested using a STK500 and ATMega328P, this fork is modified for use with an Arduino or ESP8266. The following Itho commands are working: low, medium, full, 3 different timers, join and leave. The code will give you full remote control over the Itho Eco Fan RFT.):

Connections between the CC1101 and the ESP8266 or Arduino:

CC11xx pins    ESP pins Arduino pins  Description
*  1 - VCC        VCC      VCC           3v3
*  2 - GND        GND      GND           Ground
*  3 - MOSI       13=D7    Pin 11        Data input to CC11xx
*  4 - SCK        14=D5    Pin 13        Clock pin
*  5 - MISO/GDO1  12=D6    Pin 12        Data output from CC11xx / serial clock from CC11xx
*  6 - GDO2       04=D2    Pin  2        Programmable output
*  7 - GDO0       ?        Pin  ?        Programmable output
*  8 - CSN        15=D8    Pin 10        Chip select / (SPI_SS)

The wiring seems to be the same for all software packages…

== Generate the software image ==
Use the instructions supplied with your software package. If there are no instructions and the software is written in ESPHome see below for generic instructions.

Software written in ESPEasy: try to find a web site which supplies the binary software image.

ESPHome is used by some software packages to generate a software image
There are various ways to use ESPHome:

ESPHOME-Itho does not give any instructions how to generate the image. They point to the page ESPHome ITHO control where there is a how-to:


Not tested from HA yet, just from CLI. Assumption: you have a machine ready with the ESP8266 and C1101 connected to it.

That machine is also ready to go as instructed per Getting Started with the ESPHome Command Line — ESPHome (pip install)

  • Copy itho.yaml and c1101h to a directory of choice
  • Run esphome itho.yaml run and watch the magic happen
  • Go into HA, choose integrations and add your ITHO
  • If everything goes well, you’ll see sensor.fanspeed, sensor.fantimer and a couple of switch.fansend*** popping up.
  • Now include the contents of HA_configuration.yaml in your Home-Assitant configuration and reload HA
  • Enjoy!


== Flash the software image ==
Follow the instructions provided with your chosen software package. If there are no instructions you can follow the generic instructions below for ESPHOME based software

== Configure software ==
Follow the specific instructions given with the software package

== Register the remote ==
If your remote has a new ID, you will have to register the remote with the fan unit

  1. Place the remote near the fan unit
  2. Unplug the fan unit
  3. Wait at least 15 seconds
  4. Plug the fan unit in the mains
  5. Within two minutes perform in the remote software the “registration procedure”

If the fan unit accepts the remote you will hear the fan speed changing.

== Integration with Home Assistant ==
Follow the instructions of your chosen software package.


Itho FAN versions
There seems to be various Itho FAN versions (source ITHO Daalderop FAN RF remote with C1101 and ESP8266 - #114 by J0J0):

  1. built before 2012
  2. built after 2012

More info on:

Known Issues

  • There are various hardware versions of the Itho FAN which may not be compatible with the software you have chosen.

Hardware descriptions

Itho Fan

Background information


Perhaps you want to automatically switch on the Itho fan when your are showering in the bathroom.
I am using two humidity sensors and an automation for this.
Sensor 1 is in the bathroom. Sensor 2 is placed in another part of the house (eg. the bedroom). I use two sensors because the relative humidity varies during the 4 seasons of the year.

I am placing my automation below as inspiration. You have to tweak the code to adjust it to your specific setup

alias: bathroom automation Itho
description: >-
  Compare the humidity difference between a reference sensor (sensor humidity_01) and a bathroom sensor (sensor humidity_02).
  If the difference is greater than the value in 'input_number.itho_trigger_on' switch the Itho on
  If the difference is less than value in 'input_number.itho_trigger_off' switch the Itho off
  Modify the following for your setup:
    sensor.humidity_01 and sensor.humidity_02: report humidity
    helpers input_number.itho_trigger_on and input_number.itho_trigger_off: thresholds when to control the Itho fan
    helper input_boolean.automation_turned_on_itho shows me when the automation swith
    script.telegram_jarvislogger send me a message when something happens. Replace with your messaging solution
    of choice. You can re-use the formulas in the message text.
    mqtt.publish is used to send commands to the Itho fan. Replace with your Itho fan controls
  - platform: template
    id: bathroom-moist
    value_template: |-
      {{ ( states('input_boolean.automation_turned_on_itho') == 'off' )
        and (
          (states('sensor.humidity_01') | default(0) | float(0)) - 
          (states('sensor.humidity_02') | default(0) | float(0)) >= (states('input_number.itho_trigger_on') | default(9) | float(0))
  - platform: template
    id: bathroom-dry
    value_template: |-
      {{ ( states('input_boolean.automation_turned_on_itho') == 'on' )
        and (
        (states('sensor.humidity_01') | default(0) | float(0)) - 
        (states('sensor.humidity_02') | default(0) | float(0)) <= (states('input_number.itho_trigger_off') | default(11) | float(0))
    for: "00:02:00"
  - condition: not
      - condition: or
          - condition: state
            entity_id: sensor.humidity_01
            state: unavailable
          - condition: state
            entity_id: sensor.humidity_02
            state: unavailable
          - condition: state
            entity_id: input_number.itho_trigger_on
            state: unavailable
          - condition: state
            entity_id: input_number.itho_trigger_off
            state: unavailable
  - choose:
      - conditions:
          - condition: trigger
            id: bathroom-moist
          - service: script.telegram_jarvislogger
              message: >-
                Bathroom automation turns on itho fan at {{
                states('sensor.humidity_01') }}%, reference {{
                states('sensor.humidity_02') }}%, trigger on {{
                states('input_number.itho_trigger_on') }}
          - service: input_boolean.turn_on
              entity_id: input_boolean.automation_turned_on_itho
            data: {}
          - service: mqtt.publish
              topic: home/itho/command
              payload: high
      - conditions:
          - condition: trigger
            id: bathroom-dry
          - service: input_boolean.turn_off
              entity_id: input_boolean.automation_turned_on_itho
            data: {}
          - choose:
              - conditions:
                  - condition: time
                    after: "17:00"
                    before: "19:00"
                  - service: script.telegram_jarvislogger
                      message: >-
                        Bathroom automation: bathroom is dry during 'cooking
                        time'. Bathroom humidity {{
                        states('sensor.humidity_01') }}%, reference
                        {{ states('sensor.humidity_02') }}%, trigger
                        off {{ states('input_number.itho_trigger_off') }}
              - service: mqtt.publish
                  topic: home/itho/command
                  payload: medium
              - service: script.telegram_jarvislogger
                  message: >-
                    Bathroom automation - bathroom is dry at {{
                    states('sensor.humidity_01') }}%, turning off
                    Itho fan. Reference {{
                    states('sensor.humidity_02') }}%, trigger off {{
                    states('input_number.itho_trigger_off') }}
    default: []
mode: single

  • I use Zigbee Aqara temperature sensors which occasionally drop out of my Zigbee network. To prevent my automation from doing weird things there is a “condition” block which checks if all used sensors are available
  • the trigger ‘bathroom-dry’ contains a ‘for:’ statement to ensure that the humidity difference is low enough for at least 2 minutes. This ensures that the fan will not start to jitter (turn on and off all the time)
  • between 17:00 and 19:00 the fan is not automatically turned off. Most of the time I am cooking during that time and I want to leave the Itho fan turned on
  • I have another automation which turns off the Itho fan to ‘low’ each day at 2:00. This is handy because the fan will be set to a known state each day. And when I am on holiday the fan will be running in the ‘low’ setting
1 Like

Hi All,

When I compile with ESPhome i get this error:

 ets Jan  8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 3460, room 16 
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4 
tail 4
chksum 0xc9
csum 0xc9
[I][logger:258]: Log initialized
[C][ota:469]: There have been 2 suspected unsuccessful boot attempts.
[I][app:029]: Running through setup()...
[D][switch:013]: 'FanSendLow' Turning ON.

When disable the ‘FanSendLow’ part its stuck on setup part.
Im using this information:

Hi there,
I’m using the ESPeasy solution for over 4 years now and works perfectly. However, my Itho box died on me and got a new one. This new version has an automatic state (measures humidity) and a new remote to come with it to trigger the automatic state (I did not buy the new remote).
Does anyone know more about this new feature and the software for the ESP?

Just recently jumped on the bandwagon but this is exactly a use-case I have in mind when I started this journey. Great to see it’s a somewhat realistic goal. I have ordered the hardware and would use two Netatmo humidity readings for this. Inspirational, thanks!

1 Like

@mchangsp thank you for your tutorial. just migrated my epseasy fan controller to esphome. i just have a small thing. my esphome device is not displayed on the main esphome webpage within home assistant. i can only access it when i go to the sidebar, select Settings > Devices & Services> esphome etc . Does anybody know how i can also add it to the main esphome homepage? so i can easy access the logs and update the controller.

1 Like

This is my first ESPhome project, since I prefer Zigbee to WiFi, but until now it is not succesful. I used a NodeMCU V3 board as the ESP. I managed to get this project working at the ESPhome level (ESP device is present in home assistant and reacting to commands AFAICT), but it doesn’t seem to do anything to my ventilation unit. I did a few attempts at joining the remote to the unit (unplug, wait, replug, toggle ‘Join’ switch on the ESP device interface), but no response. I triple checked the wiring from the ESP to the CC1101 but that seems to be all good.
Any suggestions?