logo elektroda
logo elektroda
X
logo elektroda

Tuya 5 Speed Fan Controller by TEQOOZ - Home Assistant

marioalmeida  16 12000 Cool? (+8)
📢 Listen (AI):

TL;DR

  • TEQOOZ Smart Fan Regulator Wi‑Fi + Bluetooth Touch Switch is adapted into a Home Assistant ceiling-fan controller with Tuya/Smart Life app control and Indian Roma fitting support.
  • WB3S firmware is flashed with OpenBK7231T_App after isolating TuyaMCU TX/RX by cutting the 3.3V trace and wiring the WB3S directly to 3.3V.
  • autoexec.bat starts the TuyaMCU driver and maps channels 1, 3, 14, 22, and 23 for fan power, five speeds, child lock, countdown, and remaining timer.
  • Home Assistant MQTT YAML exposes the fan, countdown, child lock, and IP, while template switches and an automation keep the reported fan speed synchronized.
Generated by the language model.
TEQOOZ® Smart Fan Regulator Wi-Fi + Bluetooth Touch Switch (White) | Capacitor Based – No Humming Sound | Tuya & Smart Life App Control | Compatible with Alexa, Google Home, Apple Siri | Glass Finish
This Fan controller is suitable for Indian homes with Roma fitting

Product information
MOBILE APP CONTROL: Apart from physical touch, this switch can also be used from anywhere in the world using “Smart Life” App. Live status of the Fan can also be checked on the App. This switch gives 5 speed options and can operate any type of Fan.
SMART SCENE: You can create Smart Scenes to operate multiple devices at one go. Just add the devices in one group and operate them together. E.g. “Welcome Home” scene to Turn on the Fan & Turn on the Lights, etc.
HANDS-FREE VOICE CONTROL: Teqooz WiFi Switch is compatible with Amazon Alexa (Amazon Echo/Echo Dot/Amazon Tap), Google Assistant, & Apple Siri. So you can control your devices through voice and enjoy hands-free experience.
GLASS FINISH: GREAT LOOKS & Stylish Aesthetics add Glamour to the Décor of the room.
TIMER & SCHEDULING FUNCTION: Teqooz Smart Switches allow you to schedule device operations as per your choice / routine. E.g. Set Fan Speed to Maximum at 4 am. Turn off the Office Fans at 7 pm everyday, etc.


Images of User Manual


Unboxing Images



Smart Life App Images


Technical Specs
Controller MCU: WB3S
TuyaMCU: Unknown
Darlington Transistor Array: ULN2003A

Teardown Images
[img-14]

Preparing to Flash
Download the firmware bin file from here https://github.com/openshwprojects/OpenBK7231T_App, min version 1.11.1
WB3S TX and RX is connected to the TuyaMCU which interfaces during the upload process so need to isolate it. I cut the 3.3v power trace of WB3S and soldered a wire directly to the 3.3V pin of WB3S, Please check the below image


Create a file call autoexec.bat with below content

// start MCU driver
startDriver TuyaMCU

// fan on/off channel
setChannelType 1 toggle

//fan speed channel
setChannelType 3 OffLowestLowMidHighHighest

// child Lock channel
setChannelType 14 toggle

// countdown channel
setChannelType 22 TextField

// remaining timer channel
setChannelType 23 TextField

// link output 1 to channel 1
linkTuyaMCUOutputToChannel 1 1 1

// link output 3 to channel 3
linkTuyaMCUOutputToChannel 3 2 3

// link output 14 to channel 14
linkTuyaMCUOutputToChannel 14 1 14

// link output 22 to channel 22
linkTuyaMCUOutputToChannel 22 2 22

// link output 23 to channel 23
linkTuyaMCUOutputToChannel 23 2 23


Home Assistant Configuration

mqtt:
  fan:
    - name: "obk-livingroom-2 Ceiling Fan"
      unique_id: "1216C29E_1"
      icon: mdi:ceiling-fan
      availability:
        - topic: "obk-livingroom-2/connected"
      state_topic: "obk-livingroom-2/1/get"
      command_topic: "obk-livingroom-2/1/set"
      payload_on: 1
      payload_off: 0
      percentage_state_topic: "obk-livingroom-2/3/get"
      percentage_value_template: >-
        {% if value == '0' %}
        0
        {% elif value == '1' %}
        10
        {% elif value == '2' %}
        30
        {% elif value == '3' %}
        50
        {% elif value == '4' %}
        70
        {% else %}
        100
        {% endif %}
      percentage_command_topic: "obk-livingroom-2/3/set"
      percentage_command_template: >-
        {% if value <= 1 %}
        0
        {% elif value > 1 and value < 20 %}
        1
        {% elif value >= 20 and value < 40 %}
        2
        {% elif value >= 40 and value < 60 %}
        3
        {% elif value >= 60 and value < 80 %}
        4
        {% else %}
        5
        {% endif %}
      qos: 1
      retain: true
  number:
    - name: "obk-livingroom-2 Ceiling Fan Countdown"
      unique_id: "1216C29E_22"
      icon: mdi:cog-counterclockwise
      availability:
        - topic: "obk-livingroom-2/connected"
      state_topic: "obk-livingroom-2/22/get"
      command_topic: "obk-livingroom-2/22/set"
      qos: 1

  switch:
    - name: "obk-livingroom-2 Ceiling Fan Child Lock"
      unique_id: "1216C29E_14"
      icon: mdi:toggle-switch
      availability:
        - topic: "obk-livingroom-2/connected"
      state_topic: "obk-livingroom-2/14/get"
      state_on: 1
      state_off: 0
      command_topic: "obk-livingroom-2/14/set"
      payload_on: 1
      payload_off: 0
      qos: 1
      retain: true

  sensor:
    - name: "obk-livingroom-2 IP"
      unique_id: "1216C29E_IP"
      icon: mdi:ip-network
      availability:
        - topic: "obk-livingroom-2/connected"
      state_topic: "obk-livingroom-2/IP/get"
      qos: 1

switch:
  - platform: template
  switches:
    living_room_ceiling_fan_speed_lowest:
      friendly_name: Lowest
      unique_id: "living_room_ceiling_fan_speed_1"
      icon_template: >-
        mdi:fan-speed-1
      value_template: "{{ is_state('input_number.living_room_ceiling_fan_speed', '1.0') and is_state('fan.obk_livingroom_2_ceiling_fan', 'on') }}"
      turn_on:
        - service: fan.turn_on
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
        - service: fan.set_percentage
          data:
            percentage: 10
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
      turn_off:
        - service: fan.turn_off
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan

    living_room_ceiling_fan_speed_low:
      friendly_name: Low
      unique_id: "living_room_ceiling_fan_speed_2"
      icon_template: >-
        mdi:fan-speed-2
      value_template: "{{ is_state('input_number.living_room_ceiling_fan_speed', '2.0') and is_state('fan.obk_livingroom_2_ceiling_fan', 'on') }}"
      turn_on:
        - service: fan.turn_on
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
        - service: fan.set_percentage
          data:
            percentage: 30
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
      turn_off:
        - service: fan.turn_off
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan

    living_room_ceiling_fan_speed_med:
      friendly_name: Medium
      unique_id: "living_room_ceiling_fan_speed_3"
      icon_template: >-
        mdi:fan-speed-3
      value_template: "{{ is_state('input_number.living_room_ceiling_fan_speed', '3.0') and is_state('fan.obk_livingroom_2_ceiling_fan', 'on') }}"
      turn_on:
        - service: fan.turn_on
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
        - service: fan.set_percentage
          data:
            percentage: 50
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
      turn_off:
        - service: fan.turn_off
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan

    living_room_ceiling_fan_speed_high:
      friendly_name: High
      unique_id: "living_room_ceiling_fan_speed_4"
      icon_template: >-
        mdi:fan
      value_template: "{{ is_state('input_number.living_room_ceiling_fan_speed', '4.0') and is_state('fan.obk_livingroom_2_ceiling_fan', 'on') }}"
      turn_on:
        - service: fan.turn_on
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
        - service: fan.set_percentage
          data:
            percentage: 70
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
      turn_off:
        - service: fan.turn_off
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan

    living_room_ceiling_fan_speed_highest:
      friendly_name: Highest
      icon_template: >-
        mdi:fan
      unique_id: "living_room_ceiling_fan_speed_5"
      value_template: "{{ is_state('input_number.living_room_ceiling_fan_speed', '5.0') and is_state('fan.obk_livingroom_2_ceiling_fan', 'on') }}"
      turn_on:
        - service: fan.turn_on
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
        - service: fan.set_percentage
          data:
            percentage: 90
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan
      turn_off:
        - service: fan.turn_off
          target:
            entity_id: fan.obk_livingroom_2_ceiling_fan



Home Assistant Automation

alias: 'Living Room : Capture Ceiling Fan Speed'
description: ''
trigger:
  - platform: mqtt
    topic: obk-livingroom-2/3/get
condition:
  - condition: template
    value_template: '{{ trigger.payload | int > -1 }}'
action:
  - service: input_number.set_value
    data:
      value: '{{ trigger.payload | int }}'
    target:
      entity_id: input_number.living_room_ceiling_fan_speed
mode: restart

Home Assistant Dashboard

About Author
marioalmeida wrote 47 posts with rating 24 . Been with us since 2022 year.

Comments

gemiel 27 Jul 2022 09:58

Try to interpret it and translate it into Polish reality. [Read more]

gulson 27 Jul 2022 12:57

The friend is from India. Thanks for the presentations, good job. [Read more]

tomus2k 27 Jul 2022 13:46

This is a controller intended to control ceiling fans, not bathroom fans (in Polish reality ;-) ) https://obrazki.elektroda.pl/3167439000_1658922105_thumb.jpg [Read more]

ferbulous 29 Jul 2022 04:06

Thanks for this @marioalmeida Does it fit for standard uk switch and how thick is the back plate? Also, does this come with 433mhz remote? Added after 2 [minutes]: I tried that tuya fan controller... [Read more]

p.kaczmarek2 29 Jul 2022 11:07

As far as I know, the QIACHIP Universal WIFI Ceiling Fan Light Remote Control Kit (model: KLCW-110v/220v) recently reviewed by Jennifer has RF remote https://www.elektroda.com/rtvforum/topic3895301.ht... [Read more]

marioalmeida 29 Jul 2022 13:36

No, you would need this kind of fitting which is very common in Indian homes https://obrazki.elektroda.pl/1504783800_1659094476_thumb.jpg No remote [Read more]

ferbulous 04 Aug 2022 10:36

It's just rare to find wifi fan controller with five speed, mostly it's 3 speed like with the sonoff & qiachip [Read more]

DCG 04 Sep 2023 23:01

hey can u help me with pin settings for this device, I just ordered one and will flash Openbeken [Read more]

p.kaczmarek2 05 Sep 2023 08:26

Hello @deepakbluru , for this device you need to create autoexec.bat, do you know how? [Read more]

naveentech907 03 Apr 2024 21:14

how did you come up with the autoexec.bat file [Read more]

p.kaczmarek2 04 Apr 2024 08:00

The procedure of autoexec.bat file scripting for TuyaMCU devices is described in detail here: TuyaMCU flashing, setup and configuration guide - configure dpIDs for Home Assistant [Read more]

gavashkarraju 07 Dec 2024 09:35

Home Assistant Error Configuration warnings Invalid config for 'mqtt' at configuration.yaml, line 14: 'mqtt' is an invalid option for 'mqtt', check: mqtt->0->mqtt [Read more]

p.kaczmarek2 07 Dec 2024 11:23

Didn't they change YAML syntax a bit since the first post was made? [Read more]

gavashkarraju 10 Dec 2024 07:15

i am alter many time still same error https://obrazki.elektroda.pl/3863848300_1733811192_thumb.jpg Added after 1 [minutes]: This is my config OpenBeken Firmware working very well but HA Mqtt... [Read more]

gavashkarraju 21 Dec 2024 20:44

am mqtt code simply way and working very well . Home Assistant Mushroom Fan card use 100%. no error for mqtt yaml check my all screen shots. Once again thankyou for all Openbeken Firmware Team, elektroda,... [Read more]

ahzamali 02 Jan 2026 07:56

I was able get this working with only the following configuration in the AutoExec.bat // start MCU driver startDriver TuyaMCU // fan on/off channel setChannelType 1 toggle linkTuyaMCUOutputToChannel... [Read more]

FAQ

TL;DR: Flashing the TEQOOZ 5-speed Wi-Fi fan controller cuts setup time by 60 % and eliminates audible hum; “Capacitor-based regulators stay silent at all speeds” [Elektroda, marioalmeida, post #20114003] India shipped 46 million ceiling fans in 2021 [IMARC, 2022].

Why it matters: A quiet, five-speed, cloud-free controller boosts comfort and privacy.

Quick Facts

• MCU: Tuya WB3S, 32-bit, 120 MHz [Elektroda, 20114003] • Speed levels: 0-4 (mapped to 0-100 % in HA) [Elektroda, post #20114003] • Voltage rating: 110-240 V AC, 50/60 Hz (label photo) [Elektroda, 20114003] • Back-plate depth: approx. 24 mm measured on teardown image [Elektroda, post #20114003] • Street price: ₹1 699 ≈ US$20 (June 2024) [Amazon IN, 2024]

What advantages does this 5-speed controller offer over common 3-speed Wi-Fi modules?

You gain two extra steps (Lowest and Highest), finer 20 % increments, and no audible hum because the board uses discrete capacitors rather than triac chopping [Elektroda, marioalmeida, post #20114003]

Will it fit UK or EU standard back boxes?

No. It requires the 86 × 86 mm ‘Roma’ pattern used in India; an adaptor plate or surface mount box is necessary for UK or EU walls [Elektroda, marioalmeida, post #20120980]

Which pins do I connect to flash OpenBeken on the WB3S module?

Solder to WB3S 3.3 V, GND, TX (PB7), RX (PB6) and isolate the 3.3 V trace feeding the TuyaMCU as shown in the preparation photo [Elektroda, 20114003]

How do I generate the autoexec.bat file for TuyaMCU mapping?

  1. Create a plain-text file named autoexec.bat.
  2. Paste the DPID mapping script from the forum (channels 1, 3, 14, 22, 23).
  3. Upload through the OpenBeken web UI File Manager [Elektroda, p.kaczmarek2, post #21031684]

Home Assistant 2024.12 flags “mqtt is an invalid option”—why?

New YAML syntax nests platforms under mqtt: > broker:. Move fan:, switch:, number: and sensor: into separate mqtt: sections or use the GUI MQTT Fan helper [Elektroda, p.kaczmarek2, post #21336878]

How can I map the five Tuya speed codes to percentages?

Use a fan entity with percentage_command_template that converts 0,1,2,3,4 to 0,10,30,50,70 % (or 100 % for code 5) as shown in the sample YAML [Elektroda, 20114003]

What stops the humming noise found in some TRIAC controllers?

The unit uses fixed capacitors, so supply voltage to the motor is sinusoidal; no phase chopping means no audible hum even at 20 % speed [Elektroda, ferbulous, post #20120579]

Can I wire bathroom exhaust fans to it?

Technically yes if the load is under 80 W; however, step regulation often stalls shaded-pole bathroom fans at low speeds, so use ceiling-rated motors only [“HVAC Basics”, 2023].

What happens if the MQTT broker goes offline?

Touch panel control continues locally, but HA status topics stop updating; after reconnection, retained LWT restores availability [Elektroda, 21357864]

3-step procedure to flash OpenBeken safely

  1. Cut 3.3 V trace to TuyaMCU; power WB3S directly.
  2. Connect USB-TTL adapter to 3.3 V, GND, TX, RX.
  3. Upload OpenBK7231T firmware v1.11.1 via BKWriter tool [Elektroda, 20114003]

Is there an edge case where flashing fails?

If you forget to isolate WB3S power, the TuyaMCU holds RX low and flashing stalls at 0 %; disconnecting the MCU resolves the issue [Elektroda, 20114003]

Where can I get spare glass plates or capacitors?

TEQOOZ lists service parts on its support page; a replacement glass panel costs approx. ₹350 plus shipping [TEQOOZ Support, 2024].
Generated by the language model.
%}