[GUIDE] Controlling ITHO Daalderop fan with ESP8266 and CC1101

I just set this up for my home, and thought I’d share my config for anyone else who comes across it.
I have the ITHO CVE ECO RFT SE, which supports 3 modes - low, medium, and high. It also has the timer function.

I followed the guide in Dutch to install using ESPEASY on my ESP32, and connect it to homeassistant via mqtt.
Unfortunately I struggled a lot with the code that in the google doc, I think there might be some errors there. It also seems somewhat outdated.
In the end I settled on the following:

mqtt:
  fan:
    unique_id: itho-daaderop-cve-eco-rft-se
    device:
      name: "central ventilation"
      model: "ITHO daalderop Ecofan"
      model_id: "CVE ECO RFT SE"
      identifiers: "545-5026-001"
      configuration_url: "http://192.168.1.145"
    name: Ecofan
    availability:
      - topic: "ITHO-ventilation/status/LWT"
        payload_available: "Connected"
        payload_not_available: "Connection Lost"
    command_topic: "ITHO-ventilation/Fan/cmd"
    state_topic: "ITHO-ventilation/Fan/State"
    state_value_template: "{% if value|float==0 %}State 0{% endif %}{% if value|float >0 %}State 1{% endif %}"
    payload_on: "State 1"
    payload_off: "State 1"
    optimistic: true
    preset_modes:
      - "low"
      - "medium"
      - "high"
      - "timer"
    preset_mode_command_topic: "ITHO-ventilation/Fan/cmd"
    preset_mode_command_template: >
      {% if value == 'low' %}
      State 1
      {% elif value == 'medium' %}
      State 2
      {% elif value == 'high' %}
      State 3
      {% elif value == 'timer' %}
      State 13
      {% else %}
      State 1
      {% endif %}
    preset_mode_state_topic: "ITHO-ventilation/Fan/State"
    preset_mode_value_template: >
      {% if value_json == 0 %}
      low
      {% elif value_json == 1 %}
      low
      {% elif value_json == 2 %}
      medium
      {% elif value_json == 3 %}
      high
      {% else %}
      timer
      {% endif %}


  sensor:
    - name: "timer"
      unique_id: itho-daaderop-cve-eco-rft-se-timer
      device:
        identifiers: "545-5026-001"
      device_class: "duration"
      state_class: "total"
      unit_of_measurement: "s"
      suggested_display_precision: 0
      icon: mdi:timer
      state_topic: "ITHO-ventilation/Fan/Timer"
      value_template: "{{value}}"

    - name: "speed"
      unique_id: itho-daaderop-cve-eco-rft-se-speed
      device:
        identifiers: "545-5026-001"
      icon: mdi:transfer-right
      device_class: enum
      options: ["low", "medium", "high", "high (timer)", "unknown"]
      state_topic: "ITHO-ventilation/Fan/State"
      value_template: >
        {% if value|float==1 %}
          low
        {% elif value|float==2 %}
          medium
        {% elif value|float==3 %}
          high
        {% elif value|float>=11 %}
          high (timer)
        {% else %}
          unknown
        {% endif %}


  button:
    - name: "pairing"
      unique_id: itho-daaderop-cve-eco-rft-se-pairing
      device:
        identifiers: "545-5026-001"
      enabled_by_default: false
      entity_category: "config"
      command_topic: "ITHO-ventilation/Fan/cmd"
      payload_press: "State 1111"
      availability:
        - topic: "ITHO-ventilation/status/LWT"
          payload_available: "Connected"
          payload_not_available: "Connection Lost"

    - name: "unpairing"
      unique_id: itho-daaderop-cve-eco-rft-se-unpairing
      device:
        identifiers: "545-5026-001"
      enabled_by_default: false
      entity_category: "config"
      command_topic: "ITHO-ventilation/Fan/cmd"
      payload_press: "State 9999"
      availability:
        - topic: "ITHO-ventilation/status/LWT"
          payload_available: "Connected"
          payload_not_available: "Connection Lost"

This is how it looks in HA:

There’s a few changes there, but the most significant ones are:

  • my fan can’t be turned off (State 0), only set to “low” so I changed the state payload to reflect this
  • I updated the presets to match my possible states
  • I fixed the preset mode value template, which seemed to be wrong and caused errors
  • I added buttons for pairing and unpairing
  • I added device config so that everything is grouped together under a single device

Hope this is helpful for someone!