Salus RT505TX

112 views
Skip to first unread message

Adrian Stevenson

unread,
Oct 25, 2017, 5:12:54 PM10/25/17
to rtl_433
I am attempting a new device decoder for the Salus RT505TX room thermostat but I need some advice and guidance.

At the moment I have the following limits set:

r_device salus = {
        .name           = "Salus RT505TX",
        .modulation     = FSK_PULSE_PCM,
        .short_limit    = 58,       
        .long_limit     = 58,       
        .reset_limit    = 9937,   //no idea what this should be?
        .json_callback  = &salus_callback,
        .disabled       = 0,
        .demod_arg      = 1,
        .fields         = output_fields
};

When I look at the signal analysis I can see that the modulation seems to change part way through.  37 Pulses with a width of 14511 (short distance 58 ms) then 22 pulses with a width of 6985 with a short distance of 28 ms).  
After 0.262144s the signal is then repeated another 5 times.

Are there any other devices that exhibit this behaviour, I can then hopefully look at the code and learn from?
What should the reset limit be set at?

Detected FSK package    @ @0.000000s
Analyzing pulses...
Total count:   37,  width: 14511                (58.0 ms)
Pulse width distribution:
 [ 0] count:    1,  width:    12 [12;12]        (  48 us)
 [ 1] count:   25,  width:   104 [104;105]      ( 416 us)
 [ 2] count:    6,  width:   208 [208;209]      ( 832 us)
 [ 3] count:    2,  width:   313 [313;313]      (1252 us)
 [ 4] count:    2,  width:   418 [418;418]      (1672 us)
 [ 5] count:    1,  width:   147 [147;147]      ( 588 us)
Gap width distribution:
 [ 0] count:    3,  width:   295 [257;314]      (1180 us)
 [ 1] count:   21,  width:   104 [104;105]      ( 416 us)
 [ 2] count:    6,  width:   209 [209;209]      ( 836 us)
 [ 3] count:    1,  width:  1462 [1462;1462]    (5848 us)
 [ 4] count:    4,  width:   600 [522;627]      (2400 us)
 [ 5] count:    1,  width:   835 [835;835]      (3340 us)
Pulse period distribution:
 [ 0] count:    5,  width:   304 [269;314]      (1216 us)
 [ 1] count:   18,  width:   208 [208;209]      ( 832 us)
 [ 2] count:    6,  width:   417 [417;418]      (1668 us)
 [ 3] count:    2,  width:  1409 [1253;1566]    (5636 us)
 [ 4] count:    2,  width:   574 [522;626]      (2296 us)
 [ 5] count:    2,  width:   783 [731;835]      (3132 us)
 [ 6] count:    1,  width:  1044 [1044;1044]    (4176 us)
Level estimates [high, low]:  15483,    224
Frequency offsets [F1, F2]:   17418, -15651     (+66.4 kHz, -59.7 kHz)
Guessing modulation: No clue...


Total count:   22,  width:  6985                (27.9 ms)
Pulse width distribution:
 [ 0] count:    1,  width:     0 [ 0; 0]        (   0 us)
 [ 1] count:    2,  width:   331 [314;348]      (1324 us)
 [ 2] count:   17,  width:   104 [104;105]      ( 416 us)
 [ 3] count:    1,  width:   209 [209;209]      ( 836 us)
 [ 4] count:    1,  width:   154 [154;154]      ( 616 us)
Gap width distribution:
 [ 0] count:    1,  width:    10 [10;10]        (  40 us)
 [ 1] count:   15,  width:   104 [104;105]      ( 416 us)
 [ 2] count:    3,  width:   313 [313;313]      (1252 us)
 [ 3] count:    1,  width:   522 [522;522]      (2088 us)
 [ 4] count:    1,  width:  1148 [1148;1148]    (4592 us)
Pulse period distribution:
 [ 0] count:    1,  width:    10 [10;10]        (  40 us)
 [ 1] count:    5,  width:   424 [417;453]      (1696 us)
 [ 2] count:   12,  width:   208 [208;209]      ( 832 us)
 [ 3] count:    1,  width:   313 [313;313]      (1252 us)
 [ 4] count:    1,  width:   626 [626;626]      (2504 us)
 [ 5] count:    1,  width:  1253 [1253;1253]    (5012 us)
Level estimates [high, low]:  15522,    266
Frequency offsets [F1, F2]:   17593, -13617     (+67.1 kHz, -51.9 kHz)
Guessing modulation: No clue...


Detected FSK package    @ @0.262144s
Analyzing pulses...
Total count:   37,  width: 14503                (58.0 ms)
Pulse width distribution:
 [ 0] count:    1,  width:     0 [ 0; 0]        (   0 us)
 [ 1] count:    3,  width:   323 [313;342]      (1292 us)
 [ 2] count:   24,  width:   104 [104;105]      ( 416 us)
 [ 3] count:    6,  width:   209 [209;209]      ( 836 us)
 [ 4] count:    2,  width:   417 [417;418]      (1668 us)
 [ 5] count:    1,  width:   154 [154;154]      ( 616 us)
Gap width distribution:
 [ 0] count:    1,  width:    16 [16;16]        (  64 us)
 [ 1] count:   21,  width:   104 [104;106]      ( 416 us)
 [ 2] count:    2,  width:   313 [313;314]      (1252 us)
 [ 3] count:    6,  width:   209 [209;209]      ( 836 us)
 [ 4] count:    1,  width:  1462 [1462;1462]    (5848 us)
 [ 5] count:    4,  width:   600 [522;627]      (2400 us)
 [ 6] count:    1,  width:   836 [836;836]      (3344 us)
Pulse period distribution:
 [ 0] count:    1,  width:    16 [16;16]        (  64 us)
 [ 1] count:    8,  width:   434 [417;522]      (1736 us)
 [ 2] count:   17,  width:   208 [208;209]      ( 832 us)
 [ 3] count:    4,  width:   313 [313;313]      (1252 us)
 [ 4] count:    2,  width:  1409 [1253;1566]    (5636 us)
 [ 5] count:    3,  width:   730 [626;835]      (2920 us)
 [ 6] count:    1,  width:  1044 [1044;1044]    (4176 us)
Level estimates [high, low]:  15503,    330
Frequency offsets [F1, F2]:   15144, -11583     (+57.8 kHz, -44.2 kHz)
Guessing modulation: No clue...

Detected FSK package    @ @0.262144s
 @0.262144s

Analyzing pulses...
Total count:   22,  width:  6986                (27.9 ms)
Pulse width distribution:
 [ 0] count:    1,  width:     0 [ 0; 0]        (   0 us)
 [ 1] count:    2,  width:   327 [313;341]      (1308 us)
 [ 2] count:   17,  width:   104 [104;105]      ( 416 us)
 [ 3] count:    1,  width:   208 [208;208]      ( 832 us)
 [ 4] count:    1,  width:   154 [154;154]      ( 616 us)
Gap width distribution:
 [ 0] count:    1,  width:    17 [17;17]        (  68 us)
 [ 1] count:   15,  width:   104 [104;105]      ( 416 us)
 [ 2] count:    3,  width:   313 [313;314]      (1252 us)
 [ 3] count:    1,  width:   522 [522;522]      (2088 us)
 [ 4] count:    1,  width:  1148 [1148;1148]    (4592 us)
Pulse period distribution:
 [ 0] count:    1,  width:    17 [17;17]        (  68 us)
 [ 1] count:    5,  width:   423 [417;446]      (1692 us)
 [ 2] count:   12,  width:   208 [208;209]      ( 832 us)
 [ 3] count:    1,  width:   313 [313;313]      (1252 us)
 [ 4] count:    1,  width:   627 [627;627]      (2508 us)
 [ 5] count:    1,  width:  1252 [1252;1252]    (5008 us)
Level estimates [high, low]:  15447,    314
Frequency offsets [F1, F2]:   15352, -12955     (+58.6 kHz, -49.4 kHz)
Guessing modulation: No clue...

At the moment the output from the decoder looks like this:

Thermostat On Signal

[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f fc
[00] {478} 7f ff ff 00 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f f8
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f fc
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f f8
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f f8
[00] {478} 7f ff ff 00 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f f0
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f f0
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f f8
[00] {478} bf ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f fc
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 00 7f 00 00 03 f8 00 00 1f f8

Thermostat Off Signal

[00] {478} 7f ff ff 00 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 00 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 00 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00
[00] {478} 7f ff ff 00 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 3f 80 fe 03 f8 0f e0 00 00 7f 01 ff f8 07 ff ff e0 3f 80 fe 00 00 00 00 1f c0 00 00 00 00 00 00 00 00 3f 80 00 00 03 f8 00 0f e0 00

Bytes 51 & 52
0000 0000 0111 1111=007f= on
0011 1111 1000 0000=3f80= off 

Christian Zuckschwerdt

unread,
Oct 26, 2017, 3:22:34 AM10/26/17
to rtl_433
If this is really FSK then then width distribution and talking about pulses is not very meaningful. Look at the spectrogram, and analyze the signal in Audacity. Post a good sample here for others to take a look maybe.

Adrian Stevenson

unread,
Nov 4, 2017, 10:03:27 AM11/4/17
to rtl_433

Christian,

Thanks for the response to my post.

I have uploaded the Salus samples to rtl_433_tests/ and have attached some files here.

Viewing the waveform signal with Audacity,I can see that the waveform frequency is varying and as I am getting some consistent data using FSK_PULSE_PCM.
I think, I just need some confirmation/guidance about the limit levels and how to get all 20 signals into the same bit_buffer array.

Thanks

Adrian
Salus RT505TX.png
gfile003.data
Salus RT505TX-Zoomed-out.png
Salus RT505TX-spectrogram.png

Christian Zuckschwerdt

unread,
Dec 4, 2017, 11:52:14 AM12/4/17
to rtl_433
The Salus RT505TX transmission has 20 packets with alternating long and short packets.
There are 8162 samples between packets, long packet 14560 samples, short packet 7026 samples.
A bit is 105 samples (about 8x the width I expect to see @250kHz -- this is sampled with 2.048MHz, right?)
The packet starts with 3-4 zeros and ~12 one/zero sync (one/zero can be interchanged, it's just f1/f2)

A quick trial gives (which looks reasonable):

{139} 15 55 55 45 ba 94 a2 00 04 1a c0 cf 00 a1 00 e6 4d e0
 {66} ea aa aa 8b 75 04 00 44 40
{138} ea aa aa 8b 75 29 44 00 08 35 81 9e 01 42 01 cc 9b c0
 {66} ea aa aa 8b 75 04 00 44 40
{138} ea aa aa 8b 75 29 44 00 08 35 81 9e 01 42 01 cc 9b c0
 {66} ea aa aa 8b 75 04 00 44 40
{138} ea aa aa 8b 75 29 44 00 08 35 81 9e 01 42 01 cc 9b c0
 {66} ea aa aa 8b 75 04 00 44 40
{138} ea aa aa 8b 75 29 44 00 08 35 81 9e 01 42 01 cc 9b c0
 {66} ea aa aa 8b 75 04 00 44 40
{138} ea aa aa 8b 75 29 44 00 08 35 81 9e 01 42 01 cc 9b c0
 {66} ea aa aa 8b 75 04 00 44 40
{138} ea aa aa 8b 75 29 44 00 08 35 81 9e 01 42 01 cc 9b c0
 {66} ea aa aa 8b 75 04 00 44 40
{138} ea aa aa 8b 75 29 44 00 08 35 81 9e 01 42 01 cc 9b c0
 {66} ea aa aa 8b 75 04 00 44 40
{139} 75 55 55 45 ba 94 a2 00 04 1a c0 cf 00 a1 00 e6 4d e0
 {66} ea aa aa 8b 75 04 00 44 40
{138} ea aa aa 8b 75 29 44 00 08 35 81 9e 01 42 01 cc 9b c0
 {67} 75 55 55 45 ba 82 00 22 20

The reset_limit should be 8162/2048000*1000000 => 4000 but that is too long, so use 800 µs (wider than your longest stretch of 0 or 1).

Adrian Stevenson

unread,
Dec 19, 2017, 9:43:00 AM12/19/17
to rtl_433
Hi Christian,

Your example output looks a lot better than what I have.  What modulation and reset limits are you using?


The sampling rate would of been the default of 250000.

With regards "The reset_limit should be 8162/2048000*1000000 => 4000" 
Should that say 8162 / 2048 000 000 Hz * 1000000 = 3.9 us or put another way 8162 / 2048 000 Khz * 1000 = 3.9 us
but the sampling is 250 000 so 8162 /250 = 32 us which would be too short..



Thanks

Christian Zuckschwerdt

unread,
Dec 19, 2017, 10:20:42 AM12/19/17
to rtl_433
Re: reset_limit "8162/2048000*1000000 => 4000" breaks down to: 8162 samples by 2048k sample rate = seconds, then times 10e6 to get microseconds.
I.e. I assumed 4000 us. With the default 250k it's 32648. 32 ms! Thats really slow/long.

Use http://triq.net/iqs -- drop some sample in, set to "x8" and you can roughly read the timing.

It's basic FSK, PCM coding with a pulse width of 105 samples @250k = 420 us. Try the feat-gedecode branch with:

rtl_433 -q -F json -X salus:FSK_PCM:420:420:33000 -r rtl_433_tests/tests/salus/01/gfile001.cu8

Reply all
Reply to author
Forward
0 new messages