[solved] 433Mhz decoding (Globaltronics SKL-W1B temperature sensor)

Hi, as the heading says I try to decode the signal send from my weather stations sensor.

The signal is not detected by rc-switches or radio-head (ask)

Until now I've recorded several transmissions using a cheap 433mhz receiver and audacity.
("waveform_24.5.png" shows the first out of seven transmissions for 24.5°C)

The values are almost the same as in this post but both codes don't send anything.
I've tried connecting the rx-module to an ESP8266 (the tx-module officially needs 5V but it also works with 3.3V. Anyway, the sketches just send random hex data (I think it's because of different timers?) and an Arduino nano.

Has anybody an idea why I am not receiving any data?

Suspect either wiring, code or timing errors.

jremington:
Suspect either wiring, code or timing errors.

I don't think that there is a problem using the code written for a uno on a nano.
My wiring is also correct (I can send data to my nano using rc-switch or radio-head)

OK first off this will only work if this sensor repeats the code 3 times or more in a row, if it does, try making these changes in RC switch

RCSwitch.cpp

#if defined(ESP8266) || defined(ESP32)
static const RCSwitch::Protocol proto[] = {
#else
static const RCSwitch::Protocol PROGMEM proto[] = {
#endif
  { 350, {  1, 31 }, {  1,  3 }, {  3,  1 }, false },    // protocol 1
  { 650, {  1, 10 }, {  1,  2 }, {  2,  1 }, false },    // protocol 2
  { 100, { 30, 71 }, {  4, 11 }, {  9,  6 }, false },    // protocol 3
  { 380, {  1,  6 }, {  1,  3 }, {  3,  1 }, false },    // protocol 4
  { 500, {  6, 14 }, {  1,  2 }, {  2,  1 }, false },    // protocol 5
  { 450, { 23,  1 }, {  1,  2 }, {  2,  1 }, true },     // protocol 6 (HT6P20B)
  { 150, {  2, 62 }, {  1,  6 }, {  6,  1 }, false },    // protocol 7 (HS2303-PT, i. e. used in AUKEY)
  { 200, {  3, 130}, {  7, 16 }, {  3,  16}, false},     // protocol 8 Conrad RS-200 RX
  { 200, { 130, 7 }, {  16, 7 }, { 16,  3 }, true},      // protocol 9 Conrad RS-200 TX
  { 365, { 18,  1 }, {  3,  1 }, {  1,  3 }, true },     // protocol 10 (1ByOne Doorbell)
  { 270, { 36,  1 }, {  1,  2 }, {  2,  1 }, true },     // protocol 11 (HT12E)
  { 320, { 36,  1 }, {  1,  2 }, {  2,  1 }, true },      // protocol 12 (SM5212)
  { 108, {  5, 83 }, {  5,  38 }, {  5,  19 }, false },    // protocol 13 yours one of these may work
  { 108, {  83, 5 }, { 38,  5 }, {  19,  5 }, true }    // protocol 14 yours
};

enum {
   numProto = sizeof(proto) / sizeof(proto[0])
};

#if not defined( RCSwitchDisableReceiving )
volatile unsigned long RCSwitch::nReceivedValue = 0;
volatile unsigned int RCSwitch::nReceivedBitlength = 0;
volatile unsigned int RCSwitch::nReceivedDelay = 0;
volatile unsigned int RCSwitch::nReceivedProtocol = 0;
int RCSwitch::nReceiveTolerance = 90;
const unsigned int RCSwitch::nSeparationLimit = 7000;// was 4300;
// separationLimit: minimum microseconds between received codes, closer codes are ignored.
// according to discussion on issue #14 it might be more suitable to set the separation
// limit to the same time as the 'low' part of the sync signal for the current protocol.
unsigned int RCSwitch::timings[RCSWITCH_MAX_CHANGES];
#endif

And change this in RCSwitch.h

#define RCSWITCH_MAX_CHANGES 80

if it works i can try and explain the changes, let me know how it goes
Best of luck

Thanks for your reply.

The transmitter repeats the data 5 times every 30 seconds.
I tried "ReciveDemo_Simple &_Advanced" with the changes you suggested but I still don't get any data :-\ (I tried the sketches on my arduino nano and my ESP8266-nodemcu)

hmm i might have made a error somewhere try sending this code and decode it with audacity and see if you can spot any difference or something, and if you can pick up the code with the rc sw mods i made.

mySwitch.setProtocol(13);
or
mySwitch.setProtocol(14);

and

mySwitch.send(100788756, 37);

This might do it replace rc sw with this one and use ReceiveDemo_Advanced, i made some changes so it can receive uint64_t values instead of unsigned long(32)

and some other changes, this is a modified version i use myself to receive similar transmissions so I'm afraid i don't remember all the changes i made...

Best of luck

rc-switch-master_64.zip (20.5 KB)

swe-dude:
hmm i might have made a error somewhere try sending this code and decode it with audacity and see if you can spot any difference or something, and if you can pick up the code with the rc sw mods i made.

mySwitch.setProtocol(13);
or
mySwitch.setProtocol(14);

and

mySwitch.send(100788756, 37);

Using Protocol 13 gives the right output in the Serial monitor. But when using Protocol 14, the receive-sketch also prints "Protocol: 13".

swe-dude:
This might do it replace rc sw with this one and use ReceiveDemo_Advanced, i made some changes so it can receive uint64_t values instead of unsigned long(32)...

Thanks, I will try it

It works!!!

I tried a bit with the pulselenght/ sync-bit etc. in the .cpp file and now im receiving data (almost 27°C in my room xD)

Here is the protocol:

{ 544, {  1,  17}, {  1,  4 }, {  1,  8 }, false },    // protocol 15 (SKL-W1B)

Thank you so much :slight_smile:

(I may have to edit the protocol a bit because currently I'm only getting a range of about 5-10cm but this can also be because of my very cheap receiver and it's under-voltage (MX-RM-5V))

ahh nice, as for the range that is probably the worst receiver out there, almost anything else you can buy would be better. google "coil loaded antenna 433mhz" with one of those you might get a few meters range if you are lucky(and add 0.1uf and 100uf caps close to receiver)

if you can get a rx500a with the small black coil antenna, or a srx882(connect cs to vcc) these are the ones i use myself.