Enviar RAW DATA RF 433

Hola Chicos/as.
Tras varias semanas con otros campos de arduino, vuelvo a jugar con los módulos de RF de 433 MHZ.
Estoy usando la librería RCSWITCH https://github.com/Martin-Laclaustra/rc-switch/tree/transmittimingsarray/examples
Dispongo de un transmisor de con enchufe del tipo sonnof para encender una lampara y lo quiero clonar. Solo dispone de un botón.
Con la librería RCSWITCH y el programa ReceiveDemo Advanced consigo recibir los datos de otros transmisores, pero de este en concreto no. Con lo cual, para recibir los tiempos de este transmisor utilizo otro sketch https://github.com/sui77/SimpleRcScanner/blob/master/htdocs/Sketchbook/SimpleRcScanner.ino
Con dicho sketch, si que obtengo la lectura de los tiempos recibidos con mi transmisor:

332,2492,348,360,2464,376,2448,388,2436,2508,332,376,2448,2500,340,2480,360,2464,372,336,2484,2468,368,2456,388,320,2496,348,2472,364,2456,380,19388,2568,280,2536,304,2496,360,348,2476,364,2456,384,2440,2484,376,332,2488,2464,376,2448,388,2440,396,312,2500,2456,384,2440,400,308,2504,340,2476,360,2464,372,19384,2580,268,2520,336,2488,348,360,2468,372,2448,388,2436,2508,332,376,2448,2500,340,2480,356,2468,368,340,2480,2472,368,2456,384,324,2492,348,2472,364,2460,376,19388,2568,276,2536,300,2500,360,352,2472,364,2456,380,2464,2464,376,332,2488,2464,376,2448,388,2436,400,312,2500,2452,388,2436,404,304,2504,340,2480,356,2464,372,19388,2572,272,2520,336,2484,352,356,2472,368,2452,388,2436,2504,332,376,2448,2500,340,2480,356,2464,372,340,2480,2472,364,2456,384,324,2496,344,2476,364,2456,376,19384,2568,280,2508,352,2472,368,340,2480,360,2460,380,2444,2496,340,368,2456,2492,344,2480,360,2464,368,340,2476,2476,364,2460,376,332,2488,356,2464,372,2448,384,19388,2552,292,2520,320,2500,336,372,2456,380,2444,392,2432,2504,336,372,2456,2492,348,2468,368,2460,376,332,2484,2468,372,2448,392,316,2500,344,2472,364,2460,376,19380,2568,280,2532,308,2508,328,380,2448,388,2436,404,2420,2504,348,360,2464,2484,352,2472,364,2460,376,332,2488,2464,372,2448,392,320,2496,344,2476,360,2460,376,19380,2564,284,2512,340,2484,356,352,2472,368,2452,384,2440,2500,336,372,2456,2492,344,2476,360,2460,376,336,2484,2464,372,2452,388,320,2496,348,2468,368,2456,376,19380,2572,276,2512,344,2480,356,352,2472,364,2456,384,2440,2504,336,368,2452,2496,344,2472,364,2464,372,336,2484,2468,368,2452,388,320,2496,348,2472,364,2460,376,19384,2564,276,2536,300,2516,324,384,2468,348,2472,364,2456,2488,348,360,2464,2484,352,2468,368,2456,384,328,2488,2460,376,2448,392,316,2500,344,2472,364,2460,376,19376,2568,276,2536,304,2512,328,380,2452,384,2440,396,2428,2516,348,332,2488,2464,372,2448,388,2440,396,312,2504,2448,388,2436,404,304,2512,332,2484,352,2468,364,19384,2568,280,2532,308,2508,332,376,2452,384,2440,396,2428,2496,360,348,2476,2472,364,2456,380,2444,392,320,2496,2456,380,2444,396,308,2504,344,2472,364,2460,372,19380,2572,276,2532,308,2508,328,380,2452,380,2440,400,2424,2496,360,348,2476,2472,364,2460,376,2452,384,320,2496,2460,376,2444,400,308,2504,340,2476,360,2464,368,

Con la librería d ercswitch, se reciben datos similares de otros transmisores, así como el largo del pulso, el numero de protocolo, el codigo binario y estos mismos raw data.
En decenas de paginas he visto que para retransmitir estos datos, pegan el codigo binario y el pulselength y funciona. Yo le he probado y es fácil. El problema es que este transmisor que me ocupa, lo tengo que recibir con este otro programa y solo obtengo los tiempos como muestro en la parte superior. No obtengo el pulselength ni código binario.
Mi pregunta es: ¿Como hago para retransmitir estos datos raw y que salgan igual? Ya que el pulselength y el código binario salen de estos datos raw, debería poderse enviar los datos y que el receptor obedezca.
He encontrado un codigo de alguien que pretendía hacer lo mismo pero no le funciona. Es en una pregunta en este foro pero no obtuvo respuesta. He probado su sketch con mis raw data recibidos pero el receptor no responde y la lectura posterior es totalmente distinta al transmisor original.
Este es el codigo que he encontrado pero no le funciona ni al autor ni a mi:

// raw data
int one_off[]   = {19192,2520,292,2496,316,2480,324,368,2428,380,2412,392,2400,2484,324,376,2420,2472,332,2456,348,2444,360,340,2452,2440,364,2428,376,324,2464,340,2452,348,2444,356,19192};

int one_on[]    = {19192,2520,292,2496,316,2480,324,368,2428,380,2412,392,2400,2484,324,376,2420,2472,332,2456,348,2444,360,340,2452,2440,364,2428,376,324,2464,340,2452,348,2444,356,19192};


#define pin_tx      10
#define pin_led     13
#define pin_button1 7
#define delay_correction 0

void setup() {
  // Serial
  Serial.begin(115200);
  Serial.println(F("\nHomeEasy Transmitter ready!\n"));
    
  // i/o
  pinMode(pin_tx, OUTPUT);
  pinMode(pin_led, OUTPUT);
  pinMode(pin_button1, INPUT);
  digitalWrite(pin_button1, HIGH);
}

void loop() {
  // put your main code here, to run repeatedly:

  if (digitalRead(pin_button1) == LOW) {
    digitalWrite(pin_led, HIGH);
    unsigned long start = micros();
    
    for (int i = 0; i < 93; i = i+2) {
      digitalWrite(pin_tx, HIGH);
      delayMicroseconds(one_off[i] - delay_correction);
      
      digitalWrite(pin_tx, LOW);
      delayMicroseconds(one_off[i] - delay_correction);  
    }
    unsigned long ende = micros();
  
    Serial.println(ende-start);
    digitalWrite(pin_led, LOW);

    delay(1000);
  }
  
}

Alguien sabría arreglar este codigo o decirme como enviar esos datos??’
Gracias de antemano

Este código lo único que hace es mandar pulsos, en este caso 93 pulsos y con igual tiempo on/off para cada pulso.
No logro entender cabalmente cuál es tu problema pero no veo que esté aquí, pienso que el problema está del lado del receptor que es quien debería calcular el largo del pulso, supongo.

Hola Gatul....
Quizás me haya ido por la ramas en mi explicación.
Mi transmisor de lampara, transmite esta señal en 433.92 Mhz, 12 veces al pulsar su botón:

19272,2568,276,2496,344,2464,364,344,2464,364,2440,388,2424,2488,332,376,2440,2480,
344,2460,360,2448,376,332,2472,2456,368,2440,384,316,2484,352,2452,372,2440,380

Obviamente, la lampara se enciende o apaga.
Lo que quiero es enviar esa misma señal con los mismos tiempos desde arduino y modulo TX 433...
Utilizo el sketch simplescanner para obtener los tiempos de la señal del transmisor de la lampara.
El sketch que puse al final de mi primer post, es de alguien que pretende hacer lo mismo que yo pero no le funcionó. Era solo un ejemplo de lo que pretendo.
Espero haberme hecho entender.
Gracias

Algo parece que he conseguido…

He mezclado dos codigos, el que recibe los datos raw y el sendDemo de la librería.
Simplemente el TX coge la variable timings y trás un delay de 10 segundos la retransmite dos veces. Bueno eso esperaba.
El caso es que no transmite lo mismo que recibe… Desconozco el motivo.
Esta es la mezcla

#define SAMPLESIZE 500

static unsigned int timings[SAMPLESIZE];
static unsigned int pos = 0;
static unsigned long lastTime = 0;

static int receiverPin = 2;
static int interruptPin = 0;

////////////////////////////////// Para TX
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
/////////////////////////////////

void setup() {
  interruptPin = digitalPinToInterrupt(receiverPin);
  Serial.begin(9600); 
  attachInterrupt(interruptPin, handleInterrupt, CHANGE);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);

   //////////////////////////////////////////////////
   mySwitch.enableTransmit(10);//////////Para TX

  // Optional set protocol (default is 1, will work for most outlets)
  // mySwitch.setProtocol(2);
  // Optional set pulse length.
  // mySwitch.setPulseLength(320);
  
  // Optional set number of transmission repetitions.
  // mySwitch.setRepeatTransmit(15);
  ///////////////////////////////////////////////////
}

void loop() {
    for (int i = 5; i>0; i--) {
      Serial.print(i);
      Serial.print("... ");
      delay(900);
      digitalWrite(13, HIGH);
      delay(100);
      digitalWrite(13, LOW);
    }
    Serial.println();
      
    detachInterrupt(interruptPin);
  
    int finalstate = digitalRead(receiverPin);
    
    char s = Serial.read();
    
    for (unsigned int i = pos + finalstate; i< SAMPLESIZE; i++) {
      Serial.print( timings[i] );
      Serial.print(",");
    }
 
    for (unsigned int i = 0; i < pos; i++) {
      Serial.print( timings[i] );
      Serial.print(",");
    }

    Serial.println("");
    Serial.println("Reset your Arduino to scan again...");
    
 //////////////////////////PARA  TX
   delay(10000);
     
   mySwitch.send(timings[SAMPLESIZE]);
   delay(1000);  
   mySwitch.send(timings[SAMPLESIZE]);
   delay(1000);
  //////////////////////////////////////
    while(true) {} 

   
}

void handleInterrupt() {
  const long time = micros();
  timings[pos] = time - lastTime;
  lastTime = time;
  if (++pos > SAMPLESIZE-1) {
    pos = 0;
  }
}

Alguna sugerencia ???