LightwaveRF RF Protocol
The LightwaveRF RF protocol operates over 433.92MHz using on-off keying (OOK).
Data
The data consists of 5 bytes / 10 nibbles. They are as follows:
- Nibbles 1 and 2: a parameter for the commands. This might be the dim level or various other things
- Nibble 3: ""subunit"" - some remotes support individually controlling up to 16 devices. A nibble can have 16 values. Coincidence? ;)
- Nibble 4: ""command"" - the command, e.g. OFF, ON, SET_LEVEL.
- Nibbles 5-10: ""ID" the identifier of the remote, used with the subunit in pairing
Payload encoding
Each nibble of data is encoded as one of 16 bytes, from the table below:
Nibble value | Byte bits | Byte hex |
---|---|---|
0x0 | 1111 0110 | 0xF6 |
0x1 | 1110 1110 | 0xEE |
0x2 | 1110 1101 | 0xED |
0x3 | 1110 1011 | 0xEB |
0x4 | 1101 1110 | 0xDE |
0x5 | 1101 1101 | 0xDD |
0x6 | 1101 1011 | 0xDB |
0x7 | 1011 1110 | 0xBE |
0x8 | 1011 1101 | 0xBD |
0x9 | 1011 1011 | 0xBB |
0xA | 1011 0111 | 0xB7 |
0xB | 0111 1110 | 0x7E |
0xC | 0111 1101 | 0x7D |
0xD | 0111 1011 | 0x7B |
0xE | 0111 0111 | 0x77 |
0xF | 0110 1111 | 0x6F |
The payload is constructed from these nibbles in the following way:
payload = "1" for each nibble payload += "1" payload += lookup[nibble] payload += "1"
E.g. to send the ON command (0x1) with no parameter (0x00) from remote 0xFEFEFE subunit 0xF, we'd have the following nibbles:
Parameter | Subunit | Command | ID | |||||||
---|---|---|---|---|---|---|---|---|---|---|
Nibbles | 0x0 | 0x0 | 0xF | 0x1 | 0xF | 0xE | 0xF | 0xE | 0xF | 0xE |
Encoded | 1111 0110 | 1111 0110 | 0110 1111 | 1110 1110 | 0110 1111 | 0111 0111 | 0110 1111 | 0111 0111 | 0110 1111 | 0111 0111 |
Thus producing:
1 1 1111 0110 1 1111 0110 1 0110 1111 1 1110 1110 1 0110 1111 1 0111 0111 1 0110 1111 1 0111 0111 1 0110 1111 1 0111 0111 1
RF signal
The RF signal is generated from this in the following way:
for each bit, index in payload when bit is 1 send high for 250μs if payload[index+1] is 0 send low for 1250μs else send low for 250μs
In other words the sequence "10" is encoded as a 250μs high followed by a 1250μs low, whereas the sequence "1" is sent as a 250μs high followed by a 250μs low. Note: the encoding never allows for two zero bits to touch.
Commands
Observed from (siemens JSJSLW100LBK) remote
Command | Hex parameter | meaning |
---|---|---|
ON | x00 | On (to last level) |
xBF | increase brightness | |
OFF | x00 | Turn off (sometimes followed by x40) |
xA0 | decrease brightness | |
xC0 | All off, sent with subunit D4 | |
MOOD | x82 | set lights to mood (mood #2?) |
x02 | Set current level to mood memory (mood #2 ?) |
Observed behaviour
Command | Hex parameter | meaning |
---|---|---|
ON | x00 - x3F | On (to last level) |
x40 - x5F x60 - x7F x80 - x9F | set specific level (out of 32 levels) | |
xA0 - xBF | increase brightness | |
xC0 - xDF xE0 - xEF | set all to specific level (out of 32 levels) | |
OFF | x00 - x7F | Turn off |
x80 - X9F | set specific level (out of 32 levels) if already on | |
xA0 - xBF | decrease brightness | |
xC0 - xEF | all off | |
This article is issued from Old-wiki. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.