Reverse engineering ELRO DB280 Doorbel

From Randomdata wiki
Jump to navigation Jump to search

Error creating thumbnail: Unable to save thumbnail to destination

The ELRO DB280 is a doorbel system with a wireless remote. The system has a fixed code, although it can be changed quite easily by changing some "solder bridges"

433 Signal encoding

We analyzed the wireless signal with an Logic analyzer and a 433 receiver.

The jumpers are set:

10000100

After analysing the pulses with the logic analyzer we do see the following

0001010101000101010101010

If we invert the set jumpers and we the code 1 character we see the following:

 0 1 1 1 1 0 1 1
0001010101000101010101010

We can conclude:

  • Every pulse uses a 0 in front
  • The code is inverted (or it's default up unless it's brought to the ground)
  • There is a trailer: "010101010"

Arduino code to trigger ELRO DB280 doorbel

This code triggers the ELRO DB280 doorbel, it's a loop and it goes on and on and on...

 /*
 This is Fish_ his DoorbelGOon code 0.1, if you change it, let me know so we can create better verions.
 More info check @fish_ on twitter
 */
int rfout=12; //rf output pin
int status=13; //status pin
int longwait=0; // declare the longwait int

void setup() {
  // Open serial debug communications and wait for port to open:
  Serial.begin(9600);
  
  pinMode(rfout, OUTPUT);  //Define rf 433 transmitter pin
  pinMode(status, OUTPUT); //Define status LED
  digitalWrite(rfout, LOW); //extra check that output is LOW
}
void loop() {

  // Set up a Pulse String of the doorbel
  String stringOne = "0001010101000101010101010"; //first digit is ignored
  int highpulse=750; // Length of the 1 pulse
  int highbreak=300; // Length of the 1 break
  int lowpulse=250; // Length of the 0 pulse
  int lowbreak=900; // Length of the 0 break

  int offtime=1; // Declare the offtime integer
  int ontime=1;  // Declare the ontime integer
  int pulselength=25;

  Serial.println(stringOne); //Debug output
  Serial.println(); //Debug enter

  int pulses=0;  // Declare the pulses integer
  
  //This Block gets the 0 or 1 of the string and sets the pulse and break time
  while(pulses < pulselength) {
    if (stringOne.substring(pulses,(pulses+1)) == "0") {
        ontime=highpulse;
        offtime=highbreak;
      } else {
        ontime=lowpulse;
        offtime=lowbreak;
    }
  pulses++;  

  //This Block sends the output to the 433 transmitter
  digitalWrite(rfout, HIGH);    // pulse on
  delayMicroseconds(offtime);

  digitalWrite(rfout, LOW);   // put pulse on low
  delayMicroseconds(ontime);

  }
  digitalWrite(rfout, LOW);   // be sure the puls is off (INVERTED!!)
  delay(10);               // delay for next pulse series
  longwait++; // add 1 to the longwait value.
  if (longwait>10) {longwait=0; delay(500);} //used for send the next batch of pulses
}