Go Down

Topic: Help in decoding RF433 Thermostat (Read 266 times) previous topic - next topic

Rojj

Hi,

I have been trying for while to decode the ON/OFF signal from my Worcester Digistat thermostat (picture attached).

It is a RF433 thermostat, but the electronics is all hidden under the LCD unit.

The idea is to capture the signal and reproduce it with a cheap RF 433 FS1000A transmitter attached to an Arduino. The approach is similar to the approach in this post. I was successful with radio controlled power sockets.


I am using a Noolec RTL-SDR receiver (link) and capturing the signal with gqrx with FM demodulation.

The recorded .wav file is then exported to Audacity and looks like the attached pictures. The signal is repeated 3 times.


This signal looks different from most of the signals I have seen online from tutorials doing the same thing. I am not an expert in RF and radio communication so I am struggling to interpret it because:

  • I do not see vertical sharp lines
  • The short signals look more like spikes
  • The is a lot of noise at the end of the signal
  • The lows and the highs have both variable duration and I cannot identify a clear pulse



I tried assigning 0s to spikes and 1s to long signals, but it did not work at all.

Anyone could provide some hint?

Thanks!!

jremington

#1
Oct 08, 2018, 09:53 pm Last Edit: Oct 08, 2018, 09:54 pm by jremington
You will have a hard time decoding a signal that noisy.

I think you will have better luck capturing and decoding a clean waveform, using any of the cheap 433 MHz receivers available, as described in this blog article.

From that article:

Riva

Might also be worth trying URH as your using SDR.
Don't PM me for help as I will ignore it.

Rojj

I will try the sound card approach although I would like to avoid soldering. Those mic wires are so small!


You will have a hard time decoding a signal that noisy.

I think you will have better luck capturing and decoding a clean waveform, using any of the cheap 433 MHz receivers available, as described in this blog article.

From that article:


Rojj

#4
Oct 09, 2018, 11:04 pm Last Edit: Oct 10, 2018, 10:42 am by Rojj
OK

I am not an expert in electronics so please bear with me...

I managed (I think) to replicate the sound card approach. Unfortunately there is no signal detected in Audacity. See attached board and jack connection.

I have also tested it with a radio remote that I know it works as I have decoded it before.



The interesting fact is that if I connect the data wire to an arduino digital output (and not to the RF data output) everything works as expected. I have created a small sketch to send a pulse every second and it is correctly recorder by Audacity. I guess this means that the microphone is working.

Also, if I connect the RF data output to an arduino digital input (and not to the jack) I can detect the signal on the serial monitor! And this means that the RF receiver is working.

Any idea? Is there something wrong with my circuit?

Thanks

Rojj

It finally worked!!

The two main issues were:

  • Capturing the signal with a macbook. I used Audacity on an old PC and it worked fine. The signal was recorded but it was still not clear enough
  • Use a dedicated power supply. I used 3AA batteries. The signal was much, much clearer. See attached picture for the circuit.


Finally, I abandoned the idea of decoding the signal and simply replicated the HIGHs and LOWs with the appropriate durations in microseconds and sent the raw signal.

Code: [Select]

#define rfSendPin 4
#define ledPin 13        //Onboard LED = digital pin 13

// These are the duration of the HIGHs and LOWs [1, 0, 1, 0, ...]
int times_on[55] = {667, 438, 531, 438, 542, 438, 531, 438, 531, 438, 500, 469, 1010, 1479, 1042, 1010, 969, 531, 531, 531, 531, 938, 573, 500, 938, 531, 531, 531, 531, 938, 531, 531, 531, 531, 531, 531, 531, 531, 948, 1010, 531, 531, 531, 531, 531, 531, 531, 531, 906, 531, 531, 969, 969, 969, 969};
int times_off[55] = {667, 438, 573, 417, 604, 417, 542, 448, 510, 479, 510, 479, 958, 1500, 1021, 1021, 1021, 573, 573, 479, 542, 875, 573, 448, 958, 542, 542, 510, 510, 875, 604, 542, 510, 479, 542, 479, 510, 479, 542, 479, 542, 479, 510, 479, 542, 510, 542, 510, 958, 990, 958, 1021, 958, 958, 958};

bool sign = HIGH;
int repeat = 0;

void setup() {
  pinMode(rfSendPin, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  // Send the signal 3 times
  while (repeat < 3) {
    Serial.print("In:");
    Serial.print(repeat);

    // Start with a low signal for second
    digitalWrite(rfSendPin, LOW);
    delay(1000);

    // Send the raw signal
    for (int8_t i = 0; i < 55; i++) {
      digitalWrite(rfSendPin, sign);

      // For ON
      delayMicroseconds(times_on[i]);

      // For OFF
//      delayMicroseconds(times_on[i]);
     
      sign = !sign;
    }
    repeat += 1;
  }
}

Go Up