I have a set of 4 power sockets that can be turned on and off with an RF remote. That remote has 4 pairs of on/off buttons along with a master pair that can control all sockets at once.
Initially, the power sockets do not know about the remote, one needs to "program" the socket by pressing the desired "ON" button while the socket is in learning mode.
Sniffing the 433MHz signal is quite easily done and repeating captured signals works just fine, so there does not appear to be any kind of security here.
Out of curiosity, I wanted to understand the structure of data sent to these sockets and have figured out that it's made of 24 bits with the following structure:
| Nibble | Usage |
|---|---|
| 5 | Remote Id |
| 1-4 | Action code |
| 0 | Button Id |
So for instance, if I receive 5ae940, the Remote Id is 5, the Button Id is 0 and the action code is ae94
Recording multiple button presses, I discovered that the same button, On for A channel for instance, rolls between 4 possible action codes. And using a second set of power sockets bought 3 years ago shows that they are cross compatible with the newer one, with a different set of 4 possible action codes.
When placing the power socket in learning mode, there is only one button press needed, so the socket itself has a way to identify any of the four possible action codes as equivalent to the one it has learnt.
What I have a hard time figuring out is what makes those 4 possible action codes related to each other.
Here are the captured packets and their associated action:
| Set year | A On | A Off | B On | B Off | C On | C Off | D On | D Off | Master On | Master Off |
|---|---|---|---|---|---|---|---|---|---|---|
| 2019 | bf756cb7441cbd9c5cbe3aac | b20e7cb5212cb9d88cb8c0bc | b6af35b453f5b0f6e5bc1705 | b16bc5b3b995bb8dd5bae245 | b20e7eb5212eb9d88eb8c0be | bf756eb7441ebd9c5ebe3aaz | b16bc7b3b997bb8dd7bae247 | b6af37b453f7b0f6e7bc1707 | b20e72b52122b9d882b8c0b2 | bf7562b74412bd9c52be3aa2 |
| 2022 | 5ae94059287052acb0530d30 | 5814a05d5b2054cf10559090 | 5ae94459287452acb4530d34 | 5814a45d5b2454cf14559094 | 5ae94c59287c52acbc530d3c | 5814ac5d5b2c54cf1c55909c | 5814a25d5b2254cf12559092 | 5ae94259287252acb2530d32 | 5814aa5d5b2a54cf1a55909a | 5ae94a59287a52acba530d3a |
So in 2019, I bought remote with Id b and in 2002 the new remote has Id 5
What can be seen is that if bit 1 of the button Id is set, then the meaning of the action code is reversed.
What I could not figure out yet is how to detect that a given button Id is the "Master" one for the remote. For remote 5, it could be because a is the binary complement of the remote Id, but this does not work for remote Id b
And as already mentioned above, I cannot figure out the logic that connects together any given set of 4 action codes. As a reference, here are the 6 sets I have so far:
| Set 1 | Set 2 | Set 3 | Set 4 | Set 5 | Set 6 |
|---|---|---|---|---|---|
f7567441d9c5e3aa | 20e752129d888c0b | 6af3453f0f6ec170 | 16bc3b99b8ddae24 | ae9492872acb30d3 | 814ad5b24cf15909 |
I have tried various things like xor-ing, and-ing, or-ing values in a group, comparing bits set to 1 in any given values but I could not figure out what makes those group of 4 values related to each other.
I understand that this is quite a lengthy message, but I wanted to make sure that I share all the discoveries I made into this endeavor.
I totally admit that I can store the above 6 sets of values in a constant array and be done with it, but this would leave an itch in my brain...
Many thanks in advance for any suggestions, things to try, hints...
EDIT 2002 02 05
The remote appears to have a global value indicated which of the next four possible values is to be used.
If we consider the 2022 remote, On button A is in the ae94, 9287, 2acb, 30d3 group and On button D is in the 814a, d5b2, 4cf1, 5909 group.
Here are the codes used following the button presses in that sequence:
| Button | Code used |
|---|---|
| On A | ae94 |
| On D | d5b2 |
| On A | 2acb |
| On A | 30d3 |
| On D | 814a |
As you can see, some values are "skipped" because another button was pressed.
Taking the battery off for a while and placing it back on does not change the codes that are sent by the remote.
Both sets are sold by LIDL under the Silvercrest brand, the one from 2019 having those references:
IAN 284705
Article# 1 04772 1706
While the one from 2022 has those:
Reference 36626_2101
Model 8 50 50 00066
Both remotes look like this:
The whole point of this research is to be able to make the plugin for the RFLink32 project much more flexible. Indeed, it currently uses the "truth table" approach which only works with my own set of sockets.
