Go Down

Topic: Please help me decode 433Mhz temperature sensor HYUNDAI WSC 1925 (Read 7434 times) previous topic - next topic


what IDE are you using guys? Arduino IDE seems to be not so good, notepad++ works better (have suggestions; function list; multiwindows etc).
Notepad++ for me every time.  :)
Don't PM me for help as I will ignore it.


Guys, maybe I can help little bit. I have spent some time hacking Hyundai WS 1815 which I believe use the same protocol. And I used your published tools here to make a working sensor emulator.

First, let me clarify the protocol, although you got most of it already:

  • first 4 bits are checksum ( sum nibbles - 1 modulo 16)
  • next 8 bits is station ID - it's generated randomly in sensor after power on. Does not seem to matter what that is
  • next 12 bits is the temperature in Celsius. Positive values and negative values are encoded in 12 bits. There is no freezing bits or whatever.
     +10 is 000001100100b and -10 is 111110011011b. It's binary complements.
  • next 2 bits is channel (1-3)
  • next bit is battery status 0-low, 1-OK
  • last bit is force sync (it's set when you power on sensor for the first time or press TX button on it). It just makes the base station beep.

The signal is repeated several times. 6 times works reliably for me.

I'm attaching working Arduino sketch which encode the payload to binary form and trasmit it.



yes, that use exactly the same protocol. You can use this https://github.com/joysfera/arduino-water-temp-transmitter directly to form and send packet.


Hi pedobry,
I will look on your sketch, maybe there is something new.

The protocol was successfully cracked before (and man can say, first, from left, 4 bits from temperature are freezing bits - 1111 - and then use two complement or normal temperature 0000). Last problem was to write functional sketch/libraries (transmitting, receiving).

From now I have testing these sketches and seems, that my 433Mhz hardware is bad. I'm not able to get temperature from outer station. I have special glass in windows (anti thief). Original meteo station have no problems... I have buy new modules. Today I will test opened windows and longer antennas.



Hi guys,
actually I'm very busy and don't have time to play with Arduino :/

I'm looking for some good IDE (I need to try them all; very good looks sublime text - but it's not free... need to test all IDE's that I find).

And I have continuously searching for good meteo station. I have find very good on Conrad with solar panel:

But after some time, I have discovered, that all of this types are only china overpriced products.
and Hyundai has this meteo station too (with nice caption Hyundai :)).

OK, then I have find this article

and have googled to find this on Czech Republic... whoala:
and on black friday price was +-1200Kč (+-50$) - unbeatable price for this set (receiver!, transmiter with temp and humi!). Probably on aliexpress will be this product too.

So first target is to get my old Hyundai to work (still have bad 433MHz receivers; delivery of good ones will be at January probably). I have find, that code posted on post #29 doesn't use two complement (bug).

Then hacking of new china meteo station.

I have buy one solar panel too (12V, 30W) and have one old little from garden light (looks identical that use Conrad on solar meteo; probably china generic for everybody and everyday use)

With best regards



I accidentally found this thread and the PinChangeISR0() function works very well, I just had to adjust the timings a bit.

I am using this on ESP8266 as wifi client with uploading to emoncms.org, there is BME280 connected too, works very well. But I have one problem: something prevents the ESP8266 from processing the 433MHz data for more than 1 hour. After 1 hour it looks it stops receiving the data, but when I reboot the ESP, it works again. ESP8266 itself works for more than 1 hour, it just stops processing the 433MHz data after 1 hour from reboot.

- BME280 is connected via I2C
- 433MHZ RX (SRX882) connected to D7 / digital pin 13
- ESP8266 is responding normally (it's uploading BME280 data, is responding on WebServer port 80, and so on)

looks like some overflow of some long int variable. anybody having a hint, what is going on?

TODO: count number of interrupts in function PinChangeISR0() and watch the value growing after one hour. This will show if the interrupt function is not being called anymore, or there is another problem

EDIT: SOLVED! easy as hell ...

void PinChangeISR0(){                                     // Pin 2 (Interrupt 0) service routine
  unsigned long Time = micros();                          // Get current time
  if (digitalRead(2) == LOW) {
// Falling edge
    if (Time > (rise_Time + glitch_Length)) {
     ..... }

local Time variable gets update with each interrupt call. the global variable rise_Time raises with time and never gets in sync with micros() once micros() rolls over to zero (after 71 minutes).

I just needed to add a line to my main loop:
if (rise_Time > micros) { rise_time=0; fall_Time=0; }

all works now

Go Up