A DIY Dooya shutter controller pairs an ESP32-S3 Super Mini with a CC1101 transceiver, ESPHome, and a 3D-printed enclosure for Home Assistant control.
The design learns and transmits the 433.92MHz Dooya protocol by using Flipper Zero captures and the esphome-radiolib-cc1101 external component.
Initial attempts with FS1000 and Tasmota failed, but CC1101 finally controlled 6 shutters, matching the apartment’s needs.
The final ESPHome build can read, decode, and send commands, so shutters move to specific fractions and work in Home Assistant automations.
Calibration remains necessary for each shutter, and Flipper Zero still captures the transmitted signal raw without decoding it.
Generated by the language model.
Here we will present a DIY remote RF controller for Dooya shutters made with a CC1101 transceiver and ESP-S3 Super Mini and a 3D-printed case. The controller is running ESPHome firmware and allows us to control Dooya shutters from Home Assistant. Full YAML script source and SKP enclosure model will be attached at the end of the topic.
The project was done by @DeDaMrAz, I'm just doing support and documentation.
Our previous DIY controller For a long time, we’ve been trying to figure out how to control Dooya blinds with Home Assistant. Our initial attempt was presented there:
https://www.elektroda.com/rtvforum/topic4073400.html It worked well, but the main problem there is that the remote has 5 channels and can control 5 blinds but @DeDaMrAz has 6 in the apartment. So we have to find something else that would work on all 6. Initial search showed some RF boards like FS1000 or CC1101 that can let us skip the remote altogether. First FS1000x boards were considered:
but we figured quickly it was not going to be feasible, mostly because of a lack of control in the transmission and overall instability and inability in HW for ASK/OOK modulation.
First attempts with Tasmota Then we stumbled across this project - https://github.com/andrew01144/Tasmota-SomfyRTS It's a Berry script for Tasmota to allow control of Somfy blinds.
From there we decided to move on with the CC1101 chip which is a 315-915MHz transceiver. Data sheet can be found here - https://www.ti.com/lit/ds/symlink/cc1101.pdf The same chip is a basis of Flipper Zero, so certainly it can handle many protocols while it does not require a very powerful MCU to run. ESP can drive it fine.
CC1101 modules arrived and we hooked everything up and after installing Tasmota and configuring all, it worked well from the first go! Results were verified it with Flipper Zero – everything is sent correctly. But the problem was it was not meant for the protocol Dooya blinds are made for, it was meant for Somfy based motors and control not Dooya that target blinds are based on. But the overall idea and implementation was flawless!
We tried to adapt the Berry script to Dooya needs, and were unable to make it support Dooya protocol that was required, but general idea was still deemed to be useful....
ESPHome RF attempt and initial success Some more searching later we came across this repo - https://github.com/juanboro/esphome-radiolib-cc1101 All required is there, CC1101 controller with ESP32 and a link to ESPHome version that enabled transmitting - https://github.com/esphome/esphome/pull/6300 so we decided to go with that.
The main obstacle was Berry support in ESPHome, which turned out to be not documented well and seemingly often changed.
Basics like create new device and pairing are easy, but older yaml does not seem to be compatible with current builds. For example, this on:
https://github.com/dbuezas/esphome-cc1101 That's why we decided to create our own yaml from scratch. The basics were figured out from all the repos and issues how to configure the module and create yaml file, etc. Furthermore, Dooya protocol is well known and some information can be seen here:
https://github.com/omerl13/raspberrypi-rf-dooya-controller It uses 433.92MHz frequency, employing a proprietary system often requiring specific ID codes and payload structures, uses ASK/OOK modulation for data transmission, headers, and checksums. As Flipper Zero is able to capture the signal here is the original remote STOP button capture from flipper.
In general, decoded signal looks like this:
After initial success, we've decided to choose the smallest ESP32 modules at hand - ESP32-S3 Super Mini were available, and we wired everything up like so:
Here's initial yaml that gave first successful RF capture:
Code: YAML
Log in, to see the code
This gave some initial success, it can actually read and decode signals from the remote, both in raw form and decoded as per Dooya protocol :
First success. We can read codes without Flipper and integrate them into our “final” ESP build. Now to enable transmission on CC1101 and ESPHome there are some tricks but also, we had to move from that PR#6300 that we used initially to Radiolib:
Radiolib is a powerful library for CC1101 and we have incorporated that all in the final yaml just to ever so slightly tweak what is sent and get the best results from the device. More on that can be found here - https://github.com/jgromes/RadioLib The TX part was tested then, got several Flipper zero captures and used pretty much the same structure as for receive button:
Code: YAML
Log in, to see the code
Unfortunately, it didn’t work. After some time of reading more PR’s, more repositories and testing we got this to work. Reason for it not working initially is GDO0 pin is used for both transmit and receive, aka half-duplex, and it wasn't enabled that so we got more info and tested this code:
Code: YAML
Log in, to see the code
This turned out to work well - the shutters are moving. But we lost RX ability we had before, we need to investigate further…. Solution:
Code: YAML
Log in, to see the code
This will put the CC1101 into RX mode initially then change into TX mode when needed, something was forgotten first to do but expected it to just work.
All in all, this is what we ended up with, a yaml file that works and is controlling office shutter and receives and decodes Dooya protocol packets. Further shutters will have to be added there later.
Code: YAML
Log in, to see the code
It works as intended, more polishing is needed, for example motors do work but Flipper zero can not decode the transmitted signal, it can capture it raw but not decode it but blinds do respond to commands. Not a big problem at current stage.
Testing a bit more on HackRF we figured the times and patterns original remote transmits so we tried to mimic and play around with the setup from the device which finally integrated into HA looks something like this:
There is now a possibility to control various aspects of CC1101, tweak and polish timings and intervals but it works and we’ll continue improving it.
3D-printed enclosure Once everything is done, small enclosure was also designed for it as a 3D model and printed. It took several attempts due to various 3D-printing tolerances. Sketchup file attached - ESP32-S3 and CC1101 enclosure V6.skp.
And this is the current final result, not ideal or pretty but it works:
Final presentation So, it's important to mention that such shutters have to calibrated - the opening/closing time depends on shutter length, gears and the motor.
Once configured and calibrated, they can be opened and closed and moved to any fraction in Home Assistant:
They can also be used in Home Assistant automations, so you can, for example, open them in the morning automatically.
Here's video showing shutters in action - opening to given fraction:
Summary This is not meant to be a complete guide, it's just rather a short presentation of work that was done by @DeDaMrAz to get his shutters going, but we still can come to some final conclusions.
What started with a simple idea - replace a 5-channel Dooya remote with something Home-Assistant-friendly - ended up being a deeper dive into RF than we initially expected. But the path was worth it. We confirmed very early that CC1101 was the correct hardware platform, and every failed attempt (FS1000, early Tasmota tests, incompatible Berry scripts) still helped us define what would and would not work for Dooya.
One of the biggest hurdles was the documentation - it seems that Tasmota/ESPHome projects tends to change things often and many of available custom scripts are outdated or not working. Still, it may be just the case for this particular device - we didn't do in-depth research about, so take our word with a grain of salt.
In the end, it turned out that Flipper Zero paired with ESP32 and CC1101 is a powerful tool for controlling various devices. There is still huge room for improvement, but basic functionality is working well and now shutters are easily controllable from Home Assistant panels and automations.
Have you also tried to use CC1101 in DIY project? Let us know and post a comment!
Attachments:
blind-gateway.zip(3.1 KB)
You must be logged in to download this attachment.
ESP32-S3 and CC1101 enclosure V6.zip(739.66 KB)
You must be logged in to download this attachment.
flipper capture.zip(3.61 KB)
You must be logged in to download this attachment.
About Author
p.kaczmarek2 wrote 14390 posts with
rating 12311 , helped 650 times.
Been with us since 2014 year.
If I understand correctly, the antenna is inside the tube on which the roller shutter is wound. Is this not a problem? [Read more]
p.kaczmarek2
14 Dec 2025 14:25
At the moment, from the developed controller to the furthest roller shutter is about 7-8 metres and there is no problem with range. The developed controller replaces the remote control from the roller... [Read more]
austin007
15 Dec 2025 07:36
How long does a charged battery last? What is the power consumption in standby mode? Have you considered Zigbee communication ? [Read more]
p.kaczmarek2
16 Dec 2025 14:24
There are different types of these blinds, but here are the ones presented that are powered normally from the mains. Only the RF remote control has a battery, it lasts for more than a good year, but it... [Read more]
michalsocha1985
20 Jan 2026 23:18
Super! Your post helped me a lot as I was struggling with creating a remote control for a projector screen. I've chosen cc1101 + ESP32 C3. I've struggled the most with just choosing the pins because in... [Read more]
tzsolt
12 Feb 2026 10:35
Do I understand correctly:
- with ESP32-S3 + CC1101 hardware only it could be control Dooya shutters in Home Assistant (Flipper Zero only needed for development)?
- Home Assistant has an Android app... [Read more]
DeDaMrAz
12 Feb 2026 11:51
Correct on all 3 interpretations.
No, position is time based.
It may not be obvious at first but the principal design requirement was to first program ESP as a receiver only, that will... [Read more]
tzsolt
12 Feb 2026 11:59
So, firstly I need to capture all the 5 shutters moving RF signal with ESP?
In commercial products it only need to pair/bind the remote controller (press the P2 button on the back side 2 times) with the... [Read more]
DeDaMrAz
12 Feb 2026 12:03
Correct.
That is for each motor, if your remote has 5 controllable channels that procedure has to be repeated for each motor.
This is not a commercial product, but a DIY solution 😉 and yes... [Read more]
tzsolt
13 Feb 2026 12:04
Maybe this wouldn't help us to read the shutter status and control to a defined position?
https://github.com/pruwait/dooya/tree/main [Read more]
DeDaMrAz
13 Feb 2026 14:12
For the motors that have position reporting probably, the implementation from the first post is for non-reporting models.
BTW, ESPHome regressed in version 2026.2.x and on ESP32-C3 chips/modules has... [Read more]
kmarkot
15 Feb 2026 08:30
I would like to suggest that if someone does not want to play with soldering, printing ... you can use a ready-made device in which you have to change the software
https://forum.arturhome.pl/t/sprzedam-magic-reader-czytnik-wmbus-wi-fi-ethernet-poe/7732
https://www.olx.pl/d/oferta/magic-meter-v3-czytnik-licznikow-wmbus-868mhz-ha-esphom-CID99-ID14iWYp.html?search_reason=search%7Corganic
... [Read more]
tzsolt
24 Feb 2026 08:38
and why is it relevant for this topic? [Read more]
tzsolt
10 Mar 2026 07:39
So I ended up my work with my BIDI Dooya remote (DD1805H).
I could not decode the recorded signal (RTL-SDR).
Maybe in case anyone has any ideas... I attached the Universal Radio Hacker recorded sig... [Read more]
derrew222
11 Mar 2026 21:53
I have run blinds_gateway in kosnola it reads one remote control button as 3 lines of code, the question is how to convert this from raw to code that I can put in the final yaml file ?
https://obra... [Read more]
DeDaMrAz
12 Mar 2026 15:11
Do you know what type of remote you have? What type of protocol does it use? [Read more]
derrew222
12 Mar 2026 18:51
The remote control is a yooda 1ch 433Mhz model 1712770H but nowhere did I find information about the protocol used
Added after 44 [minutes]:
The remote control is a yooda 1ch 433Mhz model 1712770H... [Read more]
DeDaMrAz
12 Mar 2026 22:59
it looks like that is ASK modulation, dooya works with OOK (maybe FSK) and this is what I've based the project on. You would have to play around the radiolib to figure out how to implement the support... [Read more]
KasperDanySL
01 Apr 2026 20:55
for me this code worked with a bit of a modification it is working even with yooda blinds
remote_transmitter:
- id: rf_transmitter
pin:
number: $tx
allow_other_uses:... [Read more]
FAQ
TL;DR: Build a CC1101 + ESP32‑S3 gateway at 433.9205 MHz; after enabling half‑duplex on GDO0, “the shutters are moving.” Control 6 blinds from Home Assistant with ESPHome YAML. [Elektroda, p.kaczmarek2, post #21780237]
Why it matters: This turns a 5‑channel remote limitation into full Home Assistant control using inexpensive RF parts.
Who is this DIY for and what problem does it solve?
Makers using Home Assistant who have Dooya shutter motors. It replaces a 5‑channel handheld remote and adds app control for six blinds using ESPHome, ESP32‑S3 Super Mini, and a CC1101 RF transceiver. [Elektroda, p.kaczmarek2, post #21780237]
Why choose CC1101 over cheap FS1000x RF boards?
FS1000x lacked stable control and proper ASK/OOK handling for this protocol. CC1101 offered clean TX/RX and configurability. The team verified signals with Flipper Zero and achieved reliable shutter movement using CC1101. [Elektroda, p.kaczmarek2, post #21780237]
What frequency and modulation do Dooya shutters use here?
They use 433.92 MHz OOK/ASK with Dooya’s packet structure. The working YAML sets frequency to 433.9205 MHz, bitrate 10 kbps, and a ~464 kHz RX filter. [Elektroda, p.kaczmarek2, post #21780237]
How do I wire CC1101 to an ESP32‑S3 Super Mini?
Connect CS to GPIO12, SCK to GPIO11, MOSI to GPIO10, MISO to GPIO9. Tie GDO0 to GPIO13 and share it for RX/TX (half‑duplex). This single GDO0 line is key. [Elektroda, p.kaczmarek2, post #21780237]
Transmit works but receive stopped—what did I miss?
Enable half‑duplex flow and force RX at boot. Add on_transmit: xmit(), on_complete: recv(), and an on_boot lambda to call recv(). “GDO0 pin is used for both transmit and receive.” [Elektroda, p.kaczmarek2, post #21780237]
Do you have a minimal working ESPHome YAML snippet?
Yes. Use the RadioLib CC1101 external component, set frequency 433.9205 MHz, define remote_receiver/transmitter on GPIO13, and send Dooya frames with repeat 5 and 1 ms wait. The thread posts full YAML. [Elektroda, p.kaczmarek2, post #21780237]
How do I learn codes from the original Dooya remote?
Start with a receiver config (dump dooya and raw). Press remote buttons and read decoded fields (id, channel, button, check). Then reuse them in transmit_dooya actions. [Elektroda, p.kaczmarek2, post #21780237]
How can I add one blind as a positionable cover in Home Assistant?
Use cover: time_based with open_action/close_action/stop_action sending transmit_dooya. Set open_duration and close_duration (e.g., 22 s open, 21 s close). Calibrate for your motor. [Elektroda, p.kaczmarek2, post #21780237]
What adjustable RF parameters are exposed for tuning?
You can change frequency, bandwidth, bitrate, AGC settings, and modulation mode via template number/select entities. Values update RadioLib and take effect immediately. [Elektroda, p.kaczmarek2, post #21780237]
Flipper Zero records my TX as raw but won’t decode it—broken?
Not broken. In tests, blinds responded but Flipper Zero did not decode the transmitted signal, only captured raw. That’s an observed edge case. [Elektroda, p.kaczmarek2, post #21780237]
What are typical timing values for reliable control?
Working examples used repeat: 5 and wait_time: 1 ms for TX bursts. Receiver used filter 250 µs, idle 7 ms, and 10 kb buffer. These values produced consistent results. [Elektroda, p.kaczmarek2, post #21780237]
How many blinds can I control with this setup?
The build targeted six blinds because the stock remote had only five channels. Group commands were also defined (e.g., channel 0 for “All West”). [Elektroda, p.kaczmarek2, post #21780237]
What is RadioLib, ESPHome, CC1101, and Flipper Zero in this context?
RadioLib is the RF library driving CC1101. ESPHome is the firmware and YAML layer. CC1101 is a 315–915 MHz transceiver. Flipper Zero was used to capture and verify Dooya signals during development. [Elektroda, p.kaczmarek2, post #21780237]
How do I set up half‑duplex TX/RX on a single GDO0 pin (3 steps)?
Map both remote_receiver and remote_transmitter to GPIO13 (GDO0).
Yes. A compact 3D‑printed enclosure was designed and iterated for tolerances. The SketchUp model (V6.skp) is attached in the thread. [Elektroda, p.kaczmarek2, post #21780237]
Comments
If I understand correctly, the antenna is inside the tube on which the roller shutter is wound. Is this not a problem? [Read more]
At the moment, from the developed controller to the furthest roller shutter is about 7-8 metres and there is no problem with range. The developed controller replaces the remote control from the roller... [Read more]
How long does a charged battery last? What is the power consumption in standby mode? Have you considered Zigbee communication ? [Read more]
There are different types of these blinds, but here are the ones presented that are powered normally from the mains. Only the RF remote control has a battery, it lasts for more than a good year, but it... [Read more]
Super! Your post helped me a lot as I was struggling with creating a remote control for a projector screen. I've chosen cc1101 + ESP32 C3. I've struggled the most with just choosing the pins because in... [Read more]
Do I understand correctly: - with ESP32-S3 + CC1101 hardware only it could be control Dooya shutters in Home Assistant (Flipper Zero only needed for development)? - Home Assistant has an Android app... [Read more]
Correct on all 3 interpretations. No, position is time based. It may not be obvious at first but the principal design requirement was to first program ESP as a receiver only, that will... [Read more]
So, firstly I need to capture all the 5 shutters moving RF signal with ESP? In commercial products it only need to pair/bind the remote controller (press the P2 button on the back side 2 times) with the... [Read more]
Correct. That is for each motor, if your remote has 5 controllable channels that procedure has to be repeated for each motor. This is not a commercial product, but a DIY solution 😉 and yes... [Read more]
Maybe this wouldn't help us to read the shutter status and control to a defined position? https://github.com/pruwait/dooya/tree/main [Read more]
For the motors that have position reporting probably, the implementation from the first post is for non-reporting models. BTW, ESPHome regressed in version 2026.2.x and on ESP32-C3 chips/modules has... [Read more]
I would like to suggest that if someone does not want to play with soldering, printing ... you can use a ready-made device in which you have to change the software https://forum.arturhome.pl/t/sprzedam-magic-reader-czytnik-wmbus-wi-fi-ethernet-poe/7732 https://www.olx.pl/d/oferta/magic-meter-v3-czytnik-licznikow-wmbus-868mhz-ha-esphom-CID99-ID14iWYp.html?search_reason=search%7Corganic ... [Read more]
and why is it relevant for this topic? [Read more]
So I ended up my work with my BIDI Dooya remote (DD1805H). I could not decode the recorded signal (RTL-SDR). Maybe in case anyone has any ideas... I attached the Universal Radio Hacker recorded sig... [Read more]
I have run blinds_gateway in kosnola it reads one remote control button as 3 lines of code, the question is how to convert this from raw to code that I can put in the final yaml file ? https://obra... [Read more]
Do you know what type of remote you have? What type of protocol does it use? [Read more]
The remote control is a yooda 1ch 433Mhz model 1712770H but nowhere did I find information about the protocol used Added after 44 [minutes]: The remote control is a yooda 1ch 433Mhz model 1712770H... [Read more]
it looks like that is ASK modulation, dooya works with OOK (maybe FSK) and this is what I've based the project on. You would have to play around the radiolib to figure out how to implement the support... [Read more]
for me this code worked with a bit of a modification it is working even with yooda blinds remote_transmitter: - id: rf_transmitter pin: number: $tx allow_other_uses:... [Read more]