Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. My Project
  3. Controlling Blinds.com RF Dooya Motors with Arduino and Vera

Controlling Blinds.com RF Dooya Motors with Arduino and Vera

Scheduled Pinned Locked Moved My Project
90 Posts 29 Posters 74.0k Views 24 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ssuckowS Offline
    ssuckowS Offline
    ssuckow
    wrote on last edited by
    #71

    I recognize this is an old post, but I've not found any newer discussion and I have hit a roadblock. I've followed all of the very helpful posts to build a sniffer and decode it as tools like RCSwitch wouldn't work. I even used @PeteKnight 's tip to notice there was a different code sent initially when a button was pressed. I've tried sending both versions, emulating the initial (timing?) signal at the start. I tweaked the high and low delays and I think I've got a rf signal that is extremely close to the one from the remote. Here are the two different sources in audacity for comparison.
    ![0_1598212142451_RemoteInAudacity.JPG](Uploading 100%)

    //Define Variables
    #define GND 3
    #define VCC 4
    #define DATA 5 //Data pin for RF Transmitter
    #define ZERO_HIGH 307 //Delay for the high part of a 0 in microseconds
    #define ZERO_LOW 750 //Delay for the low part of a 0 in microseconds
    #define ONE_HIGH 648 //Delay for the high part of a 1 in microseconds
    #define ONE_LOW 409 //Delay for the low part of a 1 in microseconds
    
    int startUp = 1;
    
    unsigned char standardBits1 = 0b00001111; //integer value of the 28 bit standard sequence referenced above. "0b" prefix is for *******
    unsigned char standardBits2 = 0b01111100;
    unsigned char standardBits3 = 0b01100100;
    unsigned char standardBits4 = 0b00000001;
    unsigned char standardBits5 = 0b00011110;
    
    
    void setup() {
      pinMode(GND,OUTPUT);
      pinMode(VCC,OUTPUT);
      pinMode(DATA,INPUT);
      digitalWrite(GND,LOW);
      digitalWrite(VCC,HIGH);
      
       Serial.begin(9600);
     
    }
    
    void loop() {
     unsigned char i;
          delay(3000);
        if(startUp ==1){
        for(i=0;i<10;i++) {
          delay(1000);
          digitalWrite(DATA, HIGH);
          delayMicroseconds(5000);
          digitalWrite(DATA, LOW);    
          delayMicroseconds(1500);        
    
          eightBits(standardBits1);
          eightBits(standardBits2);
          eightBits(standardBits3);
          eightBits(standardBits4);
          eightBits(standardBits5);
          startUp = 0;
        }
     }
    }
          void eightBits(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(DATA, HIGH);
                  delayMicroseconds(highTime);
                  digitalWrite(DATA, LOW);    
                  delayMicroseconds(lowTime);        
            }
         
    }
    

    Here are all the codes I was able to extract from audacity for one of the blinds.
    Down1: 00001111 01111100 01100100 00000001 00111100
    Up1: 00001111 01111100 01100100 00000001 00011110
    Stop1: 00001111 01111100 01100100 00000001 01010101
    Start1: 00001111 01111100 01100100 00000001 00010001
    Does anyone have an idea of what I might still be missing in getting this work?

    petewillP D 2 Replies Last reply
    0
    • ssuckowS ssuckow

      I recognize this is an old post, but I've not found any newer discussion and I have hit a roadblock. I've followed all of the very helpful posts to build a sniffer and decode it as tools like RCSwitch wouldn't work. I even used @PeteKnight 's tip to notice there was a different code sent initially when a button was pressed. I've tried sending both versions, emulating the initial (timing?) signal at the start. I tweaked the high and low delays and I think I've got a rf signal that is extremely close to the one from the remote. Here are the two different sources in audacity for comparison.
      ![0_1598212142451_RemoteInAudacity.JPG](Uploading 100%)

      //Define Variables
      #define GND 3
      #define VCC 4
      #define DATA 5 //Data pin for RF Transmitter
      #define ZERO_HIGH 307 //Delay for the high part of a 0 in microseconds
      #define ZERO_LOW 750 //Delay for the low part of a 0 in microseconds
      #define ONE_HIGH 648 //Delay for the high part of a 1 in microseconds
      #define ONE_LOW 409 //Delay for the low part of a 1 in microseconds
      
      int startUp = 1;
      
      unsigned char standardBits1 = 0b00001111; //integer value of the 28 bit standard sequence referenced above. "0b" prefix is for *******
      unsigned char standardBits2 = 0b01111100;
      unsigned char standardBits3 = 0b01100100;
      unsigned char standardBits4 = 0b00000001;
      unsigned char standardBits5 = 0b00011110;
      
      
      void setup() {
        pinMode(GND,OUTPUT);
        pinMode(VCC,OUTPUT);
        pinMode(DATA,INPUT);
        digitalWrite(GND,LOW);
        digitalWrite(VCC,HIGH);
        
         Serial.begin(9600);
       
      }
      
      void loop() {
       unsigned char i;
            delay(3000);
          if(startUp ==1){
          for(i=0;i<10;i++) {
            delay(1000);
            digitalWrite(DATA, HIGH);
            delayMicroseconds(5000);
            digitalWrite(DATA, LOW);    
            delayMicroseconds(1500);        
      
            eightBits(standardBits1);
            eightBits(standardBits2);
            eightBits(standardBits3);
            eightBits(standardBits4);
            eightBits(standardBits5);
            startUp = 0;
          }
       }
      }
            void eightBits(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(DATA, HIGH);
                    delayMicroseconds(highTime);
                    digitalWrite(DATA, LOW);    
                    delayMicroseconds(lowTime);        
              }
           
      }
      

      Here are all the codes I was able to extract from audacity for one of the blinds.
      Down1: 00001111 01111100 01100100 00000001 00111100
      Up1: 00001111 01111100 01100100 00000001 00011110
      Stop1: 00001111 01111100 01100100 00000001 01010101
      Start1: 00001111 01111100 01100100 00000001 00010001
      Does anyone have an idea of what I might still be missing in getting this work?

      petewillP Offline
      petewillP Offline
      petewill
      Admin
      wrote on last edited by
      #72

      @ssuckow I can't see the image but when I did this I started in small steps. Your first goal is to send a successful signal without all the MySensors code. I just created a standalone program with all my code in the setup so when it ran it would send a raise, stop or lower signal. Once you do that you can integrate it with MySensors much easier. It sounds like you have mostly done this based on your description above but I'm not sure. Also, are you sure the hardware is wired correctly? Is the 433Mhz device is getting enough power to send the signal to the blinds?

      My "How To" home automation video channel: https://www.youtube.com/channel/UCq_Evyh5PQALx4m4CQuxqkA

      ssuckowS 1 Reply Last reply
      0
      • ssuckowS ssuckow

        I recognize this is an old post, but I've not found any newer discussion and I have hit a roadblock. I've followed all of the very helpful posts to build a sniffer and decode it as tools like RCSwitch wouldn't work. I even used @PeteKnight 's tip to notice there was a different code sent initially when a button was pressed. I've tried sending both versions, emulating the initial (timing?) signal at the start. I tweaked the high and low delays and I think I've got a rf signal that is extremely close to the one from the remote. Here are the two different sources in audacity for comparison.
        ![0_1598212142451_RemoteInAudacity.JPG](Uploading 100%)

        //Define Variables
        #define GND 3
        #define VCC 4
        #define DATA 5 //Data pin for RF Transmitter
        #define ZERO_HIGH 307 //Delay for the high part of a 0 in microseconds
        #define ZERO_LOW 750 //Delay for the low part of a 0 in microseconds
        #define ONE_HIGH 648 //Delay for the high part of a 1 in microseconds
        #define ONE_LOW 409 //Delay for the low part of a 1 in microseconds
        
        int startUp = 1;
        
        unsigned char standardBits1 = 0b00001111; //integer value of the 28 bit standard sequence referenced above. "0b" prefix is for *******
        unsigned char standardBits2 = 0b01111100;
        unsigned char standardBits3 = 0b01100100;
        unsigned char standardBits4 = 0b00000001;
        unsigned char standardBits5 = 0b00011110;
        
        
        void setup() {
          pinMode(GND,OUTPUT);
          pinMode(VCC,OUTPUT);
          pinMode(DATA,INPUT);
          digitalWrite(GND,LOW);
          digitalWrite(VCC,HIGH);
          
           Serial.begin(9600);
         
        }
        
        void loop() {
         unsigned char i;
              delay(3000);
            if(startUp ==1){
            for(i=0;i<10;i++) {
              delay(1000);
              digitalWrite(DATA, HIGH);
              delayMicroseconds(5000);
              digitalWrite(DATA, LOW);    
              delayMicroseconds(1500);        
        
              eightBits(standardBits1);
              eightBits(standardBits2);
              eightBits(standardBits3);
              eightBits(standardBits4);
              eightBits(standardBits5);
              startUp = 0;
            }
         }
        }
              void eightBits(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(DATA, HIGH);
                      delayMicroseconds(highTime);
                      digitalWrite(DATA, LOW);    
                      delayMicroseconds(lowTime);        
                }
             
        }
        

        Here are all the codes I was able to extract from audacity for one of the blinds.
        Down1: 00001111 01111100 01100100 00000001 00111100
        Up1: 00001111 01111100 01100100 00000001 00011110
        Stop1: 00001111 01111100 01100100 00000001 01010101
        Start1: 00001111 01111100 01100100 00000001 00010001
        Does anyone have an idea of what I might still be missing in getting this work?

        D Offline
        D Offline
        doteq
        wrote on last edited by
        #73

        @ssuckow said in Controlling Blinds.com RF Dooya Motors with Arduino and Vera:

        pinMode(DATA,INPUT);

        Why data pin is input? I think it should be output.

        ssuckowS 1 Reply Last reply
        0
        • petewillP petewill

          @ssuckow I can't see the image but when I did this I started in small steps. Your first goal is to send a successful signal without all the MySensors code. I just created a standalone program with all my code in the setup so when it ran it would send a raise, stop or lower signal. Once you do that you can integrate it with MySensors much easier. It sounds like you have mostly done this based on your description above but I'm not sure. Also, are you sure the hardware is wired correctly? Is the 433Mhz device is getting enough power to send the signal to the blinds?

          ssuckowS Offline
          ssuckowS Offline
          ssuckow
          wrote on last edited by
          #74

          @petewill Sorry, it seems I had to use the .jpeg extension instead of .jpg. My code is just trying to move the blinds without any extra code. This image shows the remote signal on the top and the Arduino generated signal on the bottom.
          RemoteInAudacity.JPeG

          1 Reply Last reply
          1
          • D doteq

            @ssuckow said in Controlling Blinds.com RF Dooya Motors with Arduino and Vera:

            pinMode(DATA,INPUT);

            Why data pin is input? I think it should be output.

            ssuckowS Offline
            ssuckowS Offline
            ssuckow
            wrote on last edited by
            #75

            @doteq You are correct. That was a holdover from when I was trying to sniff. I tweaked that and this image shows the updated version as Arduino7. Apparently it worked with it defined as input (as receiver connected to audacity was picking it up), but their was a lot more noise. Now, the signal looks very much like the source remote. However, It still doesn't move the blinds. :disappointed:

            Capture.jpeg

            P 1 Reply Last reply
            0
            • electrikE Offline
              electrikE Offline
              electrik
              wrote on last edited by
              #76

              From the code it looks like you're switching on the receiver by enabling the gnd and vcc pins with an output of the microcontroller. Do you have additional transistors to do so, or just with the output pins directly? In the last case I would recommend to connect it to gnd and vcc directly, to make sure enough current is available.

              1 Reply Last reply
              0
              • ssuckowS Offline
                ssuckowS Offline
                ssuckow
                wrote on last edited by
                #77

                I just tried moving it to the VCC and ground pins and it didn't work either.

                1 Reply Last reply
                0
                • D Offline
                  D Offline
                  doteq
                  wrote on last edited by
                  #78

                  @ssuckow I managed to control blinds with your code. Make sure you have wire attached for antenna.

                  1 Reply Last reply
                  0
                  • ssuckowS ssuckow

                    @doteq You are correct. That was a holdover from when I was trying to sniff. I tweaked that and this image shows the updated version as Arduino7. Apparently it worked with it defined as input (as receiver connected to audacity was picking it up), but their was a lot more noise. Now, the signal looks very much like the source remote. However, It still doesn't move the blinds. :disappointed:

                    Capture.jpeg

                    P Offline
                    P Offline
                    PeteKnight
                    wrote on last edited by
                    #79

                    @ssuckow what you’ve posted seems to be a good match for the original.
                    I’m wondering, based on your other comments, if your blinds need the message repeating several times (with my blinds it’s 4 times) or if the initial message is a sort of ‘stand by to receive a command’ instruction that needs to then be followed by the command message (maybe multiple times?).
                    Try quickly stabbing at the remote control button whilst recording in Audacity and look at the bigger picture. This might give you a bigger picture of the complete command set that the remote is sending when a button is pressed.

                    Pete.

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      mmartins
                      wrote on last edited by
                      #80

                      @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

                      P 1 Reply Last reply
                      0
                      • M mmartins

                        @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

                        P Offline
                        P Offline
                        PeteKnight
                        wrote on last edited by
                        #81

                        @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
                        1011101000110000111011101001000100010001

                        Stop
                        1011101000110000111011101001000101010101

                        Down
                        1011101000110000111011101001000100110011

                        If 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.

                        1 Reply Last reply
                        0
                        • petewillP petewill

                          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.pdf

                          Arduino Code MySensors Version 2.x:
                          https://gist.github.com/petewill/ac31b186291743e046f83497de0ffa87

                          And the Arduino Code (OLD CODE):
                          BlindsVera.ino

                          2020-12-06: Edited to add updated code

                          Stanley MeloS Offline
                          Stanley MeloS Offline
                          Stanley Melo
                          wrote on last edited by
                          #82
                          This post is deleted!
                          1 Reply Last reply
                          0
                          • petewillP petewill

                            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.pdf

                            Arduino Code MySensors Version 2.x:
                            https://gist.github.com/petewill/ac31b186291743e046f83497de0ffa87

                            And the Arduino Code (OLD CODE):
                            BlindsVera.ino

                            2020-12-06: Edited to add updated code

                            Stanley MeloS Offline
                            Stanley MeloS Offline
                            Stanley Melo
                            wrote on last edited by
                            #83
                            This post is deleted!
                            1 Reply Last reply
                            0
                            • carlscicC Offline
                              carlscicC Offline
                              carlscic
                              wrote on last edited by
                              #84

                              @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

                              petewillP 1 Reply Last reply
                              0
                              • carlscicC carlscic

                                @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

                                petewillP Offline
                                petewillP Offline
                                petewill
                                Admin
                                wrote on last edited by
                                #85

                                @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.

                                My "How To" home automation video channel: https://www.youtube.com/channel/UCq_Evyh5PQALx4m4CQuxqkA

                                1 Reply Last reply
                                0
                                • carlscicC Offline
                                  carlscicC Offline
                                  carlscic
                                  wrote on last edited by
                                  #86

                                  @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.

                                  433audio.PNG

                                  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!

                                  petewillP 1 Reply Last reply
                                  0
                                  • carlscicC carlscic

                                    @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.

                                    433audio.PNG

                                    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!

                                    petewillP Offline
                                    petewillP Offline
                                    petewill
                                    Admin
                                    wrote on last edited by
                                    #87

                                    @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.

                                    My "How To" home automation video channel: https://www.youtube.com/channel/UCq_Evyh5PQALx4m4CQuxqkA

                                    J 1 Reply Last reply
                                    0
                                    • petewillP petewill

                                      @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.

                                      J Offline
                                      J Offline
                                      jluvs2ride
                                      wrote on last edited by
                                      #88

                                      @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.

                                      electrikE 1 Reply Last reply
                                      0
                                      • J jluvs2ride

                                        @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.

                                        electrikE Offline
                                        electrikE Offline
                                        electrik
                                        wrote on last edited by
                                        #89

                                        @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

                                        1 Reply Last reply
                                        0
                                        • Antonio SchneiderA Offline
                                          Antonio SchneiderA Offline
                                          Antonio Schneider
                                          wrote on last edited by
                                          #90

                                          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!

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          12

                                          Online

                                          11.7k

                                          Users

                                          11.2k

                                          Topics

                                          113.1k

                                          Posts


                                          Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • MySensors
                                          • OpenHardware.io
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular