Controlling Blinds.com RF Dooya Motors with Arduino and Vera
-
@PeteKnight I'm also trying to control my Gaviota awnings with no success, my remote is not from Gaviota but a white label one (It says it uses rolling codes - it's the MX96 https://cloud.motorline.pt/download/manuais/eletronica/mx95-96-97_pt.pdf). I've tried decoding the codes with a cheap RF receiver hooked up with an ESP32 with espHome. I can get some codes sometimes, if I keep my finger pressed for a long time, but none of them work and they do not seam consistent. Since I do not have a raspberry I cannot run that code from Raspi-Rollo.
How did you use audacity to decode the codes? Would you mind sharing the codes you got so I can see if they work here? I have 2 awnings, and I can select which one I control on the remote, does that mean that they are using different codes?
Thanks
-
@PeteKnight I'm also trying to control my Gaviota awnings with no success, my remote is not from Gaviota but a white label one (It says it uses rolling codes - it's the MX96 https://cloud.motorline.pt/download/manuais/eletronica/mx95-96-97_pt.pdf). I've tried decoding the codes with a cheap RF receiver hooked up with an ESP32 with espHome. I can get some codes sometimes, if I keep my finger pressed for a long time, but none of them work and they do not seam consistent. Since I do not have a raspberry I cannot run that code from Raspi-Rollo.
How did you use audacity to decode the codes? Would you mind sharing the codes you got so I can see if they work here? I have 2 awnings, and I can select which one I control on the remote, does that mean that they are using different codes?
Thanks
@mmartins if you re-read what I wrote, you’ll see that the Raspi-Rollo software has an Arduino sketch to identity the codes. I ran this on a NodeMCU, so it should work on an ESP32.
If you need to use Audacity then the process is well documented in the links earlier in this topic.I have three blinds and they all use independent remotes and each blind has its own codes.
I’m not sure how my codes will help with yours, but here are the codes for one of my blinds:Up
1011101000110000111011101001000100010001Stop
1011101000110000111011101001000101010101Down
1011101000110000111011101001000100110011If your blinds do actually use rolling codes the I don’t think you’ll be able to control them the same way that I do.
Pete.
-
I recently figured out how to control my Blinds.com motorized cellular shades (http://www.blinds.com/control/product/productID,97658) with my Vera 3. The blinds have Dooya DV24CE motors (which use a 433 MHz RF for remote control) built into them but I couldn't find any already built RF transmitter that integrated directly with the Vera. I had recently started building Arduino sensors with Henrik's amazing MySensors Arduino Sensor Plugin (http://www.mysensors.org) so I decided to try to build my own. Thanks to many helpful resources on the internet I was able to control my blinds for less than $20 in Arduino parts.
Here is a link to a YouTube video with an overview of the process: http://youtu.be/EorIqw-9eJw
Here is a pdf with more info on the process if you are interested in doing it yourself:
Controlling Blinds.com RF Dooya Motors with Arduino and Vera.pdfArduino Code MySensors Version 2.x:
https://gist.github.com/petewill/ac31b186291743e046f83497de0ffa87And the Arduino Code (OLD CODE):
BlindsVera.ino2020-12-06: Edited to add updated code
This post is deleted! -
I recently figured out how to control my Blinds.com motorized cellular shades (http://www.blinds.com/control/product/productID,97658) with my Vera 3. The blinds have Dooya DV24CE motors (which use a 433 MHz RF for remote control) built into them but I couldn't find any already built RF transmitter that integrated directly with the Vera. I had recently started building Arduino sensors with Henrik's amazing MySensors Arduino Sensor Plugin (http://www.mysensors.org) so I decided to try to build my own. Thanks to many helpful resources on the internet I was able to control my blinds for less than $20 in Arduino parts.
Here is a link to a YouTube video with an overview of the process: http://youtu.be/EorIqw-9eJw
Here is a pdf with more info on the process if you are interested in doing it yourself:
Controlling Blinds.com RF Dooya Motors with Arduino and Vera.pdfArduino Code MySensors Version 2.x:
https://gist.github.com/petewill/ac31b186291743e046f83497de0ffa87And the Arduino Code (OLD CODE):
BlindsVera.ino2020-12-06: Edited to add updated code
This post is deleted! -
@petewill I've managed to get the binary code with Audacity quite easy but got stuck as for each button pressed sends out a combination of codes.
Just for the open, always the same code in binary, 0111000000001100100011001110000100011110 twice and then 0111000000001100100011001110000100010001 three times.
//Define Variables #define SEND_DATA 3 //Data pin for RF Transmitter #define ZERO_HIGH 376 //Delay for the high part of a 0 in microseconds #define ZERO_LOW 648 //Delay for the low part of a 0 in microseconds #define ONE_HIGH 713 //Delay for the high part of a 1 in microseconds #define ONE_LOW 306 //Delay for the low part of a 1 in microseconds int startUp = 1; unsigned char standardBits1 = 0b01110000; //sequence with "0b" prefix unsigned char standardBits2 = 0b00001100; unsigned char standardBits3 = 0b10001100; unsigned char standardBits4 = 0b11100001; unsigned char standardBits5 = 0b00011110; unsigned char standardBits6 = 0b00010001; int steps = 1; //0111000000001100100011001110000100011110 x2 //0111000000001100100011001110000100010001 x3 void setup() { Serial.begin(9600); } void loop() { if(startUp == 1) { oneBits(standardBits1); oneBits(standardBits2); oneBits(standardBits3); oneBits(standardBits4); oneBits(standardBits6); twoBits(standardBits1); twoBits(standardBits2); twoBits(standardBits3); twoBits(standardBits4); twoBits(standardBits5); startUp = 1; //to keep repeating delayMicroseconds(5000); } } void oneBits(unsigned char bits){ unsigned char k; int delayTime; for(k=0;k<8;k++) { int highTime; int lowTime; delayTime = ((bits>>(7-k)) & 1 ? 1 : 0); if (delayTime == 1){ highTime = ONE_HIGH; lowTime = ONE_LOW; } else { highTime = ZERO_HIGH; lowTime = ZERO_LOW; digitalWrite(SEND_DATA, HIGH); delayMicroseconds(highTime); digitalWrite(SEND_DATA, LOW); delayMicroseconds(lowTime); } } } void PAUSE() { delayMicroseconds(1650); } void twoBits(unsigned char bits) { unsigned char l; int delayTime; for(l=0;l<8;l++) { int highTime; int lowTime; delayTime = ((bits>>(7-l)) & 1 ? 1 : 0); if (delayTime == 1){ highTime = ONE_HIGH; lowTime = ONE_LOW; } else { highTime = ZERO_HIGH; lowTime = ZERO_LOW; } digitalWrite(SEND_DATA, HIGH); delayMicroseconds(highTime); digitalWrite(SEND_DATA, LOW); delayMicroseconds(lowTime); } }I'm seeing the 'results' back on Audacity since the code is set on a loop. Not to complicate more I'm just using 2 different codes but they are broadcasted to each other.
Is there anything I could do to separate them as any delay in between the processes won't work??
Thanks
Carl
-
@petewill I've managed to get the binary code with Audacity quite easy but got stuck as for each button pressed sends out a combination of codes.
Just for the open, always the same code in binary, 0111000000001100100011001110000100011110 twice and then 0111000000001100100011001110000100010001 three times.
//Define Variables #define SEND_DATA 3 //Data pin for RF Transmitter #define ZERO_HIGH 376 //Delay for the high part of a 0 in microseconds #define ZERO_LOW 648 //Delay for the low part of a 0 in microseconds #define ONE_HIGH 713 //Delay for the high part of a 1 in microseconds #define ONE_LOW 306 //Delay for the low part of a 1 in microseconds int startUp = 1; unsigned char standardBits1 = 0b01110000; //sequence with "0b" prefix unsigned char standardBits2 = 0b00001100; unsigned char standardBits3 = 0b10001100; unsigned char standardBits4 = 0b11100001; unsigned char standardBits5 = 0b00011110; unsigned char standardBits6 = 0b00010001; int steps = 1; //0111000000001100100011001110000100011110 x2 //0111000000001100100011001110000100010001 x3 void setup() { Serial.begin(9600); } void loop() { if(startUp == 1) { oneBits(standardBits1); oneBits(standardBits2); oneBits(standardBits3); oneBits(standardBits4); oneBits(standardBits6); twoBits(standardBits1); twoBits(standardBits2); twoBits(standardBits3); twoBits(standardBits4); twoBits(standardBits5); startUp = 1; //to keep repeating delayMicroseconds(5000); } } void oneBits(unsigned char bits){ unsigned char k; int delayTime; for(k=0;k<8;k++) { int highTime; int lowTime; delayTime = ((bits>>(7-k)) & 1 ? 1 : 0); if (delayTime == 1){ highTime = ONE_HIGH; lowTime = ONE_LOW; } else { highTime = ZERO_HIGH; lowTime = ZERO_LOW; digitalWrite(SEND_DATA, HIGH); delayMicroseconds(highTime); digitalWrite(SEND_DATA, LOW); delayMicroseconds(lowTime); } } } void PAUSE() { delayMicroseconds(1650); } void twoBits(unsigned char bits) { unsigned char l; int delayTime; for(l=0;l<8;l++) { int highTime; int lowTime; delayTime = ((bits>>(7-l)) & 1 ? 1 : 0); if (delayTime == 1){ highTime = ONE_HIGH; lowTime = ONE_LOW; } else { highTime = ZERO_HIGH; lowTime = ZERO_LOW; } digitalWrite(SEND_DATA, HIGH); delayMicroseconds(highTime); digitalWrite(SEND_DATA, LOW); delayMicroseconds(lowTime); } }I'm seeing the 'results' back on Audacity since the code is set on a loop. Not to complicate more I'm just using 2 different codes but they are broadcasted to each other.
Is there anything I could do to separate them as any delay in between the processes won't work??
Thanks
Carl
@carlscic Sorry, I'm not clear on what you're looking to do. Have you compared the original Audacity recording to the signals you are sending from the Arduino? You should be able to compare them and make the necessary adjustments to the code so the two recordings are identical.
-
@petewill what I'm trying to do is send 5 codes. Right now the 433 transmitter will broadcast the codes together, one after the other without any delay which the receiver won't recognize.

I already have a written program to control these blinds with a stepper motor to open and close but since they have a built-in motor for shades angle it would be an upgrade!
-
@petewill what I'm trying to do is send 5 codes. Right now the 433 transmitter will broadcast the codes together, one after the other without any delay which the receiver won't recognize.

I already have a written program to control these blinds with a stepper motor to open and close but since they have a built-in motor for shades angle it would be an upgrade!
@carlscic Sorry for the delay. I didn't get a notification of your reply due to some issues caused by the Google outage. Looks like you're almost there. Try playing around with the delays. You might need to adjust the separatorDelay delay times (or maybe remove that call completely). They it just comes down to iterating though the code to make sure you're getting the correct sequence of highs and lows. Playing back your results and recording them in Audacity is a great way to see your results.
-
@carlscic Sorry for the delay. I didn't get a notification of your reply due to some issues caused by the Google outage. Looks like you're almost there. Try playing around with the delays. You might need to adjust the separatorDelay delay times (or maybe remove that call completely). They it just comes down to iterating though the code to make sure you're getting the correct sequence of highs and lows. Playing back your results and recording them in Audacity is a great way to see your results.
@petewill Hey Pete, this is a great project and I'm trying to do something similar but I had Budget Blinds installed in my new home and they seem to be very locked down to protect the dealer/partner channel. Apparently the remotes and automation stuff are made by Somfy and operate on 433.42 MHz.
I started with the project as you describe in this thread, I've been trying to use the terminal monitor with no real results so my next step is to try using audacity to capture the data. If my equipment operates on 433.42 is this problematic? Is it possible to tune the Arduino receiver or does it operate on a wide enough range to capture that? I just want to create a Vera scene to open and close the blinds at specific times.
I hope it's OK to revive this older thread.
-
@petewill Hey Pete, this is a great project and I'm trying to do something similar but I had Budget Blinds installed in my new home and they seem to be very locked down to protect the dealer/partner channel. Apparently the remotes and automation stuff are made by Somfy and operate on 433.42 MHz.
I started with the project as you describe in this thread, I've been trying to use the terminal monitor with no real results so my next step is to try using audacity to capture the data. If my equipment operates on 433.42 is this problematic? Is it possible to tune the Arduino receiver or does it operate on a wide enough range to capture that? I just want to create a Vera scene to open and close the blinds at specific times.
I hope it's OK to revive this older thread.
@jluvs2ride Somfy uses a rolling code, so recording the code and playing it afterwards will not work since the code is changing all the time. This may help you:
https://www.nodo-shop.nl/en/rflink-gateway/193-rflink-43342-gateway-components-somfy-rts.html -
Hello everyone,
Firstly, I apologize for reviving such an old thread, but I find myself in a unique situation and was hoping some of you might be able to help.
I hope everyone's doing well. I have a specific inquiry that I couldn't find a recent solution for. Does anyone here know of a tool to generate "fake" Dooya remote (DC90) RF codes for curtains? I've acquired a few motors without controllers and am trying to integrate them with Home Assistant and Bradlink RF remote. Specifically, I'm searching for a way to generate codes for the Up, Down, Stop, and the "Set" button functions to configure curtain limits.
Any insights or guidance would be immensely appreciated. Thank you so much in advance!